Как я могу захватить содержимое файла переменной? - PullRequest
0 голосов
/ 04 февраля 2020

В моей ansible playbook я беру переменный файл в качестве входных данных. Фрагмент из ansible -playbook выглядит следующим образом:

  tasks:
    - name: Custom - Only include users in var file specified in usersList param
      include_vars:
        file: vars/users/{{ userVarFile }}
        name: users
      when: Custom

Файл переменной содержит следующее содержимое:

users_ProjectName:
  - email: john.doe@ibm.com
    firstname: John
    middlename:
    lastname: Doe
    group: advanced
    comment: This is an option comment

Что я хотел бы сделать, это l oop содержимое файла, но проблема, с которой я сталкиваюсь, заключается в том, что я должен сделать что-то вроде этого:

- name: Debug Loop
  debug:
    msg: "{{ item }}"
  loop: "{{ users.users_ProjectName }}"

Проблема здесь в том, что имя переменной в файле может измениться. Итак, что я действительно хочу сделать, так это иметь способ сказать пользователям. [] Так, чтобы он перенес все элементы со следующего уровня в файл внизу.

Есть ли способ, которым я могу легко достичь этого? ? Еще один вариант, о котором я только что подумал - поскольку я мог сделать имя переменной таким же, как параметр userVarFile, я мог бы повторно использовать значение userVarFile в команде l oop.

1 Ответ

0 голосов
/ 05 февраля 2020

Итак, что я действительно хочу сделать, так это сказать пользователей. [] Так, что все элементы будут перенесены со следующего уровня в файл.

что вам нужно, это dict2items , который будет разлагать ваш dict на list[dict[str,*]]:

- hosts: localhost
  vars:
    # just using this as a short example
    var_file_contents:
      users_ProjectName:
      - email: john.doe@ibm.com
        firstname: John
  tasks:
  - debug: var=item
    with_items: >-
      {{ var_file_contents | dict2items | map(attribute='value') | list }}

должен производить list всех значений под любым ключом в этой структуре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...