我的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命令在这里似乎不起作用。
任何想法都会受到赞赏。
想念你
答案 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