Laporan Bug
mungkin 1.7
Menjalankan OS dari: OSX 10.9
Mengelola: Ubuntu 14.04
Saat tugas digunakan dengan "with_dict" dan "kapan" dan nilai when dievaluasi ke false, ansible mencoba memeriksa nilai dict dan gagal saat harus melewati tugas.
tuan rumah:
[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
perintah: ansible-playbook -i hosts playbook.yml
Saya belum mendefinisikan users_deleted sehingga tugas ini harus dilewati.
Di playbook.yml jika Anda mengubah "with_dict" menjadi "with_items" tugas dilewati dengan benar.
Hasil dari menjalankan tugas menggunakan "with_items" alih-alih "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
Hai!
Ini sedikit kesalahpahaman, tetapi kondisi di sini dievaluasi untuk setiap item, yang merupakan fitur yang dibutuhkan. Untuk mengevaluasinya untuk setiap item, itu harus dimulai dengan sesuatu yang dapat diulang.
Karena itu, Anda mungkin ingin melakukan sesuatu seperti:
with_dict: "{{ users_deleted | default({}) }}"
Yang seharusnya membantu menyelesaikan ini.
Itu juga akan memungkinkan Anda untuk menghapus klausa ketika karena daftar akan menjadi nol panjang, bukan tidak terdefinisi.
Jangan ragu untuk mampir ke proyek yang memungkinkan jika Anda memiliki pertanyaan lebih lanjut dan kami akan dengan senang hati membantu dengan yang satu ini.
Terima kasih!
Saya akhirnya menggunakan:
with_dict: pengguna_dihapus | bawaan({})
Ini berfungsi seperti yang diharapkan dan melewatkan tugas. Sebagai pengguna, ini sedikit membingungkan karena saya berharap dapat menggunakan "kapan:" secara konsisten ketika saya membutuhkan persyaratan untuk suatu tugas. Terima kasih telah mengklarifikasi ini!
Saya masih mendapatkan kesalahan ini di versi 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"}
Saya harus menggunakan ignore_errors
untuk melewatinya.
Komentar yang paling membantu
Hai!
Ini sedikit kesalahpahaman, tetapi kondisi di sini dievaluasi untuk setiap item, yang merupakan fitur yang dibutuhkan. Untuk mengevaluasinya untuk setiap item, itu harus dimulai dengan sesuatu yang dapat diulang.
Karena itu, Anda mungkin ingin melakukan sesuatu seperti:
with_dict: "{{ users_deleted | default({}) }}"
Yang seharusnya membantu menyelesaikan ini.
Itu juga akan memungkinkan Anda untuk menghapus klausa ketika karena daftar akan menjadi nol panjang, bukan tidak terdefinisi.
Jangan ragu untuk mampir ke proyek yang memungkinkan jika Anda memiliki pertanyaan lebih lanjut dan kami akan dengan senang hati membantu dengan yang satu ini.
Terima kasih!