使用Ansible 2.5.0。
问题::如何在运行时执行期间动态访问正在运行的当前主机的主机变量。
库存文件:
<!-- row -->
<div class="row">
<!-- col -->
<div class="col-6">
<img src="https://i.stack.imgur.com/P59NF.png">
</div>
<!-- /col -->
<!-- col -->
<div class="col-4 sidebar">
<h3>Sidebar Heading</h3>
</div>
<!-- /col -->
</div>
<!-- /row -->
我当前的任务:
[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
这种结果是不希望的。在执行期间,仅使用主机1和2,但也添加了主机3的IP。
现在,我已经看过Ansible的magic variables,但是似乎没有可以满足我的需求的变量可以使用。
因为我希望在运行时使用变量,所以我不想设置变量- 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
,因为这样做会违反目的。
如何以这种方式配置Ansible,结果将是"{{ groups['group_one'] }}"
,而无需静态配置任何变量?
答案 0 :(得分:1)
如果您不想使用ansible_play_hosts
,则可以使用group_one
magic variable作为对当前主机的动态引用。
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.8
foo.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=0