it-swarm.com.de

Ansible Aufgabe, um zu bestätigen, ob ein Prozess ausgeführt wird

Ansible 2.1

Im Playbook habe ich einen Prozess gestartet:

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

Es scheint, dass der Prozess erfolgreich gestartet wurde.

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

Wenn Sie sich jedoch beim Remote-Host anmelden und eine ps ausführen, wird der Prozess nicht ausgeführt. Beim Überprüfen des Prozessprotokolls ist eine der Voraussetzungen (beabsichtigt) fehlgeschlagen.

Wie schreibe ich eine Aufgabe in ein Playbook, um zu bestätigen, dass der Prozess erfolgreich gestartet wurde?

9
Howard Lee

Sie können mit dem Filter failed Jinja2 überprüfen, nachdem Sie Ihren Befehl ausgeführt haben, der überprüft, ob der Prozess ausgeführt wird.

Im folgenden Beispiel wird anhand der Ausgabe des Befehls systemctl status Apache2 entschieden, ob Apache ausgeführt wird:

- 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

Wenn der Befehl der ersten Task fehlgeschlagen ist, schlägt die zweite Task fehl und zeigt, warum die erste Task fehlgeschlagen ist.
Der Rückkehrcode ist in service_Apache_status.rc gespeichert.

Beispielausgabe eines Fehlers:

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)

Hier ist eine andere (wenn auch möglicherweise weniger zuverlässige) Methode, mit pgrep zu überprüfen, ob der Prozess ausgeführt wird:

- 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
10
Deltik

Das mache ich jetzt:

- 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 wird in 1.4 eingeführt. changed_when: False wird verwendet, um den Änderungsstatus zu unterdrücken. Lesen Sie mehr .

4
Howard Lee