Ansible Playbook'ta dizeyi tam sayıya dönüştürme

Aug 17 2020

Powershell komutundan bir sayı alıyorum ve onu değişkene kaydediyorum. Bu sayımı ne zaman yapmalıyım. Bunu when condition'da kullanmadan önce int olarak değiştirdim. Burada sayı 0 olmasına rağmen yine de bu görev (posta bildirimi) atlanıyor. Biri bana burada neyi yanlış yaptığımı söyleyebilir mi? Çalıştırdığım kod aşağıdadır

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

set_fact kullanarak koşula geçmeden önce # tamsayıya dönüştürmeyi denedi

      - 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

Yanıtlar

6 RomanSpiak Aug 17 2020 at 05:53

işte çalışmasını sağlamak için yaptığım şey:

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

ve işte başucu kitabı çalıştırma sonucu:

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   

özetlemek gerekirse:

  • kayıt değişkeninin daha karmaşık bir yapı olup olmadığını kontrol etmelisiniz - genellikle
  • başka bir özel gerçeğe ihtiyacın yok
  • Eğer kullanmadan Değişkeninizi dönüştürmek gerekir {{ }}yılında whenkoşulu