Ansible 访问同一组 vars 不同的子主机组
Ansible access same group vars different children host groups
我正在尝试 运行 一个基于父组(或父组的父组)循环的角色,该角色具有两个或多个具有一定数量主机的子组。这两个子组具有相同的 group_vars,因此我尝试为每个子组分别定义 group_vars,但执行该角色仅从任一子组继承 group_vars。我了解 Ansible 变量合并,但我的特定用例(想要 运行 在主机组的不同层次结构中的相同角色)需要在我尝试 [=31= 时为每个子组加载 group_vars ] 循环中的角色基于父组或父组的父级。请在这方面提供帮助。
库存文件:
[test1]
server1
server2
[test2]
server3
server4
[test:children]
test1
test2
[test0:children]
test
/group_vars/test1.yml:
param1: 1234
param2: 3456
/group_vars/test2.yml:
param1: 7867
param2: 0987
role/tasks/main.yml:
- uri:
url: http://{{ item }}:{{ hostvars[groups['test'][0]]['param1'] }}/{{ hostvars[groups['test'][0]]['param2'] }}/
return_content: yes
register: response
ignore_errors: true
loop: "{{ groups['test'] }}"
改变
hostvars[groups['test'][0]]['param1']
至
hostvars[item].param1
使用 库存文件 和 group_vars 来自下面的问题
- hosts: localhost
tasks:
- debug:
msg: "{{ item }}: {{ hostvars[item].param1 }} {{ hostvars[item].param2 }}"
loop: "{{ groups['test'] }}"
给出:
PLAY [localhost] *****************************************************
TASK [debug] *********************************************************
ok: [localhost] => (item=server1) => {
"msg": "server1: 1234 3456"
}
ok: [localhost] => (item=server2) => {
"msg": "server2: 1234 3456"
}
ok: [localhost] => (item=server3) => {
"msg": "server3: 7867 0987"
}
ok: [localhost] => (item=server4) => {
"msg": "server4: 7867 0987"
}
PLAY RECAP *************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
下一个选项是下面的播放,它打印相同的消息。
- hosts: test
tasks:
- debug:
msg: "{{ inventory_hostname }}: {{ param1 }} {{ param2 }}"
我正在尝试 运行 一个基于父组(或父组的父组)循环的角色,该角色具有两个或多个具有一定数量主机的子组。这两个子组具有相同的 group_vars,因此我尝试为每个子组分别定义 group_vars,但执行该角色仅从任一子组继承 group_vars。我了解 Ansible 变量合并,但我的特定用例(想要 运行 在主机组的不同层次结构中的相同角色)需要在我尝试 [=31= 时为每个子组加载 group_vars ] 循环中的角色基于父组或父组的父级。请在这方面提供帮助。
库存文件:
[test1]
server1
server2
[test2]
server3
server4
[test:children]
test1
test2
[test0:children]
test
/group_vars/test1.yml:
param1: 1234
param2: 3456
/group_vars/test2.yml:
param1: 7867
param2: 0987
role/tasks/main.yml:
- uri:
url: http://{{ item }}:{{ hostvars[groups['test'][0]]['param1'] }}/{{ hostvars[groups['test'][0]]['param2'] }}/
return_content: yes
register: response
ignore_errors: true
loop: "{{ groups['test'] }}"
改变
hostvars[groups['test'][0]]['param1']
至
hostvars[item].param1
使用 库存文件 和 group_vars 来自下面的问题
- hosts: localhost
tasks:
- debug:
msg: "{{ item }}: {{ hostvars[item].param1 }} {{ hostvars[item].param2 }}"
loop: "{{ groups['test'] }}"
给出:
PLAY [localhost] *****************************************************
TASK [debug] *********************************************************
ok: [localhost] => (item=server1) => {
"msg": "server1: 1234 3456"
}
ok: [localhost] => (item=server2) => {
"msg": "server2: 1234 3456"
}
ok: [localhost] => (item=server3) => {
"msg": "server3: 7867 0987"
}
ok: [localhost] => (item=server4) => {
"msg": "server4: 7867 0987"
}
PLAY RECAP *************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
下一个选项是下面的播放,它打印相同的消息。
- hosts: test
tasks:
- debug:
msg: "{{ inventory_hostname }}: {{ param1 }} {{ param2 }}"