How to use "add_host" (or "group_by" and/or "set_facts") to dynamically add new hosts to existing/new groups in the playbook inventory (to running play or play's following it in the same run)?

585 views
Skip to first unread message

LXC-dev - Koha-Lappi

unread,
Nov 10, 2016, 10:46:21 AM11/10/16
to Ansible Project
As suggested by  @jimi-c (https://github.com/jimi-c), I post here the follow-up discussion of this ticket: https://github.com/ansible/ansible/issues/6912, which concerns the inability and issues to use `add_host` or group_by/set_fact to "dynamically add new hosts to playbook inventory and groups for many hosts and not only the first host in the inventory"

I have encountered this problem in my playbook (see the follwing code), where add_host does not see the whole inventory when I try to use it to add new hosts to playbook inventory and groups.  Someone posted there an idea to use set_fact and group-by to do this, but I still don't understand how to achieve the same dynamic behavior where new hosts should be added to groups using set_facts and group-by.. Specifically, I would like toi know which facts should I set to achieve the same as with add_host, that in my case is used like this:
- name: Register new LXCs to inventory`
    add_host:
      ansible_user: "{{ item.item.value.operuser }}"
      name: "{{ item.lxc_container.ips.0 }}"
      groups: "lxcs"
      srvname: "{{ ansible_host }}"
  with_items: "{{ lxcs_info.results }}"

In the code above, the <pre>lxcs_info.results</pre> var has alll the item data needed for this task to run, but the "add_host" does not add hosts to all hosts in the inventory, but only the first host specified in the inventory/hosts -file. So please, how can I do this with "add_hosts" or the  "set_facts + group_by" -method as suggested by @mpdehaan, (in the orginal GitHub-thread)  thanks!


Brian Coca

unread,
Feb 9, 2017, 10:36:22 PM2/9/17
to Ansible Project
Loop over the hosts, not the results of the first host:

with_items: '{{groups['all']}}'

item is now the 'inventory_hostname' and you can use
hostvars[item][.... to access the rest of the data


----------
Brian Coca
Reply all
Reply to author
Forward
0 new messages