set_fact 在具有动态变量名称的字典中
set_fact in dictionary with dynamic variable name
我有一个像这样的 ansible 清单:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
我想在此结构中设置事实,预期输出:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
partner: foobar
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
我试着这样分配:
- debug:
var: dom
- name: Test set
set_fact:
"{'{{domaenenliste[dom]}}':{'partner':'foobar'}}"
- debug:
var: domaenenliste[dom].partner
- debug:
var: domaenenliste['16']
创建以下输出:
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:5
ok: [des1] => {
"dom": "15"
}
TASK [calculate_missing_inventory_variables : Test set] *************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:8
ok: [des1] => {
"ansible_facts": {
"_raw_params": {
"": {
"partner": "foobar"
}
}
},
"changed": false
}
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:17
ok: [des1] => {
"domaenenliste[dom].partner": "VARIABLE IS NOT DEFINED!"
}
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:20
ok: [des1] => {
"domaenenliste['16']": {
"dhcp_ende": "10.43.131.255",
"dhcp_start": "10.43.128.26",
"server_id": 2
}
}
如调试输出所示,该变量仍未分配。使用此语法访问此结构有效。但我无法对其进行更改。
有人知道如何正确设置吗?
提前感谢您的帮助!
此致,
马蒂亚斯
您不能在 Ansible 中分配字典的子键,需要修改覆盖整个变量:
---
- hosts: localhost
gather_facts: no
vars:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
tasks:
- set_fact:
domaenenliste: "{{ domaenenliste | combine(new_leaf) }}"
vars:
new_leaf:
"15":
partner: foobar
- debug:
msg: "{{ domaenenliste }}"
我有一个像这样的 ansible 清单:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
我想在此结构中设置事实,预期输出:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
partner: foobar
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
我试着这样分配:
- debug:
var: dom
- name: Test set
set_fact:
"{'{{domaenenliste[dom]}}':{'partner':'foobar'}}"
- debug:
var: domaenenliste[dom].partner
- debug:
var: domaenenliste['16']
创建以下输出:
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:5
ok: [des1] => {
"dom": "15"
}
TASK [calculate_missing_inventory_variables : Test set] *************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:8
ok: [des1] => {
"ansible_facts": {
"_raw_params": {
"": {
"partner": "foobar"
}
}
},
"changed": false
}
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:17
ok: [des1] => {
"domaenenliste[dom].partner": "VARIABLE IS NOT DEFINED!"
}
TASK [calculate_missing_inventory_variables : debug] ****************************************************************************
task path: /home/mpw/gits/ansible-ffms/roles/calculate_missing_inventory_variables/tasks/main.yml:20
ok: [des1] => {
"domaenenliste['16']": {
"dhcp_ende": "10.43.131.255",
"dhcp_start": "10.43.128.26",
"server_id": 2
}
}
如调试输出所示,该变量仍未分配。使用此语法访问此结构有效。但我无法对其进行更改。
有人知道如何正确设置吗?
提前感谢您的帮助!
此致, 马蒂亚斯
您不能在 Ansible 中分配字典的子键,需要修改覆盖整个变量:
---
- hosts: localhost
gather_facts: no
vars:
domaenenliste:
"01":
dhcp_start: 10.43.12.0
dhcp_ende: 10.43.15.254
server_id: 3
"15":
"16":
dhcp_start: 10.43.128.26
dhcp_ende: 10.43.131.255
server_id: 2
tasks:
- set_fact:
domaenenliste: "{{ domaenenliste | combine(new_leaf) }}"
vars:
new_leaf:
"15":
partner: foobar
- debug:
msg: "{{ domaenenliste }}"