Conversion d'une chaîne en entier dans Ansible Playbook

Aug 17 2020

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 Aug 17 2020 at 05:53

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 {{ }}de whencondition