所以我有點卡在一個問題上。從本質上講,我想運行一個嵌套循環與列表和字典,我似乎無法弄清楚如何。與列表和字典的嵌套循環
我的用例正在運行一個劇本,該劇本將通過使用主體列表簽署公鑰來生成SSH證書。
我有一個作爲跳轉主機的主機列表(組名稱爲bastionHosts)。這些主機上有最終用戶和他們的SSH密鑰對。
[bastionHosts]
10.100.0.10
10.100.0.11
我還有一個用戶及其SSH主體字典。這本字典是這樣的:
users:
webuser01: "webservers-principal"
dbuser01: "dbservers-principal"
webadmin01: "webservers-principal"
我使用提取模塊下載公鑰(「id_ecdsa.pub」爲每個用戶這將創建一個看起來像一個目錄結構:「/ tmp目錄/ public_keys/<> /家庭/ < <用戶名>> /。SSH/id_ecdsa.pub
例如,獲取公共密鑰webuser01在堡壘10.100.0.10將放置鑰匙插入/tmp/public_keys/10.100.0.10/home/webuser01 /.ssh/id_ecdsa.pub在主機上。
我的目標是緩存到這個目錄結構中用適當的校長簽署每個公鑰,但我無法弄清楚如何做到這一點。
如果我只是獲取一組文件並且它是一個平面提取(即每個主機的目錄結構未被使用),那麼下面的代碼將起作用。 item.key是用戶名,item.value是主體集合。
- name: create signed certificates with appropriate principals
command: ssh-keygen -s /etc/ssh/CA/CA -I {{ item.key }} -n {{ item.value }} -V +1d /tmp/public_keys/{{ item.key }}.pub
with_dict:
"{{ users }}"
我需要一種方法來同時指定由主機內置的groups.bastionHosts,這樣我可以遍歷下面的代碼目錄structure.The是什麼,我希望做一個粗略的想法,但我找不到一種方法來獲取with_nested以處理列表和字典。
- name: create signed certificates with appropriate principals
command: ssh-keygen -s /etc/ssh/CA/CA -I {{ item.key }} -n {{ item[1].value }} -V +1d /tmp/public_keys/{{ item[0] }}/home/{{ item[1].key }}/.ssh/id_ecdsa.pub
with_nested:
- "{{ groups.bastionHosts }}
- "{{ users }}"
本質上,如果上述工作,這將走到每個目錄的每個堡壘主機(item0)和用戶(項目[1]的.key)並簽署與合適的主體的關鍵(項目[1 ]。值)。但是,這不起作用。我得到的錯誤是項目[1]沒有元素「值」。我想這是因爲with_nested應該用於列表,而不是字典。
所以基本上:有沒有辦法讓with_nested處理字典和列表,這樣我可以引用列表的元素,同時引用字典中的項目?如果沒有,我是否可能讓這個過於複雜,有一個更簡單的方法?提前致謝!
這是一個黑客攻擊的一位,但它完美地工作。謝謝! –