Saya harus memeriksa apakah ada file di /etc/
. Jika file tersebut ada maka saya harus melewatkan tugas tersebut. Ini kode yang saya gunakan:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
Pertama-tama Anda dapat memeriksa apakah file tujuan ada atau tidak, lalu membuat keputusan berdasarkan keluaran dari hasilnya:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
akan memilikistat_result.state.exists
False (dan saat itulah tugas kedua dijalankan). Anda dapat melihat detail modul stat di sini: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
kewhen: not stat_result.stat.exists
jika Anda ingin membaca lebih natural.The Stat modul akan melakukan hal ini serta memperoleh banyak informasi lainnya untuk file. Dari dokumentasi contoh:
sumber
Ini dapat dicapai dengan modul stat untuk melewati tugas saat file ada.
sumber
Secara umum Anda akan melakukan ini dengan modul stat . Tetapi modul perintah memiliki
creates
opsi yang membuatnya sangat sederhana:Saya kira perintah sentuh Anda hanyalah sebuah contoh? Praktik terbaiknya adalah tidak memeriksa apa pun dan membiarkan yang mungkin melakukan tugasnya - dengan modul yang benar. Jadi jika Anda ingin memastikan file tersebut ada, Anda akan menggunakan modul file:
sumber
state: file
tidak membuat file. Lihat docs.ansible.com/ansible/file_module.htmlsumber
when: mypath is not exists
artinya dalam kasus ini? Bukankahmypath
string sederhana?Menurut saya, melakukan banyak
.stat.exists
pemeriksaan jenis ini dapat mengganggu dan rentan kesalahan . Misalnya, mereka memerlukan perhatian ekstra agar mode check (--check
) berfungsi.Banyak jawaban di sini yang menyarankan
Namun, terkadang ini berbau kode jadi selalu cari cara yang lebih baik untuk menggunakan Ansible, khususnya ada banyak keuntungan menggunakan modul yang benar. misalnya
atau
Tetapi jika tidak memungkinkan, gunakan satu modul, selidiki juga apakah Anda dapat mendaftar dan memeriksa hasil dari tugas sebelumnya. misalnya
Perhatikan
when:
tetapi jugacreates:
agar--check
tidak errorSaya menyebutkan ini karena seringkali praktik yang kurang ideal ini datang berpasangan yaitu tidak ada paket apt / yum jadi kami harus 1) mengunduh dan 2) unzip
Semoga ini membantu
sumber
Menemukan bahwa panggilan
stat
lambat dan mengumpulkan banyak info yang tidak diperlukan untuk pemeriksaan keberadaan file.Setelah menghabiskan beberapa waktu mencari solusi, saya menemukan solusi berikut, yang bekerja lebih cepat:
sumber
Anda dapat menggunakan modul Ansible stat untuk mendaftarkan file, dan ketika modul menerapkan kondisi tersebut.
sumber
**
Bagaimana memeriksa apakah sebuah file ada di Ansible using when condition
**
Di bawah ini adalah permainan yang bisa saya gunakan untuk menghapus file ketika file tersebut ada di akhir OS.
Saya telah menggunakan kondisi bermain seperti di bawah ini
Anda dapat memberikan benar / salah berdasarkan kebutuhan Anda
sumber
Jika Anda hanya ingin memastikan ada file tertentu (f.ex. karena itu harus dibuat dengan cara yang berbeda dari melalui ansible) dan gagal jika tidak, maka Anda dapat melakukan ini:
sumber
Catatan tentang jalur relatif untuk melengkapi jawaban lainnya.
Saat melakukan infrastruktur sebagai kode, saya biasanya menggunakan peran dan tugas yang menerima jalur relatif, khususnya untuk file yang ditentukan dalam peran tersebut.
Variabel khusus seperti playbook_dir dan role_path sangat berguna untuk membuat jalur absolut yang diperlukan untuk menguji keberadaan.
sumber