Ansible: باستخدام with_dict ومتى لا يتم تخطي المهمة عند عدم تحديدها

تم إنشاؤها على ١١ أغسطس ٢٠١٤  ·  3تعليقات  ·  مصدر: ansible/ansible

نوع القضية:

تقرير الشوائب

نسخة أنسبل:

ansible 1.7

بيئة:

يعمل بنظام التشغيل من: OSX 10.9
الإدارة: Ubuntu 14.04

ملخص:

عندما يتم استخدام مهمة مع "with_dict" و "when" وقيمة when يتم تقييمها إلى false ، يحاول ansible التحقق من وجود قيمة deb ويفشل عندما يجب أن يتخطى المهمة.

خطوات الاستنساخ:

المضيفون:

[test]
testhost

playbook.yml:

- hosts: all
  tasks:
   - name: Delete a user
     user: name="{{item}}" state=absent
     when: users_deleted is defined
     with_dict: users_deleted

الأمر: ansible-playbook -i hosts playbook.yml
لم أقم بتعريف users_deleted لذا يجب تخطي هذه المهمة.
في playbook.yml إذا قمت بتغيير "with_dict" إلى "with_items" يتم تخطي المهمة بشكل صحيح.

نتائج متوقعة:

النتائج من تشغيل المهمة باستخدام "with_items" بدلاً من "with_dict":

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [testhost]

TASK: [Delete a user] *********************************************************
skipping: [testhost] => (item=users_deleted)

PLAY RECAP ********************************************************************
testhost             : ok=2    changed=0    unreachable=0    failed=0
النتائج الفعلية:
PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [testhost]

TASK: [Delete a user] *********************************************************
fatal: [testhost] => with_dict expects a dict

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************

testhost            : ok=1    changed=0    unreachable=1    failed=0

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

أهلا!

هذا نوع من سوء الفهم ، ولكن يتم تقييم الشرط هنا لكل عنصر ، وهي ميزة مطلوبة. من أجل تقييمه لكل عنصر ، يجب أن يبدأ بشيء يمكنه التكرار من أجله.

على هذا النحو ، قد ترغب في القيام بشيء مثل:

with_dict: "{{users_deleted | افتراضي ({})}}"

الذي يجب أن يساعد في حل هذا.

سيسمح لك أيضًا بإزالة جملة when لأن القائمة ستكون بطول صفر بدلاً من غير محددة.

لا تتردد في التوقف عن طريق مشروع غير مرغوب فيه إذا كانت لديك أسئلة أخرى وسنكون سعداء للمساعدة في هذا المشروع.

شكرا!

ال 3 كومينتر

أهلا!

هذا نوع من سوء الفهم ، ولكن يتم تقييم الشرط هنا لكل عنصر ، وهي ميزة مطلوبة. من أجل تقييمه لكل عنصر ، يجب أن يبدأ بشيء يمكنه التكرار من أجله.

على هذا النحو ، قد ترغب في القيام بشيء مثل:

with_dict: "{{users_deleted | افتراضي ({})}}"

الذي يجب أن يساعد في حل هذا.

سيسمح لك أيضًا بإزالة جملة when لأن القائمة ستكون بطول صفر بدلاً من غير محددة.

لا تتردد في التوقف عن طريق مشروع غير مرغوب فيه إذا كانت لديك أسئلة أخرى وسنكون سعداء للمساعدة في هذا المشروع.

شكرا!

انتهى بي الأمر باستخدام:
with_dict: users_deleted | إفتراضي({})

يعمل هذا بالشكل المتوقع ويتخطى المهمة. كمستخدم كان هذا محيرًا بعض الشيء حيث أتوقع أن أتمكن من استخدام "when:" باستمرار عندما أحتاج إلى شرط شرطي لمهمة ما. شكرا لتوضيح هذا!

ما زلت أتلقى هذا الخطأ في الإصدار 2.0.1.0

[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.. This feature will be removed in a future
release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"failed": true, "msg": "with_dict expects a dict"}

لا بد لي من استخدام ignore_errors لتجاوز ذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات