Ansible

使用嵌套來分類多個文件

  • July 24, 2021

我需要創建從 2 個列表文件輸入的使用者,如下所示:

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 對兩個列表進行分類

問:使用 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

引用自:https://serverfault.com/questions/1070444