Відповідне завдання на підтвердження, чи працює процес


10

Відповідь 2.1

У ігровій книзі я розпочав процес:

- name: Start Automation Agent, and enable start on boot
  service: name=mongodb-mms-automation-agent state=started enabled=yes

З резюме відтворення, схоже, процес успішно почався.

TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]

Однак, коли увійдіть у віддалений хост і виконайте операцію ps, процес не працює. Перевіряючи журнал процесу, він не вдався до якогось необхідного (призначеного).

Як записати завдання в ігрову книжку, щоб підтвердити, що процес успішно розпочався?

Відповіді:


12

Ви можете перевірити за допомогою failedфільтра Jinja2 після запуску команди, яка перевіряє, чи працює процес.

Ось приклад, який використовує вихід команди, systemctl status apache2щоб вирішити, чи працює Apache:

- name: Check if Apache is running
  command: systemctl status apache2
  ignore_errors: yes
  changed_when: false
  register: service_apache_status

- name: Report status of Apache
  fail:
    msg: |
      Service apache2 is not running.
      Output of `systemctl status apache2`:
      {{ service_apache_status.stdout }}
      {{ service_apache_status.stderr }}
  when: service_apache_status | failed

Якщо команда першого завдання не вдалася, друга задача вийде з ладу і покаже, чому перше завдання не вдалося.
Код повернення зберігається в service_apache_status.rc.

Приклад виходу з ладу:

TASK: [Check if Apache is running] *********************** 
failed: [localhost] => {"changed": false, "cmd": ["systemctl", "status", "apache2"], "delta": "0:00:00.009379", "end": "2016-06-06 15:17:27.827172", "rc": 3, "start": "2016-06-06 15:17:27.817793", "stdout_lines": ["* apache2.service", "   Loaded: not-found (Reason: No such file or directory)", "   Active: inactive (dead)"], "warnings": []}
stdout: * apache2.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
...ignoring

TASK: [Report status of Apache] ***************************
failed: [localhost] => {"failed": true}
msg: apache2 is not running
systemctl status apache2 output:
* apache2.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Ось інший (хоча можливо менш надійний) спосіб pgrepперевірити, чи процес працює:

- name: Check if Apache is running
  shell: pgrep apache2
  ignore_errors: yes
  changed_when: false
  register: service_apache_status

- name: Report status of Apache
  fail:
    msg: |
      Service apache2 is not running.
      Return code from `pgrep`:
      {{ service_apache_status.rc }}
  when: service_apache_status.rc != 0

Як when: service_apache_status | failedпрацює? Чи шукає failedмаркер в service_apache_status?
Говард Лі

2
@HowardLee: Я вважаю, що він перевіряє код повернення, і якщо його немає 0, він вважається failed.
Делтік

1
замість ps | pgrep apache2
греп,

@madeddie: Мені це подобається. Відповідь оновлено, щоб запропонувати pgrep!
Deltik

4

Це те, що я зараз роблю:

- name: Confirm Automation Agent is running
  command: service mongodb-mms-automation-agent status
  register: agent_status
  failed_when: "'NOT' in agent_status.stdout"
  changed_when: False

failed_whenвводиться в 1.4. changed_when: Falseвикористовується для придушення статусу змін. Детальніше .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.