打印清单

时间:2020-07-12 00:47:22

标签: list ansible

我有一个简单的疑问。我正在尝试打印以下数据:

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 个答案:

答案 0 :(得分:2)

如果打印item,您会注意到它包含一个包含4格的单项,因此找不到属性username。使用with_items应该可以。

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

要使用循环,您需要按照documentation中所述将其展平到一个级别。

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

注意:在此处使用loop时,请勿将循环变量放在列表中。下面是行不通的:

      loop: 
        - "{{ users | flatten(1) }}"