访问Ansible playbook中的库存主机变量
在Ansible 2.1中,我有一个角色被需要访问主机文件变量的playbook调用。关于如何访问它有什么想法吗 我正在尝试访问以下清单访问Ansible playbook中的库存主机变量,ansible,ansible-2.x,ansible-inventory,Ansible,Ansible 2.x,Ansible Inventory,在Ansible 2.1中,我有一个角色被需要访问主机文件变量的playbook调用。关于如何访问它有什么想法吗 我正在尝试访问以下清单host文件的test1部分中的ansible\u ssh\u主机: [test1] test-1 ansible_ssh_host=abc.def.ghi.jkl ansible_ssh_port=1212 [test2] test2-1 ansible_ssh_host=abc.def.ghi.mno ansible_ssh_port=1212 [tes
host
文件的test1
部分中的ansible\u ssh\u主机
:
[test1]
test-1 ansible_ssh_host=abc.def.ghi.jkl ansible_ssh_port=1212
[test2]
test2-1 ansible_ssh_host=abc.def.ghi.mno ansible_ssh_port=1212
[test3]
test3-1 ansible_ssh_host=abc.def.ghi.pqr ansible_ssh_port=1212
test3-2 ansible_ssh_host=abc.def.ghi.stu ansible_ssh_port=1212
[all:children]
test1
test2
test3
我曾尝试以以下方式访问该角色:
{{ hostvars.ansible_ssh_host }}
及
我得到这个错误:
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"}
关于
hostvars
,您的思路是正确的 这用于访问有关其他主机的信息
hostvars
是以目录主机名作为键的哈希。要访问每个主机的字段,请使用
hostvars['test-1']
,hostvars['test2-1']
等
ansible\u ssh\u host
自2.0以来一直支持ansible\u host
。因此,您应该首先从清单主机参数中删除“_ssh”(即成为“ansible_用户”、“ansible_主机”和“ansible_端口”),然后在您的角色中使用以下命令调用它:
{{ hostvars['your_host_group'].ansible_host }}
您应该能够直接使用变量名
ansible_ssh_host
或者您可以通过hostvars,而不必按字面指定主机
通过使用inventory\u主机名
hostvars[inventory_hostname].ansible_ssh_host
您可以使用以下方式访问主机组变量:
{{ hostvars['host_group'].custom_var }}
如果需要特定主机的特定值,可以使用:
{{ hostvars[groups['host_group'][0]].node_name }}
我还找到了一个简单的方法来解决hostsvar问题 看起来您也可以这样做:
- debug:
msg: "{{ ansible_ssh_host }}"
我也为此挣扎。我的具体设置是:Your host.ini(使用现代名称): 加上播放填充文件.yml
---
- remote_user: ec2-user
hosts: test3
tasks:
- name: fill file
template:
src: file.j2
dest: filled_file.txt
加上一个模板文件.j2,如
{% for host in groups['test3'] %}
{{ hostvars[host].ansible_host }}
{% endfor %}
这对我有效,结果是
abc.def.ghi.pqr
abc.def.ghi.stu
我得承认是2.7,不是2.1。该模板是中示例的变体
接受的答案在我的设置中不起作用。用模板
{{ hostvars['test3'].ansible_host }}
我的游戏失败,因为“AnsibleUndefinedVariable:\”hostvars['test3']\“未定义”
备注:我尝试了一些变体,但失败了,偶尔使用“ansible.vars.hostvars.hostvars对象没有元素”;其中一些可能是由他们所说的来解释的。在
hostvars模拟字典[…]。hostvars也是惰性加载的
非常感谢这封信对我很有用! 能够发送ansible剧本中/group_var/vars下定义的变量 如下所示 任务:
-名称:检查服务帐户密码到期时间
-命令:
sh /home/monit/get_ldap_attr.sh {{ item }} {{ LDAP_AUTH_USR }}
spaciba-我尝试过这种语法,但我认为它不起作用,因为我的输入有误。您可以通过执行
hostvars[inventory\u hostname]访问本地计算机的ansible\u主机,我可以直接使用ansible\u主机
variable该链接现在已移动到我的播放失败,出现“AnsibleUndefinedVariable:\”hostvars['test3']\“未定义”
这是因为您没有主机test3
。它将与{hostvars['test3-1'].ansible_host}}
或{hostvars['test3-2'].ansible_host}}
这已被弃用为“ansible_host”
abc.def.ghi.pqr
abc.def.ghi.stu
{{ hostvars['test3'].ansible_host }}
sh /home/monit/get_ldap_attr.sh {{ item }} {{ LDAP_AUTH_USR }}