使用 with 嵌套来 cat 多个文件

使用 with 嵌套来 cat 多个文件

我需要创建从以下两个列表文件输入的用户:

cat user.yml
user1
user2
user3

cat group.yml
group1
group2
group3

cat playbook.yml
- name: Add the user
  user:
    name: "{{ item[0] }}"
    group: "{{ item[1] }}"
  with_nested:
    - cat user.yml
    - cat group.yml

这两个文件将从其他任务动态获取输入,因此我无法像那样在 ['user1', 'user2'] 中提及列表。请建议如何使用 with_nested 来 cat 两个列表

答案1

问:使用 with_nested 对两个列表进行分类。

答:例如

    - debug:
        msg: "{{ item.0 }} {{ item.1 }}"
      with_nested:
        - "{{ lookup('file', 'user.yml').splitlines() }}"
        - "{{ lookup('file', 'group.yml').splitlines() }}"

给出

  msg: user1 group1
  msg: user1 group2
  msg: user1 group3
  msg: user2 group1
  msg: user2 group2
  msg: user2 group3
  msg: user3 group1
  msg: user3 group2
  msg: user3 group3

同样的结果是管道查找插件,.eg

    - debug:
        msg: "{{ item.0 }} {{ item.1 }}"
      with_nested:
        - "{{ lookup('pipe', 'cat user.yml').splitlines() }}"
        - "{{ lookup('pipe', 'cat group.yml').splitlines() }}"

查找插件 “... 与所有模板一样,查找在 Ansible 控制机上执行并评估。”

如果文件存储在远程主机上,例如

shell> ssh admin@test_11 cat user.yml
user1
user2
user3
shell> ssh admin@test_11 cat group.yml
group1
group2
group3

首先从远程主机读取文件,例如

- hosts: test_11
  tasks:
    - command: cat user.yml
      register: result_user
    - command: cat group.yml
      register: result_group
    - debug:
        msg: "{{ item.0 }} {{ item.1 }}"
      with_nested:
        - "{{ result_user.stdout_lines }}"
        - "{{ result_group.stdout_lines }}"

得到相同的结果

  msg: user1 group1
  msg: user1 group2
  msg: user1 group3
  msg: user2 group1
  msg: user2 group2
  msg: user2 group3
  msg: user3 group1
  msg: user3 group2
  msg: user3 group3

相关内容