如何在ansible中从stdout.lines提取准确的输出

时间:2018-12-19 08:10:19

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

我的Ansible剧本:

#Tag --> B.6 -->
  - name: Change the Security Realm to CustomRealm from ManagementRealm
command: /jboss-as-7.1.1.Final/bin/jboss-cli.sh --connect--command="/core-service=management/management-interface=http-interface:read-attribute(name=security-realm)"
register: Realm

  - debug:
  msg: "{{ Realm.stdout_lines }}"

消息中上述命令的输出如下:

ok: [342f2f7bed8e] => {
"msg": [
"{",
"    \"outcome\" => \"success\","
"    \"result\" => \"ManagementRealm\"",
"}"
]
}

有没有一种方法可以精确计算\“结果\” => \“ ManagementRealm \”“。 我尝试使用

Realm.stdout_lines.find('result')

但是失败了,AWk和grep命令在这里似乎不起作用。

任何想法都会受到赞赏。

想念你

1 个答案:

答案 0 :(得分:1)

我认为您可以通过几种方法来处理此问题。

1)在到达Ansible之前对输出进行Grep:

# Note the change of 'command' to 'shell'
- name: Change the Security Realm to CustomRealm from ManagementRealm
  shell: /jboss-as-7.1.1.Final/bin/jboss-cli.sh --connect--command="/core-service=management/management-interface=http-interface:read-attribute(name=security-realm)" | grep -o 'result.*'
  register: Realm

2)如果源脚本的输出始终为4行,则只需抓住第三行即可。

# List indexes start at 0
- debug:
  msg: "{{ Realm.stdout_lines[2] | regex_replace('^ *(.*$)', '\\1') }}"

3)如果可以选择修改jboss-cli.sh,最好的方法是让jboss-cli.sh输出有效的JSON,然后可以由Ansible解析:

# Assuming jboss-cli.sh produces {"outcome": "success", "result": "ManagementRealm"}
- set_fact:
    jboss_data: "{{ Realm.stdout | from_json }}"
- debug:
    var: jboss_data.result