ansible parse text string from stdout

Hi Ansible Experts,
Need help to capture the JBOSS EAP JVM uptime value through Ansible playbook. From the below task stdout need to parse the uptime value which is in numeric field to a variable.

{
“outcome” => “success”,
“result” => 3613082543L
}

Can you please suggest the right string parsing method to achieve this? I was unable to use Unix commands like grep/ awk/ sed to filter this numeric value.

Hi Ansible Experts,
Need help to capture the JBOSS EAP JVM uptime value through Ansible
playbook. From the below task stdout need to parse the uptime value which
is in numeric field to a variable.

{
    "outcome" => "success",
    "result" => 3613082543L
}

Can you please suggest the right string parsing method to achieve this? I
was unable to use Unix commands like grep/ awk/ sed to filter this numeric
value.

You have not provided the task, but if you are using the shell module just add
  > awk '/result/ { print $3 }'
and you stdout will only contain that value.

Thanks for your reply Kai.
I am using the below task using command module to get the uptime value of JBOSS EAP server instance. However still I am receiving error as mentioned below.

`

- name: Check the JBOSS Server Uptime Domain mode
  command: "{{ CLI_SCRIPT }} --connect controller={{ item.hostname }}:{{ item.port }} --user={{ jbossuser }} --password={{ jbosspass }} /host={{ item.host }}-{{ item.server }}/core-service=platform-mbean/type=runtime:read-attribute(name=uptime)| awk '/result/ { print $3 }'"
  register: uptime
  delegate_to: remoteserver
  ignore_errors: yes

`

Error message:
`
fatal: [127.0.0.1 → remoteserver]: FAILED! => {“changed”: true, “cmd”: [“/opt/jboss/jboss-eap-7.2.0/bin/jboss-cli.sh”, “–connect”, “controller=remoteserver:11011”, “–user=someuser”, “–password=sometext”, “/host=jbosshost-server/core-service=platform-mbean/type=runtime:read-attribute(name=uptime)|”, “awk”, “/result/ { print $3 }”], “delta”: “0:00:09.420046”, “end”: “2018-11-30 20:05:18.798064”, “msg”: “non-zero return code”, “rc”: 1, “start”: “2018-11-30 20:05:09.378018”, “stderr”: “Duplicate argument ‘–command’/‘–commands’.”, “stderr_lines”: [“Duplicate argument ‘–command’/‘–commands’.”], “stdout”: “”, “stdout_lines”: }

`

I believe we can use Ansible regex, to capture this value.

Thanks for your reply Kai.
I am using the below task using command module to get the uptime value of
JBOSS EAP server instance. However still I am receiving error as mentioned
below.

- name: Check the JBOSS Server Uptime Domain mode
  command: "{{ CLI_SCRIPT }} --connect controller={{ item.hostname }}:{{ item.port }} --user={{ jbossuser }} --password={{ jbosspass }} /host={{ item.host }}-{{ item.server }}/core-service=platform-mbean/type=runtime:read-attribute(name=uptime)| awk '/result/ { print $3 }'"
  register: uptime
  delegate_to: remoteserver
  ignore_errors: yes

Command module doesn't support pipe or redirect only shell module does that.
So just replace command: with shell: and it this should work.

I believe we can use Ansible regex, to capture this value.

To my knowledge (or lack there of) this is actually cumbersome to achieve in Ansible, just using shell module and add awk is way easier.

Unable to use shell module to query the JBOSS uptime with CLI script in Ansible. Can you please help to rectify the error?

`

  • name: Check the JBOSS Server Uptime Domain mode
    shell: “{{ CLI_SCRIPT }} --connect controller={{ item.hostname }}:{{ item.port }} --user={{ myusername }} --password={{ mypassword }} /host={{ item.host }}-{{ item.server }}/core-service=platform-mbean/type=runtime:read-attribute(name=uptime)| awk ‘/result/ { print $3 }’”
    register: uptime
    delegate_to: remoteserver
    ignore_errors: yes

`

Error message:

fatal: [127.0.0.1 → remoteserver]: FAILED! => {“changed”: true, “cmd”: “/opt/jboss/jboss-eap-7.2.0/bin/jboss-cli.sh --connect controller=jbossserver:11011 --user=myusername --password=mypassword /host=jbosshost-server/core-service=platform-mbean/type=runtime:read-attribute(name=uptime) | awk ‘/result/ { print $3 }’”, “delta”: “0:00:00.278269”, “end”: “2018-12-02 12:03:04.863388”, “msg”: “non-zero return code”, “rc”: 2, “start”: “2018-12-02 12:03:04.585119”, “stderr”: “/bin/sh: syntax error at line 1: (' unexpected", "stderr_lines": ["/bin/sh: syntax error at line 1: (’ unexpected”], “stdout”: “”, “stdout_lines”: }

It doesn't like the parenthesise so try to escape them both with a backslash.

Thank you for the assistance. Added with two backslash to escape the parenthesis.

`

  • name: Check the JBOSS Server Uptime Domain mode

shell: “{{ CLI_SCRIPT }} --connect controller={{ item.hostname }}:{{ item.port }} --user={{ myusername }} --password={{ mypassword }} /host={{ item.host }}-{{ item.server }}/core-service=platform-mbean/type=runtime:read-attribute\(name=uptime\)| awk ‘/result/ { print $3 }’”

register: uptime
delegate_to: remoteserver
ignore_errors: yes

`