inti
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)]
Standar
RHEL 6.7
Ini mungkin bukan bug tetapi hanya sesuatu yang saya dapatkan pada versi yang lebih lama tetapi dengan Ansible 2.3 RC1 jika saya memeriksa apakah variabel yang didaftarkan oleh modul (dengan klausa when) didefinisikan dan kemudian mendapatkan nilai sub dikt itu akan gagal di 2.3 sementara di 2.2 dan di bawah ini berfungsi dengan baik. Ini secara khusus terjadi ketika modul yang mendaftarkan variabel dilewati karena alasan apa pun dan kemudian tugas berikutnya memeriksa apakah variabel tersebut ditentukan dan kemudian mendapatkan sub kunci.
Contoh pedoman
---
- 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
Saat menggunakan 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
Hai!
Terima kasih banyak atas kiriman Anda ke Ansible. Ini sangat berarti bagi kami.
Kami yakin tiket yang Anda ajukan agak disalahpahami, karena satu hal berfungsi sedikit berbeda dari yang disebutkan.
Di masa mendatang, ini mungkin topik yang lebih cocok untuk daftar pengguna, yang juga dapat Anda posting di sini jika Anda membutuhkan bantuan lebih lanjut tentang hal di atas.
Karena Anda melewatkan tugas 'stat', Anda masih mendapatkan test
sebagai kamus yang ditentukan, tetapi tidak memiliki kunci stat
itulah sebabnya Anda mendapatkan pesan kesalahan BENAR. Untuk menghindari masalah seperti ini, Anda perlu:
when: test is defined and 'stat' in test and test.stat.exists
Terima kasih sekali lagi untuk ini dan minat Anda pada Ansible!
Komit yang membagi dua yang mengubah perilaku ini https://github.com/ansible/ansible/commit/81aa12eb1b5a2b50ac9234ca0b05c015af88a845
Masalah terkait https://github.com/ansible/ansible/issues/18514
Komentar yang paling membantu
Kemungkinan Kesalahpahaman
Hai!
Terima kasih banyak atas kiriman Anda ke Ansible. Ini sangat berarti bagi kami.
Kami yakin tiket yang Anda ajukan agak disalahpahami, karena satu hal berfungsi sedikit berbeda dari yang disebutkan.
Di masa mendatang, ini mungkin topik yang lebih cocok untuk daftar pengguna, yang juga dapat Anda posting di sini jika Anda membutuhkan bantuan lebih lanjut tentang hal di atas.
Karena Anda melewatkan tugas 'stat', Anda masih mendapatkan
test
sebagai kamus yang ditentukan, tetapi tidak memiliki kuncistat
itulah sebabnya Anda mendapatkan pesan kesalahan BENAR. Untuk menghindari masalah seperti ini, Anda perlu:Terima kasih sekali lagi untuk ini dan minat Anda pada Ansible!