使用 Ansible 从 stdout 输出中提取值

沙尚克·阿格拉瓦尔

我正在运行一个命令来获取 tomcat 的状态并将其注册到一个变量中。我如何提取该命令的特定输出并将其放入变量中以进一步检查

玩 -

- name: Check the State og tomcat service
   shell: "svcs tomcat"
   register: tomcat_status

 - name: Show captured processes
   debug:
     msg: "{{ tomcat_status.stdout_lines|list }}"

上面的输出是 -

 server1 ok: {
    "changed": false,
    "msg": [
        "STATE          STIME    FMRI",
        "online         20:11:48 svc:/network/tomcat:tomcat"
    ]
}

我如何在这里提取 STATE 的值?我想知道它是在线还是禁用或关闭等。

注意 - 使用 -vvvv 输出

 server1 done: {
    "changed": true,
    "cmd": "svcs tomcat",
    "delta": "0:00:00.025711",
    "end": "2020-05-11 12:43:43.323017",
    "invocation": {
        "module_args": {
            "_raw_params": "svcs tomcat",
            "_uses_shell": true,
            "argv": null,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": false
        }
    },
    "rc": 0,
    "start": "2020-05-11 12:43:43.297306",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "STATE          STIME    FMRI\nonline         20:11:48 svc:/network/tomcat:tomcat",
    "stdout_lines": [
        "STATE          STIME    FMRI",
        "online         20:11:48 svc:/network/tomcat:tomcat"
    ]
}
拉尔斯克

根据您的debug关于,tomcat_status.stdout_lines是一个列表(您在|list这里不需要过滤器,因为它已经是一个列表),如下所示:

["STATE          STIME    FMRI", "online         20:11:48 svc:/network/tomcat:tomcat"]

要获取该STATE值,您需要第二行的第一个字段。所以:

- set_fact:
    tomcat_state: "{{ tomcat_status.stdout_lines.1.split().0 }}"

这需要第二行 ( tomcat_status.stdout_lines.1) 然后在空格 ( .split())上拆分它,然后获取第一个值 ( .0)。

这是一个完整的测试:

- hosts: localhost
  vars:
    tomcat_status:
      stdout_lines:
        - "STATE          STIME    FMRI"
        - "online         20:11:48 svc:/network/tomcat:tomcat"

  tasks:
    - set_fact:
        tomcat_state: "{{ tomcat_status.stdout_lines.1.split().0 }}"

    - debug:
        var: tomcat_state

运行该剧本会导致:


PLAY [localhost] *****************************************************************************

TASK [set_fact] ******************************************************************************
ok: [localhost]

TASK [debug] *********************************************************************************
ok: [localhost] => {
    "tomcat_state": "online"
}

PLAY RECAP ***********************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章