Ansible: не знаю, как напечатать словарь и список переменных include_vars - PullRequest
0 голосов
/ 24 марта 2020

I sh для создания файла переменной, который должен иметь следующую структуру.

There be many regions
              |---> Each region has many Countries
                                          |---> Each Country has many IPs
                                                                      |---> Each IP has many disks

Ниже моя книга игр, которая загружает и печатает переменные

---
  - name: Demonstrating variables in Jinja2 Loops
    hosts: localhost


      - name: Load variable files
        include_vars:
          file="{{ playbook_dir }}/vars/vars.yml"


      - debug:
          msg: "COUNTRY {{ item.countries | join('') }} has IP ADDRESS {{ item.1 | join('') }} which has DISKs {{ item.1.disks | join('') }}"
        with_subelements:
          - "{{ regions }}"
          - countries.ALL_IPS

I wi sh для печати, как показано ниже для всех записей в vars.yml

COUNTRY CORE DUBAI has IP ADDRESS 10.0.0.1 which has DISKS /fins and /tmp
COUNTRY CORE DUBAI has IP ADDRESS 10.0.0.4 has DISKS /was
COUNTRY CORE SINGAPORE has IP ADDRESS 10.0.1.5 which has DISKS /fins and /tmp

Ниже мой vars / vars.yml, который разработан и прекрасно работает с моим шаблоном jinja2, где я могу получить все нужные мне значения из vars.yml

---
  regions:

    - name: PROD
      countries:

        - CORE DUBAI:
          name: CORE DUBAI
          ALL_IPS:
            - 10.0.0.1:
              name: 10.0.0.1
              disks:
                - /fins
                - /tmp
            - 10.0.0.4:
              name: 10.0.0.4
              disks:
                - /was

        - CORE SINGAPORE:
          name: CORE SINGAPORE
          ALL_IPS:
            - 10.0.1.5:
              name: 10.0.1.5
              disks:
                - /fins
                - /tmp

Я получаю приведенную ниже ошибку, пока Запустив мой playbook:

TASK [debug] ************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "the key countries should point to a dictionary, got '[{u'ALL_IPS': [{u'disks': [u'/fins', u'/tmp'], u'10.0.0.1': None, u'name': u'10.0.0.1'}, {u'10.0.0.4': None, u'disks': [u'/was'], u'name': u'10.0.0.4'}], u'name': u'fins CORE DUBAI', u'fins CORE DUBAI': None}, {u'ALL_IPS': [{u'disks': [u'/fins', u'/tmp'], u'name': u'10.0.1.5', u'10.0.1.5': None}, {u'10.0.0.4': None, u'disks': [u'/was'], u'name': u'10.0.0.4'}], u'fins CORE SINGAPORE': None, u'name': u'fins CORE SINGAPORE'}]'"}


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

Подскажите, пожалуйста, как мне получить желаемый результат?

...