ansible 2.9.1
我有inventory
[group1]
server1 master=yes
server2 master=no
server3 master=no如何使ansible_fqdn与master=yes一起从server2,server3获得
示例:
server2或server3事实:
...
master_server: server1
...我想是的,但没有用:
- name: set fact
set_fact:
master_server: {{ ansible_fqdn }}
when: master == 'yes'
delegate_to: "{{ item }}"
loop: "{{ ansible_play_hosts }}"更新解析
加:
run_once: True发布于 2020-01-17 13:26:35
Q:“如何从server2,server3获得master=yes的ansible_fqdn?”
答:有更多的选择。例如,要么使用selectattr
- hosts: group1
tasks:
- set_fact:
master_server: "{{ (groups.group1|
map('extract', hostvars)|
selectattr('master', 'eq', True)|
list|
first).ansible_fqdn }}"
run_once: true
- debug:
var: master_server,或者使用json_query
- hosts: group1
tasks:
- set_fact:
master_server: "{{ groups.group1|
map('extract', hostvars)|
list|
json_query('[?master].ansible_fqdn')|
first }}"
run_once: true
- debug:
var: master_server这两种选择
ok: [test_02] => {
"master_server": "test_01.example.org"
}
ok: [test_01] => {
"master_server": "test_01.example.org"
}
ok: [test_03] => {
"master_server": "test_01.example.org"
}
示例中使用的清单
$ cat hosts
group1:
hosts:
test_01:
master: yes
ansible_fqdn: test_01.example.org
test_02:
master: no
ansible_fqdn: test_02.example.org
test_03:
master: no
ansible_fqdn: test_03.example.orghttps://stackoverflow.com/questions/59785097
复制相似问题