【问题标题】:Parse a list of multiple ip addresses into individual variables将多个 ip 地址列表解析为单个变量
【发布时间】:2020-01-11 00:30:00
【问题描述】:

是否有解析我从标准输出中提取的输出。

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 地址,每个地址都存储为一个单独的变量?

【问题讨论】:

  • mystring.split()?如果输出已经是一个列表,那么它们已经是分开的
  • 发布“debug: var=BGPOUTPUT”以查看选项。
  • 这是在 ansible 中运行,所以输出略有不同
  • 任务[调试] ****************************************** ****************************************************** ******************************************* 好的:[Router01] =>味精:|- IP 列表 - 10.1.1.1 - 10.2.2.2 - 10.3.3.3
  • - debug: msg: "List of IP's {{ parsedbgpIPs | to_nice_yaml }}"

标签: python regex bash ansible


【解决方案1】:

问:如何将输出分成 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') }}"

【讨论】:

  • 非常感谢,今天早上开始工作了。非常感谢
【解决方案2】:

如果将脚本的结果存储在 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

【讨论】:

    【解决方案3】:

    一种解决方案是将输出解析为文本文件,然后循环读取文件并将其用作变量的值。下面是一个例子:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2021-08-21
      • 2014-06-18
      • 1970-01-01
      • 2011-03-12
      • 2014-09-20
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      相关资源
      最近更新 更多