[英]Parse a list of multiple ip addresses into individual variables
無論如何解析我從stdout中提取的輸出。
name: PARSE ALL IP's
set fact: parsedbgpIPs="BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}"
這會從我的原始命令生成IP地址列表的輸出。
10.1.1.1
10.2.2.2
10.3.3.3
我的問題是如何將輸出分成3個IP地址,每個地址存儲為一個單獨的變量?
問: 如何將輸出分成3個IP地址,每個地址作為單個變量存儲?
答:可以創建自定義詞典並在那里動態創建變量。 例如下面的劇本
vars:
my_vars: {}
my_ip_list:
- 10.1.1.1
- 10.2.2.2
- 10.3.3.3
tasks:
- set_fact:
my_vars: "{{ my_vars|combine({'IP_' ~ my_idx : item}) }}"
loop: "{{ my_ip_list }}"
loop_control:
index_var: my_idx
- debug:
var: my_vars
- debug:
var: my_vars.IP_1
給
"my_vars": {
"IP_0": "10.1.1.1",
"IP_1": "10.2.2.2",
"IP_2": "10.3.3.3"
}
"my_vars.IP_1": "10.2.2.2"
在您的情況下,可以迭代IP列表。 在上面的播放中用以下行替換loop: "{{ my_ip_list }}"
loop: "{{ BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}"
如果將腳本結果存儲在bash變量中,則可以使用此語法逐行填充數組
declare -a IPLIST # optional but nice
IPLIST=($RESULTOFSCRIPT) # RESULTOFSCRIPT contains the output of your script
現在,您可以通過索引訪問新創建的數組的元素
echo "${IPLIST[0]}"
10.1.1.1
echo "${IPLIST[1]}"
10.2.2.2
一種解決方案是將輸出解析為文本文件,然后循環讀取文件並將其用作變量的值。 以下是一個例子:
name: PARSE ALL IP's
set fact: parsedbgpIPs="BGPOUTPUT.stdout[0] | regex_findall('\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b') }}" > iplist.txt
for ip in $(cat iplist.txt)
do
... (your code)
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.