[英]Looping through ansible dictionary to assign dictionary values
有沒有辦法循環通過 ansible 字典來分配其他 ansible 字典值?
我的 group_vars/all 中有以下內容:
domain_controllers:
dc0:
hostname: "dc0"
ip_address: "192.168.1.0"
dc1:
hostname: "dc1"
ip_address: "192.168.1.1"
dc2:
hostanme: "dc2"
ip_address: "192.168.1.2"
我有一個通用的keepalived 角色,它配置了服務器角色用來為這些域控制器創建VIP 的keepalived。
以下是我的roles/servers/forward/vars.yml
角色用於構建 keepalived.conf 文件。
virtual_server:
- virutal_server_ip: "192.168.1.10"
virtual_server_port: 389
...
real_servers:
- real_ip: "192.168.1.0"
real_port: 389
description: "dc0"
...
- real_ip: "192.168.1.1"
real_port: 389
description: "dc1"
...
- real_ip: "192.168.1.2"
real_port: 389
description: "dc2"
...
- virtual_server_ip: "192.168.1.10"
virtual_server_port: 636
...
real_servers:
- real_ip: "192.168.1.0"
real_port: 636
description: "dc0"
...
- real_ip: "192.168.1.1"
real_port: 636
description: "dc1"
...
- real_ip: "192.168.1.2"
real_port: 636
description: "dc2"
...
我已經在 keepalived 角色中設置了 jinja 格式,可以基於這些變量構建/etc/keepalived.conf
。
我想要做的是根據domain_controllers
字典的內容分配這些變量。 我如何使用set_facts
來分配像這樣的大型嵌套字典?
我只想循環訪問domain_controllers
,因為我想在升級和/或遷移到新 DC 時更新我的group_vars/all
,因為我還有其他使用此變量的劇本。
此外,是否可以在vars/main.yml
中分配這些變量,而不是通過set_facts
任務?
我用以下方法解決了這個問題:
在 group_vars/all 中:
domain_controllers:
- ip_address: "192.168.1.0"
hostname: "dc0"
- ip_address: "192.168.1.1"
hostname: "dc1"
- ip_address: "192.168.1.2"
hostname: "dc2"
在我的 vars 文件中,我使用以下命令調用列表:
virtual_server:
- virutal_server_ip: "192.168.1.10"
virtual_server_port: 389
...
real_servers:
- real_ip: "{{ domain_controllers.0.ip_address }}"
real_port: 389
description: "{{ domain_controllers.0.hostname }}"
...
- real_ip: "{{ domain_controllers.1.ip_address }}"
real_port: 389
description: "{{ domain_controllers.1.hostname }}"
...
- real_ip: "{{ domain_controllers.2.ip_address }}"
real_port: 389
description: "{{ domain_controllers.2.hostname }}"
...
- virtual_server_ip: "192.168.1.10"
virtual_server_port: 636
...
real_servers:
- real_ip: "{{ domain_controllers.0.ip_address }}"
real_port: 636
description: "{{ domain_controllers.0.hostname }}"
...
- real_ip: "{{ domain_controllers.1.ip_address }}"
real_port: 636
description: "{{ domain_controllers.1.hostname }}"
...
- real_ip: "{{ domain_controllers.2.ip_address }}"
real_port: 636
description: "{{ domain_controllers.2.hostname }}"
...
這樣做的缺點是,如果domain_controllers
中沒有至少 3 個項目,則劇本會出錯。 我仍然想找到一種方法來遍歷列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.