Mengonversi string menjadi integer di Ansible Playbook

Aug 17 2020

Saya mendapatkan hitungan dari perintah PowerShell dan mendaftarkannya pada variabel. Saya harus menggunakan hitungan itu dalam kondisi kapan. Saya telah mengubahnya menjadi int sebelum menggunakannya dalam kondisi saat juga. Tetap saja tugas itu (pemberitahuan email) dilewati, meskipun jumlahnya 0 di sini. Adakah yang bisa memberi tahu saya apa yang saya lakukan salah di sini. Di bawah ini adalah kode yang saya jalankan

      - 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}}"    

#coba mengonversi ke integer sebelum meneruskan ke kondisi menggunakan 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

Jawaban

6 RomanSpiak Aug 17 2020 at 05:53

inilah yang saya lakukan untuk membuatnya berhasil:

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

dan inilah hasil run 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   

jadi untuk rekap:

  • Anda harus memeriksa apakah variabel register bukanlah struktur yang lebih kompleks - biasanya memang demikian
  • Anda tidak membutuhkan fakta khusus lainnya
  • Anda perlu mengkonversi variabel tanpa menggunakan {{ }}di whenkondisi