Ansible: Menggunakan with_dict dan kapan tidak melewatkan tugas saat tidak ditentukan

Dibuat pada 11 Agu 2014  ·  3Komentar  ·  Sumber: ansible/ansible

Jenis Masalah:

Laporan Bug

Versi yang Mungkin:

mungkin 1.7

Lingkungan:

Menjalankan OS dari: OSX 10.9
Mengelola: Ubuntu 14.04

Ringkasan:

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.

Langkah-langkah Untuk Mereproduksi:

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 yang diharapkan:

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
Hasil nyata:
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

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!

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat