我想從用戶那里獲取輸入,服務器的組名用逗號分隔:abc,cde 在變數目標中,然后我想遍歷每個組的所有服務器并檢查給定埠上的每個服務器訪問。這里的埠是我創建并存盤在檔案中的變數。我正在嘗試遍歷埠變數中組的所有服務器,并為每個服務器檢查埠變數中該特定組下的所有埠。
vars 檔案中的埠變數如下所示:
port:
abc:
- server1
- server2
abc_port:
- 22
- 34
cde:
- server3
- server
cde_port:
- 122
- 343
我期待結果:
curl -kv server1:22
curl -kv server1:34
curl -kv server2:22
curl -kv server2:34
curl -kv server3:122
curl -kv server3:343
curl -kv server4:122
curl -kv server4:343
對于組 abc 和 cde 的服務器,根據用戶輸入的組,格式為“abc,cde”
我怎樣才能做到這一點?
task:
- name: check port opening
shell: curl -kv {{item[1]}}:{{item[2]}}
with_nested:
- "{{destination.split(',')}}"
- "{{port. item[0]}}"
- "{{port. item[0] _port}}
uj5u.com熱心網友回復:
首先創建目的地串列。如果您在命令列中宣告dest ,例如-e dest='abc,cde'
- set_fact:
dest_port: []
- set_fact:
dest_port: "{{ dest_port item.0|
product(item.1)|
map('join', ':')|
list }}"
loop: "{{ _dest|zip(_port) }}"
vars:
_d: "{{ dest|d('') }}"
_dest_keys: "{{ (_d|length > 0)|ternary(_d.split(','), []) }}"
_port_keys: "{{ _dest_keys|product(['_port'])|map('join')|list }}"
_dest: "{{ _dest_keys|map('extract', port)|list }}"
_port: "{{ _port_keys|map('extract', port)|list }}"
給
dest_port:
- server1:22
- server1:34
- server2:22
- server2:34
- server3:122
- server3:343
- server:122
- server:343
現在,您可以迭代命令
- debug:
msg: "curl -kv {{ item }}"
loop: "{{ dest_port }}"
給出(刪節)
msg: curl -kv server1:22
msg: curl -kv server1:34
msg: curl -kv server2:22
msg: curl -kv server2:34
msg: curl -kv server3:122
msg: curl -kv server3:343
msg: curl -kv server:122
msg: curl -kv server:343
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438478.html
上一篇:帶有兩個謂詞的磁區
