Ansible嵌套字典处理

时间:2020-04-02 03:04:42

标签: python ansible

我有以下任务

    - debug:
    msg: "Here: {{ item['containers'] }}"
  with_items: "{{ container_matrix['results'] }}"

返回一个包含容器名称及其启动参数的字典。 例如:{“ container-1”:{“ docker_run”:“ docker run -p 80:80 nginx”,“ env_file”:“ config1.env”}, “ container-2”:{“ docker_run”:“ docker run -p 8080:80 nginx”,“ env_file”:“ config2.env”}

但是我实际上要提取容器名称及其env_file,

container_1 -> config1.env
container-2  -> config2.env

我尝试了几件事,但似乎所有方法都不起作用。

- debug:
    msg: "Here: {{ item }}"
  with_dict: "{{ container_matrix['results'].'containers'] }}"

也失败了。

有人可以指引我正确的方向。

1 个答案:

答案 0 :(得分:2)

给出“带有容器名称及其启动参数的字典。例如”

containers:
  "container-1": {"docker_run":"docker run -p 80:80 nginx", "env_file":"config1.env"}
  "container-2": {"docker_run":"docker run -p 8080:80 nginx", "env_file":"config2.env"}

任务

    - set_fact:
        mydata: "{{ containers|
                    dict2items|
                    json_query('[].{name: key, env_file: value.env_file}') }}"
    - debug:
        var: mydata

给予

    "mydata": [
        {
            "env_file": "config1.env", 
            "name": "container-1"
        }, 
        {
            "env_file": "config2.env", 
            "name": "container-2"
        }
    ]