How to assign inventory group alias to a variable?

10 views
Skip to first unread message

Robert F

unread,
Jan 17, 2019, 3:25:06 PM1/17/19
to Ansible Project
I have this Ansible inventory file:

    [fileservers]
    fs01.example.com   ansible_ssh_host=192.168.1.1    ip_addr=192.168.1.1

    [dbservers]
    db01.example.com   ansible_ssh_host=192.168.1.2    ip_addr=192.168.1.2

    [webservers]
    web01.example.com   ansible_ssh_host=192.168.1.3    ip_addr=192.168.1.3

    [cmsservers]
    cms01.example.com   ansible_ssh_host=192.168.1.4    ip_addr=192.168.1.4

What I want to do is be able to set some facts that contain the host aliases when I run this playbook on my web01.example.com server:

    - name: create alias facts
      set_fact:
        file_server_alias: hostvars[{{ inventory_hostname }}]['groups']['fileservers'][0]  # should get string 'fs01.example.com'
        db_server_alias: hostvars[{{ inventory_hostname }}]['groups']['dbservers'][0]      # should get string 'db01.example.com'
        cms_server_alias: hostvars[{{ inventory_hostname }}]['groups']['cmsservers'][0]    # should get string 'cms01.example.com'

However, when I do the above, file_server_alias just gets set to 'hostvars[{{ inventory_hostname }}]['groups']['fileservers'][0]', and so on.  Is there any way to assign these inventory group aliases to variables?

Thanks.

Kai Stian Olstad

unread,
Jan 17, 2019, 4:27:40 PM1/17/19
to ansible...@googlegroups.com
On 17.01.2019 21:25, Robert F wrote:
> I have this Ansible inventory file:
>
> [fileservers]
> fs01.example.com ansible_ssh_host=192.168.1.1
> ip_addr=192.168.1.1
>
> [dbservers]
> db01.example.com ansible_ssh_host=192.168.1.2
> ip_addr=192.168.1.2
>
> [webservers]
> web01.example.com ansible_ssh_host=192.168.1.3
> ip_addr=192.168.1.3
>
> [cmsservers]
> cms01.example.com ansible_ssh_host=192.168.1.4
> ip_addr=192.168.1.4
>
> What I want to do is be able to set some facts that contain the host
> aliases when I run this playbook on my web01.example.com server:
>
> - name: create alias facts
> set_fact:
> file_server_alias: hostvars[{{ inventory_hostname
> }}]['groups']['fileservers'][0] # should get string 'fs01.example.com'

The syntax is not correct, correct syntax should be
file_server_alias: "{{
hostvars[inventory_hostname]['groups']['fileservers'][0] }}"

But there is not point in using hostvars in this example since you can
just use groups(one of the magic variables in Ansible)
file_server_alias: "{{ groups['fileservers'][0] }}"

--
Kai Stian Olstad

Robert F

unread,
Jan 17, 2019, 5:49:50 PM1/17/19
to Ansible Project
Thank you!  That is the solution.
Reply all
Reply to author
Forward
0 new messages