Itu bagiannya:
vars_files:
- vars/vars.default.yml
- vars/vars.yml
Jika file vars/vars.yml
tidak ada - di sini ada kesalahan.
ERROR: file could not read: /.../vars/vars.yml
Bagaimana saya bisa memuat variabel tambahan dari file ini hanya jika ada? (tanpa kesalahan)
Menurut pengembang Ansible , cara yang tepat untuk menyelesaikan ini adalah dengan menggunakan sesuatu seperti:
Lebih jauh, mereka mengatakan :
sumber
include_vars
dalam tugas akan memberikan prioritas yang lebih tinggi dari variabel dibandingkan dengan perandefaults
atauvars
Saya mengalami masalah ini dalam pengaturan di mana saya perlu membuat beberapa lingkungan penempatan (hidup, demo, kotak pasir) ke server fisik yang sama (tidak diizinkan mesin virtual di sini), dan kemudian skrip untuk menggunakan repo svn sewenang-wenang
Ini membutuhkan susunan direktori dari file variabel.yml (opsional), yang akan menggabungkan satu sama lain dan tidak melempar pengecualian jika ada di mana ada yang hilang
Mulailah dengan mengaktifkan penggabungan variabel dalam kemungkinan - perhatikan bahwa penggabungan hash dangkal ini (kedalaman 1 level) dan penggabungan mendalam tidak sepenuhnya rekursif
ansible.cfg
Layout direktori yang memungkinkan
peran / menyebarkan / tugas / include.yml
Ini adalah logika utama untuk pohon direktori dari file variabel opsional.
group_vars / all.yml
Konfigurasikan variabel default untuk proyek dan berbagai pengguna dan lingkungan
peran / deploy / vars / main.yml
standar proyek
role / deploy / vars / project_1.yml
default untuk project_1
peran / deploy / vars / live / main.yml
default untuk lingkungan hidup, menimpa default proyek
role / deploy / vars / live / project_1.yml
penggantian akhir untuk project_1 di lingkungan langsung
playbooks / demo.yml
Konfigurasikan buku pedoman terpisah untuk setiap lingkungan
PERINGATAN: Karena semua lingkungan hidup pada satu host, semua playbook harus dijalankan secara terpisah, jika tidak, Ansible akan mencoba menjalankan semua skrip sebagai pengguna login ssh pertama dan hanya menggunakan variabel untuk pengguna pertama. Jika Anda perlu menjalankan semua skrip secara berurutan, maka gunakan xargs untuk menjalankannya masing-masing sebagai perintah terpisah.
sumber
Catatan: Tes jalur (adalah file, ada, ...) hanya berfungsi dengan jalur absolut atau jalur relatif ke direktori kerja saat ini ketika menjalankan perintah playbook yang mungkin. Ini adalah alasan kami menggunakan pencarian. pencarian menerima jalur relatif ke direktori playbook dan mengembalikan jalur absolut ketika file ada.
sumber
Atau dengan cara yang lebih yaml:
Artinya, alih-alih menulis array pada satu baris dengan tanda kurung, seperti:
Gunakan cara yaml untuk menulis nilai array pada banyak baris, seperti:
Seperti disebutkan ini mencari file vars bernama
{{ ansible_hostname }}.yml
, dan jika tidak ada gunanyadefault.yml
sumber
{{ ansible_hostname }}.yml
nama file, bukan../path/to/file1
. Apa gunanya? Seseorang dapat menambahkan jumlah nama file input yang tidak terbatas.Menyatukan berbagai bagian bersama-sama ... include_vars dengan klausa when yang benar ketika file ada. yaitu
sumber
Jawaban baru berdasarkan pada versi Ansible terbaru — pada dasarnya, Anda harus menggunakan
with_first_found
, bersamaskip: true
untuk melewati tugas jika tidak ada file yang ditemukan.Ini membuatnya jadi Anda tidak perlu memiliki file vars cadangan dalam daftar itu.
Lihat yang terkait: /programming//a/39544405/100134
sumber