Ansible 我在哪里可以得到可解析的预定义变量列表?
我看到Ansible提供了一些预定义的变量,我们可以在剧本和模板文件中使用这些变量。例如,主机ip地址为ansible_eth0.ipv4.address。在谷歌搜索文档时,我发现没有找到所有可用变量的列表。有人能帮我把它们列出来吗?啊!从: 如何查看所有ansible_uu变量的列表? 默认情况下,Ansible收集有关所管理机器的“事实”,这些事实可以在剧本和模板中访问。要查看有关机器的所有可用事实的列表,可以将“设置”模块作为特别操作运行:Ansible 我在哪里可以得到可解析的预定义变量列表?,ansible,ansible-facts,Ansible,Ansible Facts,我看到Ansible提供了一些预定义的变量,我们可以在剧本和模板文件中使用这些变量。例如,主机ip地址为ansible_eth0.ipv4.address。在谷歌搜索文档时,我发现没有找到所有可用变量的列表。有人能帮我把它们列出来吗?啊!从: 如何查看所有ansible_uu变量的列表? 默认情况下,Ansible收集有关所管理机器的“事实”,这些事实可以在剧本和模板中访问。要查看有关机器的所有可用事实的列表,可以将“设置”模块作为特别操作运行: ansible -m setup hostnam
ansible -m setup hostname
这将打印出一个字典,其中包含该特定主机可用的所有事实
下面是我的流浪虚拟机scdev的输出:
scdev | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.2.15",
"192.168.10.10"
],
"ansible_all_ipv6_addresses": [
"fe80::a00:27ff:fe12:9698",
"fe80::a00:27ff:fe74:1330"
],
"ansible_architecture": "i386",
"ansible_bios_date": "12/01/2006",
"ansible_bios_version": "VirtualBox",
"ansible_cmdline": {
"BOOT_IMAGE": "/vmlinuz-3.2.0-23-generic-pae",
"quiet": true,
"ro": true,
"root": "/dev/mapper/precise32-root"
},
"ansible_date_time": {
"date": "2013-09-17",
"day": "17",
"epoch": "1379378304",
"hour": "00",
"iso8601": "2013-09-17T00:38:24Z",
"iso8601_micro": "2013-09-17T00:38:24.425092Z",
"minute": "38",
"month": "09",
"second": "24",
"time": "00:38:24",
"tz": "UTC",
"year": "2013"
},
"ansible_default_ipv4": {
"address": "10.0.2.15",
"alias": "eth0",
"gateway": "10.0.2.2",
"interface": "eth0",
"macaddress": "08:00:27:12:96:98",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "10.0.2.0",
"type": "ether"
},
"ansible_default_ipv6": {},
"ansible_devices": {
"sda": {
"holders": [],
"host": "SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)",
"model": "VBOX HARDDISK",
"partitions": {
"sda1": {
"sectors": "497664",
"sectorsize": 512,
"size": "243.00 MB",
"start": "2048"
},
"sda2": {
"sectors": "2",
"sectorsize": 512,
"size": "1.00 KB",
"start": "501758"
},
},
"removable": "0",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "167772160",
"sectorsize": "512",
"size": "80.00 GB",
"support_discard": "0",
"vendor": "ATA"
},
"sr0": {
"holders": [],
"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
"model": "CD-ROM",
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "VBOX"
},
"sr1": {
"holders": [],
"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)",
"model": "CD-ROM",
"partitions": {},
"removable": "1",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "2097151",
"sectorsize": "512",
"size": "1024.00 MB",
"support_discard": "0",
"vendor": "VBOX"
}
},
"ansible_distribution": "Ubuntu",
"ansible_distribution_release": "precise",
"ansible_distribution_version": "12.04",
"ansible_domain": "",
"ansible_eth0": {
"active": true,
"device": "eth0",
"ipv4": {
"address": "10.0.2.15",
"netmask": "255.255.255.0",
"network": "10.0.2.0"
},
"ipv6": [
{
"address": "fe80::a00:27ff:fe12:9698",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "08:00:27:12:96:98",
"module": "e1000",
"mtu": 1500,
"type": "ether"
},
"ansible_eth1": {
"active": true,
"device": "eth1",
"ipv4": {
"address": "192.168.10.10",
"netmask": "255.255.255.0",
"network": "192.168.10.0"
},
"ipv6": [
{
"address": "fe80::a00:27ff:fe74:1330",
"prefix": "64",
"scope": "link"
}
],
"macaddress": "08:00:27:74:13:30",
"module": "e1000",
"mtu": 1500,
"type": "ether"
},
"ansible_form_factor": "Other",
"ansible_fqdn": "scdev",
"ansible_hostname": "scdev",
"ansible_interfaces": [
"lo",
"eth1",
"eth0"
],
"ansible_kernel": "3.2.0-23-generic-pae",
"ansible_lo": {
"active": true,
"device": "lo",
"ipv4": {
"address": "127.0.0.1",
"netmask": "255.0.0.0",
"network": "127.0.0.0"
},
"ipv6": [
{
"address": "::1",
"prefix": "128",
"scope": "host"
}
],
"mtu": 16436,
"type": "loopback"
},
"ansible_lsb": {
"codename": "precise",
"description": "Ubuntu 12.04 LTS",
"id": "Ubuntu",
"major_release": "12",
"release": "12.04"
},
"ansible_machine": "i686",
"ansible_memfree_mb": 23,
"ansible_memtotal_mb": 369,
"ansible_mounts": [
{
"device": "/dev/mapper/precise32-root",
"fstype": "ext4",
"mount": "/",
"options": "rw,errors=remount-ro",
"size_available": 77685088256,
"size_total": 84696281088
},
{
"device": "/dev/sda1",
"fstype": "ext2",
"mount": "/boot",
"options": "rw",
"size_available": 201044992,
"size_total": 238787584
},
{
"device": "/vagrant",
"fstype": "vboxsf",
"mount": "/vagrant",
"options": "uid=1000,gid=1000,rw",
"size_available": 42013151232,
"size_total": 484145360896
}
],
"ansible_os_family": "Debian",
"ansible_pkg_mgr": "apt",
"ansible_processor": [
"Pentium(R) Dual-Core CPU E5300 @ 2.60GHz"
],
"ansible_processor_cores": "NA",
"ansible_processor_count": 1,
"ansible_product_name": "VirtualBox",
"ansible_product_serial": "NA",
"ansible_product_uuid": "NA",
"ansible_product_version": "1.2",
"ansible_python_version": "2.7.3",
"ansible_selinux": false,
"ansible_swapfree_mb": 766,
"ansible_swaptotal_mb": 767,
"ansible_system": "Linux",
"ansible_system_vendor": "innotek GmbH",
"ansible_user_id": "neves",
"ansible_userspace_architecture": "i386",
"ansible_userspace_bits": "32",
"ansible_virtualization_role": "guest",
"ansible_virtualization_type": "virtualbox"
},
"changed": false
}
当前文档现在有一个注意,文档中似乎有关于连接配置变量或“行为”变量的正式文档,这些变量未在主机变量中列出 另外,
sudo
选项在那里没有记录(是的,它的sudo
不是ansible\u sudo
,正如你所期望的那样…),可能还有一些没有,但这是我在他们身上找到的最好的文档
ansible -m setup hostname
仅获取安装模块收集的事实
Gilles Cornu发布了一个列表,列出特定主机的所有变量
模板(后来称为dump_变量):
使用它的剧本:
- hosts: all
tasks:
- template:
src: templates/dump_variables
dest: /tmp/ansible_variables
- fetch:
src: /tmp/ansible_variables
dest: "{{inventory_hostname}}_ansible_variables"
之后,在每个主机上都有一个所有变量的转储,在本地工作站上的tmp文件夹中有一个文本转储文件的副本。如果不需要本地副本,可以删除fetch语句
这包括收集的事实、主机变量和组变量。
因此,您可以看到ansible默认变量,如组名称、目录主机名、ansible ssh主机等等。ansible中有3个变量源:
ansible-m setup hostname
以下是从Ansible 1.9文档中提取的列表:
- 组名称
- 团体
- 目录\u主机名
- ansible_主机名
- 库存\u主机名\u短
- 扮演主持人
- 委托
- 存货主任
- 库存文件
我使用这个简单的剧本:
---
# vars.yml
#
# Shows the value of all variables/facts.
#
# Example:
#
# ansible-playbook vars.yml -e 'hosts=localhost'
#
- hosts: localhost
tasks:
- fail: "You must specify a value for `hosts` variable - e.g.: ansible-playbook vars.yml -e 'hosts=localhost'"
when: hosts is not defined
- hosts: "{{ hosts }}"
tasks:
- debug: var=vars
- debug: var=hostvars[inventory_hostname]
仅供参考:这个github项目向您展示了如何在所有主机上列出90%的变量。我发现它比单主机命令更具全局实用性。自述文件包括构建简单库存报告的说明。更重要的是,在剧本的结尾运行这个程序来查看所有事实。要同时调试任务行为,请使用寄存器: 结果缺少几个项目: -包含的YAML文件变量 -额外变量
-此处描述的许多Ansible内部变量:有些变量在每个主机上都不可用,例如
Ansible\u域
和域
。如果需要调试情况,我登录服务器并发出:
user@server:~$ ansible -m setup localhost | grep domain
[WARNING]: provided hosts list is empty, only localhost is available
"ansible_domain": "prd.example.com",
有很多变量被定义为事实-- 可用于分析变量。请小心运行以下命令。在我们的设置中,它生成444709条16MB的线路:
ansible -m debug -a 'var=hostvars' localhost
我不确定,但可能需要启用事实缓存
如果只需要一台主机,请将主机名用作hostvars
哈希的键:
ansible -m debug -a 'var=hostvars.localhost' localhost
此命令还将显示和变量。我知道这个问题已经得到了回答,但我觉得ansible_*facts中还没有包含一整套其他预定义变量。涵盖了我在浏览本页时一直在寻找的指令(修改Ansible行为的变量) 这包括一些常见和特定的用例指令:
- 变成:控制权限升级(sudo)
- 委托给:在另一台主机上运行任务(如在本地主机上运行)
- 串行:允许您在进入下一集之前,在特定数量/百分比的主机上运行播放
ansible-m setup-i,
-不要忘记末尾的逗号,将其列为列表,从而形成一份清单。是否没有记录在案的清单,说明这些东西是什么?哪些东西可能会出现在各种服务器的列表中,即使它们没有出现在您正在访问的服务器上?没有!这不太好笑吗。而且很烦人。不管怎么说,你看,ansible文档在某些方面相当薄弱,我认为这可能会让新手感到不快。我的意思是,我不能完全理解在include_任务中使用标记,这似乎会导致奇怪的行为,而且您仍然无法获得使用它的完整变量列表。您能详细说明您的评论吗?请更新此修复,因为有时(特别是在云资源清册中),ansible-m设置
不起作用,您需要从剧本中获取此信息。Enno在上面帖子中的模板技巧在v2.2.1上为我出错。你在2下提供的列表有我需要的,只是手工很难找到。谢谢我认为这是唯一完整的答案,因为OP要求的不仅仅是以ansible_开头的变量,而是“所有可用变量”。这些神奇的变量甚至没有被引用,更不用说包含在FAQ答案中了。因为这个答案是写出来的,所以还有其他有用的魔法变量,比如role\u path
——值得访问link pro
ansible -m debug -a 'var=hostvars' localhost
ansible -m debug -a 'var=hostvars.localhost' localhost