访问Ansible 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

在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

[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 }}