Ansible: يتغير نوع المتغيرات من int إلى سلسلة أثناء التلاعب بالرياضيات

تم إنشاؤها على ٢٢ ديسمبر ٢٠١٦  ·  1تعليق  ·  مصدر: ansible/ansible

نوع القضية

  • تقرير الشوائب
اسم المكون
نسخة غير مرغوب فيها
ansible 2.2.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
إعدادات
نظام التشغيل / البيئة


أوبونتو 14.04.2018
نظام التشغيل Ubuntu 16.04.0

ملخص

تتغير متغيرات int إلى سلاسل أثناء التلاعب

خطوات التكاثر

- hosts: localhost
  vars:
    a: 1
    b: "{{ a }}"
    c: "{{ a+1 }}"
  tasks:
    - debug: msg="{{ a + 0 }}"
    - debug: msg="{{ b + 0 }}"
    - debug: msg="{{ c + 0 }}"
      ignore_errors: yes
    - debug: msg="{{ c + '0' }}"
نتائج متوقعة


يجب أن تعيد المهمة الثالثة int 2 ، بينما يجب أن تفشل المهمة الرابعة على الأرجح

النتائج الفعلية


فشل المهمة الثالثة

$ ansible-playbook a.yml -vvvvv
Using /etc/ansible/ansible.cfg as config file
 [WARNING]: provided hosts list is empty, only localhost is available

Loading callback plugin default of type stdout, v2.0 from /usr/lib/python2.7/dist-packages/ansible/plugins/callback/__init__.pyc

PLAYBOOK: a.yml ****************************************************************
1 plays in a.yml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/core/system/setup.py
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: yurii
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python && sleep 0'
ok: [localhost]

TASK [debug] *******************************************************************
task path: /home/yurii/sandbox/ans/a.yml:7
ok: [localhost] => {
    "msg": "1"
}

TASK [debug] *******************************************************************
task path: /home/yurii/sandbox/ans/a.yml:8
ok: [localhost] => {
    "msg": "1"
}

TASK [debug] *******************************************************************
task path: /home/yurii/sandbox/ans/a.yml:9
fatal: [localhost]: FAILED! => {
    "failed": true, 
    "msg": "Unexpected templating type error occurred on ({{ c + 0 }}): coercing to Unicode: need string or buffer, int found"
}
...ignoring

TASK [debug] *******************************************************************
task path: /home/yurii/sandbox/ans/a.yml:11
ok: [localhost] => {
    "msg": "20"
}

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0   
affects_2.2 bug

التعليق الأكثر فائدة

هذا حقًا مجرد متعة Jinja - نظرًا لأنك لن تعرف دائمًا مصدر var (على سبيل المثال ، سطر الأوامر -e vars لا تخضع للاستدلال من نوع YAML وبالتالي فهي دائمًا سلاسل) ، فأنت بحاجة إلى التأكيد / الإكراه قبل القيام بعمليات رياضية. الطريقة الصحيحة للقيام بذلك إذن ، ستكون:

- debug: msg="{{ c | int + 0 }}"

>كل التعليقات

هذا حقًا مجرد متعة Jinja - نظرًا لأنك لن تعرف دائمًا مصدر var (على سبيل المثال ، سطر الأوامر -e vars لا تخضع للاستدلال من نوع YAML وبالتالي فهي دائمًا سلاسل) ، فأنت بحاجة إلى التأكيد / الإكراه قبل القيام بعمليات رياضية. الطريقة الصحيحة للقيام بذلك إذن ، ستكون:

- debug: msg="{{ c | int + 0 }}"
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات