Conversion d'une chaîne en entier dans Ansible Playbook
Je reçois un décompte de la commande powershell et je l'enregistre sur la variable. Je dois utiliser ce décompte dans la condition. Je l'ai changé en int avant de l'utiliser dans la condition when aussi. Cette tâche (notification par courrier) est toujours ignorée, même si le nombre est de 0 ici. Quelqu'un peut-il me dire ce que je fais mal ici. Ci-dessous le code que j'exécute
- name: Get message_count
shell: echo "{{ (output.stdout | from_json).MessageCount }}"
register: message_count #message_count is Zero here
delegate_to: localhost
- set_fact:
countt: "{{ message_count | int}}"
#tenté de convertir en entier avant de passer à la condition en utilisant set_fact
- debug: var=countt
- name: send mail notification
mail:
host: abc.zzzz.net
port: 25
from: <[email protected]>
to:
- [email protected]
subject: Test mail sent from core server
body: Test mail sent from core server
delegate_to: localhost
when: countt==0
Réponses
6 RomanSpiak
voici ce que j'ai fait pour que ça marche :
---
- name: answer serverfault
hosts: all
become: yes
tasks:
- name: Get message_count
shell: ls /tmp/empty | wc -l
register: tmp_count
delegate_to: localhost
- debug: var=tmp_count.stdout
- name: do something else when tmp_count.stdout == 0
shell: echo "I am doing it"
delegate_to: localhost
when: tmp_count.stdout | int == 0
et voici le résultat de l'exécution du playbook :
ripper@mini-ripper:~/Devel/ansible$ ansip ./test_playbook.yml -i localhost,
PLAY [answer serverfault] **************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
[WARNING]: Platform linux on host localhost is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [localhost]
TASK [Get message_count] ******************************************************************************************************************************************************************************************
changed: [localhost -> localhost]
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"tmp_count.stdout": "0"
}
TASK [do something else when tmp_count.stdout == 0] ***************************************************************************************************************************************************************
changed: [localhost -> localhost]
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
donc pour récapituler :
- vous devriez vérifier si la variable de registre n'est pas une structure plus complexe - c'est généralement le cas
- vous n'avez pas besoin d'un autre fait personnalisé
- vous devez convertir votre variable sans utiliser
{{ }}
dewhen
condition