我需要创建从以下两个列表文件输入的用户:
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