【问题标题】:How to get the value(ip address from interface) from the output and store it to variable如何从输出中获取值(来自接口的 IP 地址)并将其存储到变量中
【发布时间】:2021-06-27 04:57:09
【问题描述】:
  • 我正在编写一个剧本任务以从输出中获取 IP 地址并存储该值并将其用于其他任务。

Ansible 剧本

  • name:提取辅助路由器ipsec隧道地址 主持人:次要 收集事实:假 连接:本地 标签:
    • “sec_tunnel_ip” 任务:
    • 名称:提取 Tunnel1 ipsec 接口地址 ios_命令: 命令:“sh ip int br | sec Tunnel1” 注册:save_tunn_out
    • 调试: 味精:“{{save_tunn_out.stdout}}”

我得到如下输出:

好的:[172.16.12.1] => { “味精”:[ “Tunnel1 172.16.121.54 YES 手动向上 \nTunnel100 10.0.0.101 YES 手动向上” ] }

但我想像下面这样提取第一个 ip 接口输出(用于隧道 1),并将其存储在一个变量中。

172.16.121.54

我不确定如何在没有正则表达式的情况下获取它并将其存储在变量中。

请帮忙!

【问题讨论】:

    标签: ansible ansible-2.x ansible-inventory ansible-facts


    【解决方案1】:

    如果你不想使用正则表达式,这将是你最好的选择,你必须依靠拆分字符串。

    假设它总是在 Tunnel1 之后并后跟一个空格,你可以这样做。

      - name: Extract Tunnel1 ipsec interface address
        set_fact:
          save_tunn_out: "Tunnel1 172.16.121.54 YES manual up up \nTunnel100 10.0.0.101 YES manual up up"
      
      - name: Extract IP address
        debug:
          var: save_tunn_out.split("Tunnel1 ")[1].split(" ")[0]
    

    这会给你想要的输出

    ok: [localhost] => {
        "save_tunn_out.split(\"Tunnel1 \")[1].split(\" \")[0]": "172.16.121.54"
    }
    

    以后要存储在变量中,可以像这样使用 set_fact

      - name: Store in a variable
        set_fact:
          ip_address: "{{save_tunn_out.split('Tunnel1 ')[1].split(' ')[0]}}"
    
      - name: Debug variable
        debug:
          msg: "Ip address is : {{ip_address}}"   
    

    输出:

    ok: [localhost] => {
        "msg": "Ip address is : 172.16.121.54"
    }
    

    【讨论】:

    • 如果您不熟悉拆分字符串并想要更详细的解释,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多