使用Ansible 2.5.0。
问题:如何在运行时执行期间动态访问当前主机的主机变量。
库存档案:
[group_one]
host-1 ansible_host=1.2.3.4
host-2 ansible_host=5.6.7.8
[group_two]
host-3 ansible_host=2.4.6.8我目前的任务是:
- hosts: group_one
tasks:
- name: set fact for all ip's in play execution
set_fact:
all_ips: "{{ groups['all'] | map('extract', hostvars, ['ansible_host'] ) | join(',') }}"
# outcome = 1.2.3.4,5.6.7.8,2.4.6.8这种结果是不可取的。在执行过程中,只使用主机-1和2,但也添加了主机-3的IP。
现在,我已经看过Ansible的幻数变量,但是似乎没有任何变量可以以满足我的需求的方式使用。
因为在运行时我想要变量,所以我不想设置变量"{{ groups['group_one'] }}",因为这样做会失败。
如何以这样的方式配置Ansible,结果将是1.2.3.4,5.6.7.8,而无需静态地配置任何变量?
发布于 2020-07-17 21:37:55
在不想使用ansible_play_hosts 幻数变量的情况下,可以使用group_one作为对当前主机的动态引用。
ansible_play_hosts是当前游戏中仍处于活动状态的所有主机的完整列表。
inventory.ini
[group_one]
host-1 ansible_host=1.2.3.4
host-2 ansible_host=5.6.7.8
[group_two]
host-3 ansible_host=2.4.6.8foo.yaml
- hosts: group_one
gather_facts: no
tasks:
- set_fact:
all_ips: "{{ ansible_play_hosts | map('extract', hostvars, ['ansible_host']) | join(',') }}"
- debug:
msg: "{{ all_ips }}"
run_once: yes$ ansible-playbook -i inventory.ini foo.yaml
PLAY [group_one] *****************************************************************************************************************************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************************************************************************************************************************
ok: [host-1]
ok: [host-2]
TASK [debug] *********************************************************************************************************************************************************************************************************************************
ok: [host-1] => {
"msg": "1.2.3.4,5.6.7.8"
}
PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
host-1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host-2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0https://stackoverflow.com/questions/62961226
复制相似问题