Распечатать список в ansible - PullRequest
0 голосов
/ 12 июля 2020

У меня простое сомнение. Я пытаюсь распечатать данные, перечисленные ниже:

user_list.yml

---
users:
  - username: alice
    uid: 10000
  - username: vincent
    uid: 10001
  - username: sandy
    uid: 20000
  - username: patrick
    uid: 20001

printusers.yml

---
- name: Print users
  hosts: all
  vars_files:
    - user_list.yml
  tasks:
    - name: Display users
      debug:
        msg: "{{ item.username }}"
      loop:
        - "{{ users }}"

Приведенный выше код не работает со следующими ошибками «объект списка» не имеет атрибута «имя пользователя». Однако он работает, когда я меняю код следующим образом, но отображается только одно имя пользователя:

---
- name: Print users
  hosts: all
  vars_files:
    - user_list.yml
  tasks:
    - name: Display users
      debug:
        msg: "{{ item[0].username }}"
      loop:
        - "{{ users }}"

Я пробовал несколько способов распечатать все имя пользователя, но безрезультатно. Хотелось бы получить руководство о том, как распечатать все имя пользователя из user_list.yml.

1 Ответ

2 голосов
/ 12 июля 2020

Если вы напечатаете item, вы заметите, что он содержит один элемент с 4 dicts, поэтому атрибут username не найден. Использование with_items должно работать.

- name: Display users
  debug:
    msg: "{{ item.username }}"
  with_items:
    - "{{ users }}"

Чтобы использовать l oop, вам нужно выровнять его до одного уровня, как описано в документации .

- name: Display users
  debug:
    msg: "{{ item.username }}"
  loop: "{{ users | flatten(1) }}"

Примечание. При использовании здесь loop не помещайте переменную l oop в список. Ниже не работает:

      loop: 
        - "{{ users | flatten(1) }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...