Is there a way to access the host index in a group? I.e. want number in the hosts group am i?

I’m sure this must’ve come up before but I couldn’t find an answer.

I have a list of hosts in a group. I want to write an index number on each of those hosts in a file. E.g. the first host has a file that contains 1, the second host has a file that contains 2 etc.

Now I know I can access the hosts using the groups variable E.g. groups[“mygroup”] but i can’t find any reference to an index so the host can find out which number it is.

Example play

  • name: Add instance to new host group

add_host:

name: “{{ item }}”

group: zk

with_items:

  • server1

  • server2

  • server3

  • name: deploy to zk group

hosts: zk

tasks:

  • name: write a myid file based on the position in the group

copy:

content: {{ some_magic_variable??? }}

dest: /zookeeper-data/myid

In the above server i would expect to end up with three servers each with a myid file that contains 0, 1 or 2

Anyone know if that magic variable exists?

Hello Rob,

maybe http://docs.ansible.com/ansible/playbooks_loops.html#looping-over-a-list-with-an-index
might help.

Regards
Mirko
Regards Mirko

Unfortunately not. I’m not iterating over a list. Ansible is just making it’s way through a group of hosts so i need Ansible to tell me which host it is operating on.

A few ways potentially:

{{ play_hosts.index(inventory_hostname) }}

If you want to know host index within a play

Or:

{{ groups.somegroup.index(inventory_hostname) }}

For getting the index of a host within a group.

Awesome Matt!

I knew it had to exist somewhere.

Thanks for sharing.

Hi Matt,

This solution does not work well when a group has multiple hostname that are all the same.

E.g.

[my-hosts]
192.168.1.1
192.168.1.1
192.168.1.1
192.168.1.1

In this case, do you recommend a way to get the index of the current host?

I’ve solved it this way - https://github.com/ansible/ansible/issues/12086#issuecomment-327927275