запустить задачу на узле и перезапустить deamon с другого узла, если задача не удалась Ansible - PullRequest
0 голосов
/ 23 октября 2019

Одна из задач - запустить команду curl на узле [A, B, C] и завершить ее, если нет специальной строки. Если не удалось, я хочу спасти, запустив перезапуск приложения в приложении [A, B, C]. nodeA ==> appA. nodeB ==> appB. nodeC ==> appC

[group1]
nodeA
nodeB
nodeC

[group2]
appA
appB
appC



- hosts: group1
  serial: 1    #I want to do it one at a time

  tasks:
    -name: find if app is running
     command: curl example.com
     register: curl_result
     failed_when: 'version' not in curl_result

- hosts: group2
  tasks:
    - name: restart deamon
      service: app_deamon
      state: restarted

В настоящее время это перезапускает весь deamon в группе 2.

Важно, чтобы задача перезапуска выполнялась на нужных хостах, если задача nodeA не удалась Служба appA должна быть единственной. который получает перезапуск, а не appB или appC. Заранее спасибо за любую помощь по этому

1 Ответ

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

Вы можете добавить переменную хоста для каждого хоста в инвентаре, указав свой выделенный «спасательный хост». Например:

[group1]
nodeA rescue_host=appA
nodeB rescue_host=appB
nodeC rescue_host=appC

Затем в вашей игре делегируйте задачу спасения, основанную на переменной rescue_host:

- block:
    - name: find if app is running
      command: curl example.com
      register: curl_result
      failed_when: 'version' not in curl_result
  rescue:
    - <task>: <restart application>
      delegate_to: "{{ rescue_host }}"

...