Как перебрать список списков и передать переменные в роль Ansible?

У меня есть роль Ansible, которая использует переменные: connection_name, connection_ip и т. д. для создания соединения.

В моих файлах хостов я мог бы иметь множество «соединений» и определить его как словарь списков:

host_file:
hosts:
    host_one:
        domain: one
        ip: 172.18.1.1
        connection:
                - connection_name: two
                  connection_ip: 172.18.1.2

                - connection_index: three
                  local_hub_ip: 172.18.1.3

    host_two:
        domain: two
        ip: 172.18.1.2

    host_three:
        domain: three
        ip: 172.18.1.3

Как передать каждый объект «соединение» в мою роль Ansible, чтобы он мог использовать вложенные переменные «connection_name» и «connection_ip»? Я попытался использовать «with_items» и «with_dict» следующим образом:

---
- name: Creating new connection
  hosts: "{{ host_name }}"
  gather_facts: no
  become: yes
  remote_user: "{{ user | default('root')}}"
  tasks:
      - include_role:
            name: connection-create
         with_items: "{{connection}}"

Но я получаю сообщение "FAILED: connection_name is undefined", потому что оно проходит в объекте как {"connection_name": two, "connection_ip": 172.18.1.2} вместо внутренней части, "connection_name": two, "connection_ip": 172.18.1.2 без {}.


person hotcheetos    schedule 05.03.2019    source источник


Ответы (1)


В вашем случае connection - это список словарей,

поэтому используйте item.connection_name и item.connection_ip в своей задаче.

Взгляните на официальный документ по циклам playbook.

person sebthebert    schedule 05.03.2019