Рейтинг:0

Ansible: как принудительно убить процесс и выйти из ansible-playbook, если он не удался?

флаг cn

У меня есть две нижеприведенные задачи как часть моей пьесы

      - name: "Подтвердите, что httpd.service не работает на узле {{ ansible_hostname }}"
        оболочка: "ps -ef | grep httpd"
        регистрация: _ps_httpd
        стать истинным
      - имя: stop httpd - это код выхода, равный 0
        оболочка: "kill -9 $(ps -ef | grep httpd| awk '{print $2}')"
        когда: _ps_httpd.rc == 0
        стать истинным
        ignore_errors: правда

Это две задачи, которые должны принудительно убить процесс. В настоящее время я получаю сообщение об ошибке

"msg": "ненулевой код возврата", "rc": -9

Что мне здесь не хватает? Любая идея, как решить эту проблему?

Кроме того, я хотел бы добавить опцию выхода из ansible-playbook запустить, если не удалось.

Рейтинг:0
флаг ca

Для достижения цели в Ansible рекомендуется в основном использовать сервисные модули, оказание услуг, сисвинит или же системад. Например, как

---
- хосты: локальный
  стать: да
  стать_метод: sudo

  собрать_факты: да

  задачи:

  - название: Сбор фактов об обслуживании
    сервис_факты:

  - имя: Убедитесь, что служба остановлена
    системный:
      имя: httpd
      состояние: остановлено
      включено: нет
    когда: ("httpd.service" в службах)

Если вы любите использовать ракушка_module, мне нужно было больше работы.

В примере для нгинкс сначала получите правильный PID, так как есть основной и четыре рабочих процесса.

- имя: Получить PID nginx
  ракушка:
    cmd: "ps -C nginx -o pid --no-headers | голова 1"
    предупредить: ложь
  изменено_когда: ложь
  check_mode: ложь
  регистрация: nginx_pid

Также можно было бы сделать что-то вроде

- имя: Получить PID nginx
  ракушка:
    cmd: "пидоф нгинкс"
    предупредить: ложь
  изменено_когда: ложь
  check_mode: ложь
  регистрация: nginx_pids

- имя: Показать PID
  отлаживать: 
    переменная: nginx_pids

- название: Убить nginx
  ракушка:
    cmd: "убить -9 {{nginx_pids}}"
  ...

Касательно

Я хотел бы добавить опцию выхода из запуска ansible-playbook, если это не удалось.

к Завершить запуск плейбука вы могли бы использовать

- мета: end_play
  когда: condition_is_met

использовать потерпеть поражение_module в

- имя: Задача не удалась из-за
  потерпеть поражение:
    сообщение: "{{ fail_message }}"
  когда: condition_is_met

или утверждать_модуль.

Что касается кода выхода (EC) или кода возврата (RC), вы можете изучить Как получить список кодов выхода (и/или кодов возврата) и значение для команды/утилиты?.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.