Я хотел бы найти способ захвата msg
, который регистрируется на стандартный вывод при запуске ansible-playbook
.
Я знаю, что могу просто зарегистрировать результат задачи и использовать его какпеременная, но я включаю разные роли с помощью include_role, и я пытаюсь найти способ просто перехватить сообщение об ошибке.
Есть ли какой-нибудь разумный способ сделать это?
Какв качестве примера, давайте представим, что у меня есть пьеса, которая выглядит следующим образом:
- hosts: k8s-cluster:etcd:calico-rr
any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
gather_facts: false
vars:
roles:
- name: "kubespray-defaults"
tags: ""
- name: "bootstrap-os"
tags: "bootstrap-os"
- name: "my-notification"
tags: ""
msg: kubespray-defaults and bootstrap-os completed
host: "{{ inventory_hostname }}"
tasks:
- include_tasks: my_include_role.yml
loop: "{{ roles }}"
А вот my_include_role.yml
- name: my-include-role
block:
- include_role:
name: "{{ item.name }}"
apply:
tags: >-
{%- if item.tags is defined -%}
"{{ item.tags }}"
{%- else -%}
[]
{%- endif -%}
vars:
msg: "{% if item.msg is defined %}{{ item.msg }}{% endif %}"
host: "{% if item.host is defined %}{{ item.host }}{% endif %}"
result: "{% if item.result is defined %}{{ item.result }}{% endif %}"
error: false
rescue:
- debug:
msg: "before notification"
- include_role:
name: "my-notification"
vars:
msg: an error has occurred
host: "{{ inventory_hostname }}"
result: "{% if action_result is defined %}{{ action_result.msg }}{% endif %}"
role: "{{ item.name }}"
error: true
- debug:
msg: "after notification"
always:
- debug:
msg: "include completed"
И мое уведомление следующее:
---
- name: report an event
delegate_to: localhost
uri:
url: "http://localhost:8090/"
method: GET
body_format: json
body: "{\"time\":\"{{ ansible_date_time.iso8601_micro }}\", \"pod_id\":\"{{ pod_id }}\", \"msg\":\"{{ msg }}\", \"host\":\"{{ host }}\"{% if role is defined%}, \"role\":\"{{ role }}\"{% endif %}{% if result is defined%}, \"result\":\"{{ result }}\"{% endif %}{% if error is defined%}, \"error\":{{ error }}{% endif %}}"