簡體   English   中英

將多個ip地址列表解析為單個變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM