Ansible, как создать список ключей словаря

Я, наверное, упускаю что-то простое. У меня есть словарь на vars.yml

deploy_env:
  dev:
    schemas:
      year1:
        - main
        - custom
      year2:
        - main
        - custom
        - security
      year3:
        - main
        - custom

то в моем playbook.yml у меня что-то вроде

- set_fact:
    years: "{{ deploy_env.dev.schemas }}"

- name: Create schemas
  shell: "mysql ....params go here... {{ item }}"
  with_nested:
    - "{{ years }}"

Вышеупомянутое отлично работает, если схемы в vars.yml были простым списком, то есть:

...schemas:
     - year1
     - year2
     - year3

Но как только я добавляю дополнительные элементы под каждый год (делая это словарём (?), Я начинаю получать ошибки в строке: - "{{years}}".

Я в основном хочу заполнить {{years}} значениями year1, year2, year3 для этой задачи.

Я просмотрел много примеров, но все, на что я смотрел, было слишком сложным, и речь шла о том, как создавать словари, что бесполезно.

Спасибо!


person New2Python    schedule 08.04.2020    source источник


Ответы (1)


Можно создать список ключей словаря. Например

    - set_fact:
        years: "{{ deploy_env.dev.schemas.keys()|list }}"
    - debug:
        var: item
      loop: "{{ years }}"

дает

    "item": "year1"
    "item": "year2"
    "item": "year3"

**List vs Dictionary**

Цитата:

добавлять дополнительные элементы под каждый год (делая из этого словарь (?)

Добавление элементов не меняет список в словарь. Элемент списка начинается с тире - в YAML. Добавление дополнительных элементов под каждый элемент списка делает его списком списков.

Пример списка:

    schemas:
      - year1
      - year2
      - year3

Пример списка списков

    schemas:
      - year1:
          - main
          - custom
      - year2:
          - main
          - custom
          - security
      - year3:
          - main
          - custom

Пример словаря:

    schemas:
      year1:
        - main
        - custom
      year2:
        - main
        - custom
        - security
      year3:
        - main
        - custom
person Vladimir Botka    schedule 08.04.2020