تقرير الشوائب
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 لأن القائمة ستكون بطول صفر بدلاً من غير محددة.
لا تتردد في التوقف عن طريق مشروع غير مرغوب فيه إذا كانت لديك أسئلة أخرى وسنكون سعداء للمساعدة في هذا المشروع.
شكرا!
انتهى بي الأمر باستخدام:
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
لتجاوز ذلك.
التعليق الأكثر فائدة
أهلا!
هذا نوع من سوء الفهم ، ولكن يتم تقييم الشرط هنا لكل عنصر ، وهي ميزة مطلوبة. من أجل تقييمه لكل عنصر ، يجب أن يبدأ بشيء يمكنه التكرار من أجله.
على هذا النحو ، قد ترغب في القيام بشيء مثل:
with_dict: "{{users_deleted | افتراضي ({})}}"
الذي يجب أن يساعد في حل هذا.
سيسمح لك أيضًا بإزالة جملة when لأن القائمة ستكون بطول صفر بدلاً من غير محددة.
لا تتردد في التوقف عن طريق مشروع غير مرغوب فيه إذا كانت لديك أسئلة أخرى وسنكون سعداء للمساعدة في هذا المشروع.
شكرا!