Odpowiednie zadanie w celu potwierdzenia, czy proces jest uruchomiony

10

Ansible 2.1

W podręczniku rozpocząłem proces:

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

Podsumowując, wydaje się, że proces został pomyślnie rozpoczęty.

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

Jednak po zalogowaniu się do zdalnego hosta i wykonaniu a psproces nie jest uruchomiony. Sprawdzanie w dzienniku procesu nie powiodło się (wstępnie).

Jak napisać zadanie w poradniku, aby potwierdzić, że proces się rozpoczął?

Howard Lee
źródło

Odpowiedzi:

12

Możesz sprawdzić za pomocą failedfiltru Jinja2 po uruchomieniu polecenia sprawdzającego, czy proces jest uruchomiony.

Oto przykład, w którym dane wyjściowe polecenia systemctl status apache2decydują, czy Apache jest uruchomiony:

- 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

Jeśli polecenie pierwszego zadania nie powiedzie się, drugie zadanie zakończy się niepowodzeniem i pokaże, dlaczego pierwsze zadanie nie powiodło się.
Kod powrotu jest przechowywany w service_apache_status.rc.

Przykładowe wyjście awarii:

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)

Oto inny (choć prawdopodobnie mniej niezawodny) sposób, za pomocą pgrep, aby sprawdzić, czy proces działa:

- 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
Deltik
źródło
Jak when: service_apache_status | faileddziała Czy szuka failedtokena w service_apache_status?
Howard Lee,
2
@HowardLee: Uważam, że sprawdza kod powrotu, a jeśli nie 0, jest brany pod uwagę failed.
Deltik
1
zamiast ps | grep możesz spróbowaćpgrep apache2
madeddie
@madeddie: Podoba mi się. Odpowiedź zaktualizowana, aby zasugerować pgrep!
Deltik
4

Oto co teraz robię:

- 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_whenwprowadza się w 1.4. changed_when: Falsesłuży do pomijania statusu zmiany. Czytaj dalej .

Howard Lee
źródło