Ansible 2.1
Dans le livre de jeu, j'ai lancé un processus:
- name: Start Automation Agent, and enable start on boot
service: name=mongodb-mms-automation-agent state=started enabled=yes
D'après le récapitulatif de la lecture, il semble que le processus ait démarré avec succès.
TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]
Cependant, lorsque vous vous connectez à l'hôte distant et effectuez une ps
, le processus n'est pas en cours d'exécution. Vérification sur le journal de processus, il avait échoué un pré-requis (prévu).
Comment écrire une tâche dans un livre de jeu pour confirmer que le processus a démarré avec succès?
Vous pouvez vérifier avec le filtre failed
Jinja2 après avoir exécuté votre commande qui vérifie si le processus est en cours d'exécution.
Voici un exemple qui utilise le résultat de la commande systemctl status Apache2
pour décider si Apache est en cours d'exécution:
- 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
Si la commande de la première tâche a échoué, la deuxième tâche échouera et montrera pourquoi la première tâche a échoué.
Le code de retour est stocké dans service_Apache_status.rc
.
Exemple de sortie d'un échec:
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)
Voici une méthode différente (mais peut-être moins fiable), utilisant pgrep
, pour vérifier si le processus est en cours d'exécution:
- 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
C'est ce que je fais maintenant:
- 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
est introduit dans 1.4. changed_when: False
est utilisé pour supprimer le statut de modification. En savoir plus .