النواة
ansible 2.3.0.0 (stable-2.3 923c9ef17c) last updated 2017/03/17 09:12:40 (GMT +1000)
config file = /apps/dev/playbook/jordan/mr-ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.12 (default, Sep 23 2016, 14:23:49) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]
اساسي
RHEL 6.7.1
قد لا يكون هذا خطأ ولكن مجرد شيء أفلت منه في الإصدارات الأقدم ولكن مع Ansible 2.3 RC1 إذا كنت أتحقق مما إذا كان متغير مسجل بواسطة وحدة نمطية (مع عبارة when) قد تم تعريفه ومن ثم الحصول على قيمة ديكت فرعية ، فشل في 2.3 بينما في 2.2 وأدناه يعمل بشكل جيد. يحدث هذا على وجه التحديد عندما يتم تخطي الوحدة النمطية التي تسجل المتغير لأي سبب ثم تتحقق مهمة لاحقة مما إذا كان المتغير محددًا ثم تحصل على المفتاح الفرعي.
مثال كتاب اللعب
---
- name: test
hosts: localhost
connection: local
tasks:
- name: module that won't run
stat:
path: /apps/tmp
register: test
when: False
- name: debug of var
debug:
var: test
- name: test with conditional
debug:
msg: A
when: test is defined and test.stat.exists
عند استخدام Ansible 2.2.1.0
ansible 2.2.1.0
config file = /cygdrive/d/dev/jordan/ansible.cfg
configured module search path = Default w/o overrides
PLAY [test] ********************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [module that won't run] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:7
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
TASK [debug of var] ************************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:13
ok: [localhost] => {
"test": {
"changed": false,
"skip_reason": "Conditional check failed",
"skipped": true
}
}
TASK [test with conditional] ***************************************************
task path: /cygdrive/d/dev/jordan/2.3tests.yml:17
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
PLAY [test] ************************************************************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************************************
Friday 17 March 2017 15:20:42 +1000 (0:00:00.039) 0:00:00.039 **********
ok: [localhost]
META: ran handlers
TASK [module that won't run] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:7
Friday 17 March 2017 15:20:44 +1000 (0:00:01.093) 0:00:01.133 **********
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False", "skipped": true}
TASK [debug of var] ****************************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:13
Friday 17 March 2017 15:20:44 +1000 (0:00:00.012) 0:00:01.145 **********
ok: [localhost] => {
"changed": false,
"test": {
"changed": false,
"skip_reason": "Conditional result was False",
"skipped": true
}
}
TASK [test with conditional] *******************************************************************************************************************************************************
task path: /apps/dev/playbook/jordan/mr-ansible/test.yml:17
Friday 17 March 2017 15:20:44 +1000 (0:00:00.034) 0:00:01.180 **********
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check 'test is defined and test.stat.exists' failed. The error was: error while evaluating conditional (test is defined and test.stat.exists): 'dict object' has no attribute 'stat'\n\nThe error appears to have been in '/apps/dev/playbook/jordan/mr-ansible/test.yml': line 17, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: test with conditional\n ^ here\n"}
PLAY RECAP *************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=1
مرحبا!
شكرا جزيلا على تقديمك إلى Ansible. إنه يعني بصدق الكثير بالنسبة لنا.
نعتقد أن التذكرة التي قدمتها قد أسيء فهمها إلى حد ما ، حيث يعمل شيء واحد بشكل مختلف قليلاً عما هو مذكور.
في المستقبل ، قد يكون هذا موضوعًا أكثر ملاءمة لقائمة المستخدمين ، والتي يمكنك أيضًا نشرها هنا إذا كنت ترغب في مزيد من المساعدة فيما سبق.
نظرًا لأنك تتخطى مهمة "stat" ، فلا يزال بإمكانك الحصول على test
كقاموس محدد ، ولكن لا يحتوي على مفتاح stat
وهذا هو سبب ظهور رسالة الخطأ CORRECT. لتجنب مثل هذه المشكلات ، تحتاج إلى:
when: test is defined and 'stat' in test and test.stat.exists
شكرًا لك مرة أخرى على هذا واهتمامك بـ Ansible!
الالتزام المنقسم الذي غيّر هذا السلوك https://github.com/ansible/ansible/commit/81aa12eb1b5a2b50ac9234ca0b05c015af88a845
قضية ذات صلة https://github.com/ansible/ansible/issues/18514
التعليق الأكثر فائدة
سوء فهم محتمل
مرحبا!
شكرا جزيلا على تقديمك إلى Ansible. إنه يعني بصدق الكثير بالنسبة لنا.
نعتقد أن التذكرة التي قدمتها قد أسيء فهمها إلى حد ما ، حيث يعمل شيء واحد بشكل مختلف قليلاً عما هو مذكور.
في المستقبل ، قد يكون هذا موضوعًا أكثر ملاءمة لقائمة المستخدمين ، والتي يمكنك أيضًا نشرها هنا إذا كنت ترغب في مزيد من المساعدة فيما سبق.
نظرًا لأنك تتخطى مهمة "stat" ، فلا يزال بإمكانك الحصول على
test
كقاموس محدد ، ولكن لا يحتوي على مفتاحstat
وهذا هو سبب ظهور رسالة الخطأ CORRECT. لتجنب مثل هذه المشكلات ، تحتاج إلى:شكرًا لك مرة أخرى على هذا واهتمامك بـ Ansible!