Ansible从输出中获取特定值

时间:2020-04-08 06:25:49

标签: ansible

我一直在想做一件容易的事而拔掉头发。

我有剧本:

- hosts: all
  tasks:
    - name: Get F5 connections
      bigip_command:
        commands: show ltm node /mypartition/myserver.domain.com
        provider:
          server: "F5server.domain.com"
          user: ""
          password: ""
          validate_certs: "no"
          server_port: 443
      register: connections
      delegate_to: localhost
    - name: output
      debug:
        msg: "{{ connections }}"

当我运行该剧本时,它输出以下内容:

ok: [myserver.domain.com] => {
    "msg": {
        "changed": false,
        "executed_commands": [
            "tmsh -c \\\"show ltm node /mypartition/myserver.domain.com\\\""
        ],
        "failed": false,
        "stdout": [
            "-------------------------------------------------------------\nLtm::Node: /mypartition/myserver.domain.com (123.45.67.89)\n-------------------------------------------------------------\nStatus               \n  Availability   : available\n  State          : enabled\n  Reason         : Node address is available\n  Monitor        : /Common/gateway_icmp (default node monitor)\n  Monitor Status : up\n  Session Status : enabled\n                     \nTraffic                ServerSide  General\n  Bits In                  635.9M        -\n  Bits Out                   2.8G        -\n  Packets In               102.8K        -\n  Packets Out              266.6K        -\n  Current Connections           7        -\n  Maximum Connections          11        -\n  Total Connections          6.5K        -\n  Total Requests                -    13.0K\n  Current Sessions              -        0"
        ],
        "stdout_lines": [
            [
                "-------------------------------------------------------------",
                "Ltm::Node: /mypartition/myserver.domain.com (123.45.67.89)",
                "-------------------------------------------------------------",
                "Status               ",
                "  Availability   : available",
                "  State          : enabled",
                "  Reason         : Node address is available",
                "  Monitor        : /Common/gateway_icmp (default node monitor)",
                "  Monitor Status : up",
                "  Session Status : enabled",
                "                     ",
                "Traffic                ServerSide  General",
                "  Bits In                  635.9M        -",
                "  Bits Out                   2.8G        -",
                "  Packets In               102.8K        -",
                "  Packets Out              266.6K        -",
                "  Current Connections           7        -",
                "  Maximum Connections          11        -",
                "  Total Connections          6.5K        -",
                "  Total Requests                -    13.0K",
                "  Current Sessions              -        0"
            ]
        ]
    }
}

我的问题是,我如何简单地获取“当前连接”值,即在此示例中为7,并将其存储在变量中。

我尝试了各种不同的解决方案,但似乎无济于事。

我的Ansible版本是2.9

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

任务

    - debug:
        msg: "Current Connections: {{ item.split().2 }}"
      loop: "{{ connections.stdout_lines.0 }}"
      when: item is match('^  Current Connections(.*)$')

给予

    "msg": "Current Connections: 7"

答案 1 :(得分:0)

使用正则表达式提取值并设置变量“ current_connections”

- name: Current Connections
  vars:
    pattern: '(?<=Current\sConnections)\s*\d+'
  set_fact: 
    current_connections: "{{ connections.stdout | regex_search(pattern) }}"

- debug:
  var: hostvars[inventory_hostname]['current_connections']
相关问题