Évaluation du code de retour dans conditionnel ansible
Je suis en train de travailler sur l'automatisation d'une tâche qui doit ajouter la dernière version du logiciel à un fichier. Je ne veux pas à le faire plusieurs fois pour la même version.
Il ressemble à l'exemple suivant fichier:
var software releases = new Array(
"4.3.0",
"4.4.0",
"4.5.0",
"4.7.0",
"4.8.0",
"4.11.0",
"4.12.1",
"4.14.0",
"4.15.0",
"4.16.0",
);
les valeurs par défaut principal.yml allait passer dans quelque chose comme
VERSION: 4.16.2
code
- name: register version check
shell: cat /root/versions.js | grep -q {{VERSION}}
register: current_version
- debug: msg="The registered variable output is {{ current_version.rc }}"
- name: append to versions.js
lineinfile:
dest: /root/versions.js
regexp: '^\);'
insertbefore: '^#\);'
line: " \"{{VERSION}}\",\n);"
owner: root
state: present
when: current_version.rc == 1
problème: le message de débogage est l'évaluation current_version.rc et me montrant valeurs booléennes en fonction des commandes grep sortie, mais je ne peux pas ré-utiliser dans la when
conditionnelle afin de déterminer si la tâche doit être exécutée.
Edit: la sortie:
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [test | register version check] *****************************************
failed: [localhost] => {"changed": true, "cmd": "cat /root/versions.js | grep -q 3.19.2", "delta": "0:00:00.003570", "end": "2015-12-17 00:24:49.729078", "rc": 1, "start": "2015-12-17 00:24:49.725508", "warnings": []}
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/root/site.retry
localhost : ok=1 changed=0 unreachable=0 failed=1
source d'informationauteur Bryan
Vous devez vous connecter pour publier un commentaire.
Comme nikobelia souligné dans les commentaires,
grep
renvoie un code de sortie 1, quand il ne correspond pas à toutes les lignes. Ansible interprète de cela (en fait, tous les codes de statut autre que 0 à partir d'un shell de commande/tâche) comme une erreur et ainsi de rapidement échoue.Vous pouvez dire Ansible d'ignorer le code de la réponse à partir du shell de commande/tâche à l'aide de
du paramètre ignore_errors
. Bien qu'avecgrep
cela permettra d'ignorer les erreurs réelles (donné par un code de retour de 2) donc, au lieu de cela, vous pourriez vouloir utiliserfailed_when
comme ceci: