How to get a server's identifier

44 views
Skip to first unread message

Bevan Bennett

unread,
Dec 24, 2014, 8:14:08 PM12/24/14
to ansible...@googlegroups.com
We have a lot of config that wants to fill in templates based on a particular server's "number" within a certain group.

For example, if we have an inventory file with:
[fooservers]
steve
larry
frank
eleanor

...we then want to configure steve's templates with "foo01", larry with "foo02", frank with "foo03", etc.
In most cases I've been using the following pattern inside of templates:
{% for pt in groups.ptservers %}
{% if inventory_hostname == pt %}
 special_identifier
= foo{{ '%02d' % loop.index }}
{% endif %}
{% endfor %}


This has worked well for limited use, but is there an easier way to store the server's associated loop_index for reuse at either the playbook or template level?
We have reached a point where we have a template that needs to use this value 27 times, and I don't want to have to clutter everything up with 27 loops...

I tried using {% set %} in the template inside of the loop. but set has local scope, so it's unusable afterwards.

Has anyone else come up with a good solution for this pattern or do I just need to make a really really ugly template?

titlei...@gmail.com

unread,
Dec 25, 2014, 8:59:11 PM12/25/14
to ansible...@googlegroups.com
Can you just use a host variable in your inventory and then reference that in your template?

[fooservers]
steve special_identifier=01
larry special_identifier=02
frank special_identifier=03
eleanor special_identifier=04


Jay

Chris Church

unread,
Dec 26, 2014, 1:43:10 AM12/26/14
to ansible...@googlegroups.com
Use set_fact to initially define the variable for each host, then you can reference the variable name wherever you need it later:
    
- hosts: fooservers
  tasks:
    - set_fact:
        foo_var: "{% for pt in groups.fooservers %}{% if inventory_hostname == pt %}foo{{ '%02d' % loop.index }}{% endif %}{% endfor %}"
    - debug: var=foo_var



--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/57dcfa68-14e7-4c84-98d3-021236cc235d%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Bevan Bennett

unread,
Dec 31, 2014, 2:28:54 PM12/31/14
to ansible...@googlegroups.com
Thanks Chris!
That's got it working!!!

@Jay: I was hoping to avoid that and just have servers magically renumber themselves as they get added and removed from inventory... it's one fewer thing that might get misconfigured...
Reply all
Reply to author
Forward
0 new messages