Как я могу посчитать успех / неудачу задачи в ansible? - PullRequest
1 голос
/ 05 мая 2020

Я использую ansible для создания распределенного приложения. Я устанавливаю узлы, а затем создаю виртуальные интерфейсы, и виртуальных интерфейсов не может быть больше, чем узлов. поэтому, если я устанавливаю на X узлы, а Y узлов терпит неудачу, мне нужно проверить, что больше нет виртуальных интерфейсов (XY).

Есть ли способ получить для определенной задачи c числовое значение того, сколько узлов прошло успешно / не удалось, чтобы я мог позже использовать его для проверки количества виртуальных интерфейсов?

1 Ответ

0 голосов
/ 05 мая 2020

Используйте ansible -runner . См. События задания артефакта бегуна и, в частности, «статистику». Например, ansible -runner и playbook

shell> cat private3/project/test.yml
- hosts: test_01:test_02
  gather_facts: false
  tasks:
    - debug:
        var: inventory_hostname
    - fail:
        msg: Fail test_02
      when: inventory_hostname == 'test_02'
shell> ansible-runner -p test.yml -i ID01 run private3
...
ASK [fail] ********************************************************************
skipping: [test_01]

fatal: [test_02]: FAILED! => {"changed": false, "msg": "Fail test_02"}
...

создали записи в каталоге private3/artifacts/ID01/job_events/. Я не знаю ни одного общедоступного инструмента для анализа событий. Я создал playbook, который отображает невыполненные задачи

shell> cat pb.yml
- hosts: localhost
  gather_facts: false

  vars:
    events_dir: private3/artifacts/ID01/job_events

  tasks:
    - find:
        paths: "{{ events_dir }}"
      register: result
    - include_vars:
        file: "{{ item }}"
        name: "{{ 'my_var_' ~ my_idx }}"
      loop: "{{ result.files|json_query('[].path') }}"
      loop_control:
        index_var: my_idx
        label: "{{ my_idx }}"
    - set_fact:
        my_events: "{{ my_events|default({})|
                       combine({my_key: lookup('vars', my_key)}) }}"
      loop: "{{ range(0, result.matched)|list }}"
      loop_control:
            index_var: my_idx
      vars:
        my_key: "{{ 'my_var_' ~ my_idx }}"
    - set_fact:
        my_list: "{{ my_events|json_query('*.{counter: counter,
                                              event: event,
                                              task: event_data.task_action,
                                              host: event_data.host}') }}"
    - debug:
        var: item
      loop: "{{ my_list|sort(attribute='counter') }}"
      loop_control:
        label: "{{ item.counter }}"
      when: item.event == 'runner_on_failed'

дает

shell> ansible-playbook pb.yml
...
skipping: [localhost] => (item=11) 
ok: [localhost] => (item=12) => {
    "ansible_loop_var": "item",
    "item": {
        "counter": 12,
        "event": "runner_on_failed",
        "host": "test_02",
        "task": "fail"
    }
}
skipping: [localhost] => (item=13)
...

Не стесняйтесь подбирать playbook для своих нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...