Accessing inventory host variable in Ansible playbook

前端 未结 6 1838
夕颜
夕颜 2020-12-03 00:52

I am using Ansible 2.1. I have the following inventory host file and a role being called by a play that needs access to the host file variable. Any thoughts on how to acce

6条回答
  •  抹茶落季
    2020-12-03 01:06

    I struggled with this, too. My specific setup is: Your host.ini (with the modern names):

    [test3]
    test3-1 ansible_host=abc.def.ghi.pqr ansible_port=1212
    test3-2 ansible_host=abc.def.ghi.stu ansible_port=1212
    

    plus a play fill_file.yml

    ---
    - remote_user: ec2-user
      hosts: test3
      tasks:
       - name: fill file
         template:
           src: file.j2
           dest: filled_file.txt
    

    plus a template file.j2 , like

    {% for host in groups['test3'] %}
       {{ hostvars[host].ansible_host }}
    {% endfor %}
    

    This worked for me, the result is

    abc.def.ghi.pqr
    abc.def.ghi.stu
    

    I have to admit it's ansible 2.7, not 2.1. The template is a variation of an example in https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html.

    The accepted answer didn't work in my setup. With a template

    {{ hostvars['test3'].ansible_host }}
    

    my play fails with "AnsibleUndefinedVariable: \"hostvars['test3']\" is undefined" .

    Remark: I tried some variations, but failed, occasionally with "ansible.vars.hostvars.HostVars object has no element "; Some of this might be explained by what they say. in https://github.com/ansible/ansible/issues/13343#issuecomment-160992631

    hostvars emulates a dictionary [...]. hostvars is also lazily loaded

提交回复
热议问题