Как изменить существующий словарь в ansible? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь добавить существующий список к существующему dict в Ansible.

У меня есть dict "jbossvars", содержащий следующее (ansible debug)

"jbossvars": {
    "environments": {
        "TEST_ENV": {
            "key1": "value1",
            "key2": "value2"
        },
        "TEST_ENV2": {
            "key1": "value1",
            "key2": "value2"
        }
    }
}

исписок "env_homes", содержащий следующее (ANSIBLE debug)

"env_homes": [
    "/opt/redhat/jboss-7.2.0/TEST_ENV",
    "/opt/redhat/jboss-7.2.0/TEST_ENV2"
]

, который я хочу объединить в новый словарь "new_dict"

"jbossvars": {
    "environments": {
        "TEST_ENV": {
            "key1": "value1",
            "key2": "value2",
            "key3": "/opt/redhat/jboss-7.2.0/TEST_ENV"
        },
        "TEST_ENV2": {
            "key1": "value1",
            "key2": "value2",
            "key3": "/opt/redhat/jboss-7.2.0/TEST_ENV2"
        }
    }
}

Следующая игра не дай мне нужную ситуацию:

- name: Create dict to append 
  set_fact: 
    env_homes: "{{ {'TEST_ENV': [ jbossvars.environments.TEST_ENV ] + env_homes} }}" 
- name: Insert created dict into existing dict and save it into a new variable newdict 
  set_fact: 
    newdict: "{{ jbossvars.environments|combine(env_homes) }}" 
- debug: var: newdict

1 Ответ

2 голосов
/ 19 июня 2019

Чтобы получить результат

TEST_ENV: {"a": 1, "b": [2, "x1", "x2"]}

Игра ниже

  vars:
    TEST_ENV:
      a: 1
      b: 2
    add_this:
      c: [ x1, x2 ]
  tasks:
    - set_fact:
        add_this: "{{ {'b': [ TEST_ENV.b ] + add_this.c} }}"
    - set_fact:
        TEST_ENV: "{{ TEST_ENV|combine(add_this) }}"
    - debug:
        var: TEST_ENV

1010 * дает *

"TEST_ENV": {
    "a": 1, 
    "b": [
        2, 
        "x1", 
        "x2"
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...