我想设置一个事实,这样我的所有主机都可以根据一个定义的变量知道某个主机的索引号。我正在创建一个角色,因此主机的顺序可以更改每次运行。
想象一下这出戏里有3位主持人。假设host-2的变量me设置为true,而其他的则将其设置为false。
host-1 # variable 'me' is false
host-2 # variable 'me' is true, index number is 1
host-3 # variable 'me' is false现在,想象一下这出戏是这样排序的:
host-3 # variable 'me' is false
host-1 # variable 'me' is false
host-2 # variable 'me' is true, index number is 2在这种情况下,我希望所有主机都有一个包含游戏中主机的索引号的事实。示例:the_index_host: 2,因为它是带有定义变量的主机。
到目前为止,我知道如何将Ansible配置为在主机之间共享事实,但不知道如何根据索引号和值设置事实。
- block:
- name: create dict of variable me amongst hosts
set_fact:
something: "{{ dict(keys|zip(values)) }}"
vars:
keys: "{{ ansible_play_hosts }}"
values: "{{ ansible_play_hosts |
map('extract', hostvars, ['me'])
| list }}"
- name: set_fact for index number
set_fact:
the_index_host: "{{ something }}"
run_once: true发布于 2022-01-13 19:54:08
如果您想要主机名而不是索引,可以这样做:
- set_fact:
primary_host: "{{ item }}"
when: hostvars[item].me|default(false)
loop: "{{ ansible_play_hosts }}"我想如果你想要索引,那就是:
- set_fact:
primary_host: "{{ hostidx }}"
when: hostvars[item].me|default(false)
loop: "{{ ansible_play_hosts }}"
loop_control:
index_var: hostidxhttps://stackoverflow.com/questions/70702265
复制相似问题