Attività di risposta per confermare se un processo è in esecuzione


10

Ansible 2.1

Nel playbook, ho avviato un processo:

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

Dal riassunto della riproduzione, sembra che il processo sia stato avviato correttamente.

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

Tuttavia, quando si accede all'host remoto e si esegue un ps, il processo non è in esecuzione. Controllando sul registro di processo, alcuni dei prerequisiti (previsti) non erano riusciti.

Come posso scrivere un'attività in un playbook per confermare che il processo è stato avviato correttamente?

Risposte:


12

È possibile verificare con il failedfiltro Jinja2 dopo aver eseguito il comando che controlla se il processo è in esecuzione.

Ecco un esempio che utilizza l'output del comando systemctl status apache2per decidere se Apache è in esecuzione:

- 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

Se il comando della prima attività non è riuscito, la seconda attività non riuscirà e mostrerà perché la prima attività non è riuscita.
Il codice di ritorno è memorizzato in service_apache_status.rc.

Esempio di output di un errore:

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)

Ecco un modo diverso (anche se forse meno affidabile), usando pgrep, per verificare se il processo è in esecuzione:

- 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

Come when: service_apache_status | failedfunziona Cerca un failedtoken in service_apache_status?
Howard Lee,

2
@HowardLee: credo che controlli il codice di ritorno e, in caso contrario 0, è considerato failed.
Deltik,

1
invece di ps | grep potresti provarepgrep apache2
madeddie

@madeddie: mi piace. Risposta aggiornata per suggerire pgrep!
Deltik,

4

Questo è quello che faccio ora:

- 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è introdotto in 1.4. changed_when: Falseviene utilizzato per sopprimere lo stato di modifica. Per saperne di più .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.