如何从输出中获取值(来自接口的 ip 地址)并将其存储到变量

How to get the value(ip address from interface) from the output and store it to variable

Ansible 剧本

我得到如下输出:

确定:[172.16.12.1] => { “消息”:[ “Tunnel1 172.16.121.54 YES 手动向上\nTunnel100 10.0.0.101 YES 手动向上” ] }

但我想像下面那样提取第一个 ip 接口输出(对于 tunnel1),并将其存储在一个变量中。

172.16.121.54

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

请帮忙!

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

假设它总是在 Tunnel1 之后,然后是 space,你可以这样做。

  - 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"
}