Необходимо пропустить сбои в ansible, чтобы сценарий продолжал выполняться, но в конце нужно получить счетчик сбоев - PullRequest
1 голос
/ 13 июля 2020

Я новичок в ansible, и у меня есть сценарий, в котором мой ansible скрипт должен выполняться полностью, даже если произойдет какой-то условный сбой. В конце выполнения я хочу проверить, сколько условий не удалось выполнить как не удалось count.

PLAY RECAP **********************************************************************************************************************************************************************************************
10.0.*.***                 : ok=0   changed=  unreachable=0    failed=0    skipped=0   rescued=0    ignored=0

Ниже показано, что я пробовал:

Я запускаю ansible play, который вызывает роль.

- name: Checking access
  hosts: cluster
  tasks:
  - name: role call
    include_role:
      name: url_access

Если условие не выполняется в playbook, оно должно продолжить выполнение, но в конце failed count должно показать количество сбоев.

main.yml роли выглядит следующим образом:

- name: Access to google.com
  shell: >
    curl -s -o /dev/null -w "%{http_code}" google.com
  ignore_errors: yes
  register: access1

- debug:
    msg: "Access Failed to google.com"
  when: access1.stdout!="200"

- debug:
    msg: "Access Successful to google.com"
  when: access1.stdout=="200"

- name: Access to redhat.com
  shell: >
    curl -s -o /dev/null -w "%{http_code}" redhat.com
  ignore_errors: yes
  register: access2

- debug:
    msg: "Access Failed to redhat.com"
  when: access2.stdout!="301"

- debug:
    msg: "Access Successful to redhat.com"
  when: access2.stdout=="301"

Это результат, который я получаю


TASK [url_access : Access to google.com] ************************************************************************************************************************************************
changed: [10.0.*.***]
changed: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
skipping: [10.0.*.***]
skipping: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
ok: [10.0.*.***] => {
    "msg": "Access Successful to google.com"
}
ok: [10.0.*.***] => {
    "msg": "Access Successful to google.com"
}

TASK [url_access : Access to redhat.com] ************************************************************************************************************************************************
changed: [10.0.*.***]
changed: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
ok: [10.0.*.***] => {
    "msg": "Access Failed to redhat.com"
}
ok: [10.0.*.***] => {
    "msg": "Access Failed to redhat.com"
}

TASK [url_access : debug] *******************************************************************************************************************************************************************************
skipping: [10.0.*.***]
skipping: [10.0.*.***]


PLAY RECAP **********************************************************************************************************************************************************************************************
10.0.*.***                 : ok=2   changed=2  unreachable=0    failed=0    skipped=2   rescued=0    ignored=0
10.0.*.***                 : ok=2   changed=2 unreachable=0    failed=0    skipped=2   rescued=0    ignored=0

Я использовал ignore_errors: yes, поэтому мой playbook выполняется полностью, но, в конце концов, приближается пропущено счетчик, в то время как я хотел иметь сбой счет.

Есть ли способ, чтобы мой скрипт выполнялся полностью, пропуская сбои, но в итоге получаю сбой счет вместо пропущено ?

1 Ответ

0 голосов
/ 13 июля 2020

Q: «Есть ли способ, чтобы мой скрипт выполнялся полностью, пропуская сбои, но в итоге я получаю счетчик сбоев вместо пропущенных?»

A: Используйте блоки и подсчитайте количество ошибок в разделах rescue . Например,

shell> cat playbook.yml
- hosts: localhost
  tasks:
    - block:
        - command: /bin/true
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - block:
        - command: /bin/false
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - block:
        - command: /bin/false
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - debug:
        var: errs|default(0)|int

дает

  errs|default(0)|int: '2'
...