ディクショナリにディクショナリを追加する

はじめに

ディクショナリをディクショナリに追加する、ただそれだけのメモです。

Playbook

---
- hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Create an IP address list
      set_fact:
        ip_address_list: {}

    - name: Append IP addresses
      set_fact:
        ip_address_list: "{{ ip_address_list | combine({item.use: item.ip_address}) }}"
      loop:
        - use: service
          ip_address: '192.168.10.0/24'
        - use: management
          ip_address: '192.168.20.0/24'

    - name: Debug the IP address list
      debug:
        var: ip_address_list

実行結果

# ansible-playbook -i inventory.ini append.yml 

PLAY [localhost] ******************************************************************************************************************************************************************************

TASK [Create an IP address list] **************************************************************************************************************************************************************
ok: [localhost]

TASK [Append IP addresses] ********************************************************************************************************************************************************************
ok: [localhost] => (item={'use': 'service', 'ip_address': '192.168.10.0/24'})
ok: [localhost] => (item={'use': 'management', 'ip_address': '192.168.20.0/24'})

TASK [Debug the IP address list] **************************************************************************************************************************************************************
ok: [localhost] => {
    "ip_address_list": {
        "management": "192.168.20.0/24",
        "service": "192.168.10.0/24"
    }
}

PLAY RECAP ************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

参考

docs.ansible.com