Объединить 2 словаря в ansible / jinja2 (просто) - PullRequest
1 голос
/ 18 апреля 2020

Я хочу использовать ansible, чтобы объединить словарь ниже 2 и стать 1. Я застрял уже несколько дней. Головная боль.

У меня сейчас 2 переменные.

1. переменная "my_directories":

{
    "directoryA": [
        "/bar/foo/file1.txt",
        "/bar/foo/file2.txt"
    ],
    "directoryB": [
        "/bar/baz/file3.txt",
        "/bar/baz/file4.txt",
        "/bar/baz/file5.txt"
    ]
}

2. переменная "my_filecontents":

{
    "/bar/foo/file1.txt": "file1Content",
    "/bar/foo/file2.txt": "file2Content",
    "/bar/baz/file3.txt": "file3Content",
    "/bar/baz/file4.txt": "file4Content",
    "/bar/baz/file5.txt": "file5Content"
}

я хочу объединить ее в:

Результат:

переменная my_result

{
    "directoryA": {
        "/bar/foo/file1.txt": "file1Content",
        "/bar/foo/file2.txt": "file2Content"
    },
    "directoryB": {
        "/bar/baz/file3.txt": "file3Content",
        "/bar/baz/file4.txt": "file4Content",
        "/bar/baz/file5.txt": "file5Content"
    }
}

Каталоги и файлы могут быть динамическими c. Я пробовал так много кодов, но все равно не сработало.

Спасибо!

1 Ответ

0 голосов
/ 18 апреля 2020

Задание ниже выполняет работу

     - set_fact:
         my_result: "{{ my_result|default({})|
                        combine({item.0.key: {item.1: my_filecontents[item.1]}},
                        recursive=True) }}"
       with_subelements:
         - "{{ my_directories|dict2items }}"
         - value
     - debug:
         var: my_result

дает

   "my_result": {
        "directoryA": {
            "/bar/foo/file1.txt": "file1Content", 
            "/bar/foo/file2.txt": "file2Content"
        }, 
        "directoryB": {
            "/bar/baz/file3.txt": "file3Content", 
            "/bar/baz/file4.txt": "file4Content", 
            "/bar/baz/file5.txt": "file5Content"
        }
    }
...