Как извлечь точный вывод из stdout.lines в ansible - PullRequest
0 голосов
/ 19 декабря 2018

My Ansible Playbook:

#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 голосов
/ 19 декабря 2018

Я думаю, что есть несколько способов, которыми вы могли бы справиться с этим.

1) Grep вывод, прежде чем он перейдет к Ansible:

# 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 строки, вы можете просто взять 3-ю строку:

# 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
...