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 }}"