Ansible: захват сообщения об ошибке и использование его в восстановительной части блока - PullRequest
1 голос
/ 01 октября 2019

Я хотел бы найти способ захвата 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 %}}"

1 Ответ

1 голос
/ 01 октября 2019

Q: "Я изо всех сил пытаюсь найти способ просто зафиксировать сообщение об ошибке."

A: Возможно использовать Playbook Debugger .

"Затем вы можете, например, проверить или установить значение переменных, обновить аргументы модуля и повторно запустить задачу с новыми переменными и аргументамичтобы помочь устранить причину сбоя. "

Например

- name: Play
  hosts: all
  debugger: on_failed
  tasks:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...