Semua buku pedoman / peran saya yang mungkin diperiksa di git repo saya.
Namun, untuk peran Ansible Galaxy saya selalu harus mengunduhnya secara eksplisit satu per satu di setiap mesin tempat saya ingin menjalankan Ansible.
Bahkan sulit untuk mengetahui sebelumnya peran Ansible Galaxy mana yang dibutuhkan sampai Ansible mengeluh tentang peran yang hilang saat runtime.
Bagaimana cara mengelola dependensi peran Galaksi yang Mungkin? Saya ingin mereka memeriksanya ke repo git saya bersama dengan kode lain yang memungkinkan atau meminta mereka secara otomatis diidentifikasi dan diunduh saat saya menjalankan Ansible di mesin baru.
Jawaban:
Anda harus menggunakan
requirements.yml
file untuk kasus penggunaan ini. Jelaskan peran yang Anda perlukan, menggunakan salah satu dari berbagai metode pemasangan:Kemudian instal mereka:
Berikut adalah contoh yang berfungsi (menginstal OpenDaylight menggunakan Ansible sebagai penyedia Vagrant). Lihat dokumen Ansible yang relevan untuk info lebih lanjut.
sumber
Seperti yang disarankan, Anda dapat menggunakan galaksi yang memungkinkan untuk kebutuhan ini.
Ansible memiliki fitur di mana Anda dapat membuat
requirements.yml
file yang mencantumkan semua peran Anda. Anda dapat mengetahuinya di sini: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-fileMisalnya (requirement.yml):
Anda kemudian menjalankan
ansible-galaxy install -r requirements.yml
file ini untuk mengunduh semua peran yang terdaftar di sana.Jika Anda ingin mengotomatiskannya lebih lanjut, Anda dapat membuat skrip shell sederhana yang akan menjalankan dua perintah.
Misalnya (ansible.sh):
./ansible.sh
sumber
2.2.1
Saya sering menemukan diri saya menginstal Java JDK. Menggunakan peran membuat sentuhan itu lebih mudah. Saya telah mencoba beberapa cara berbeda (termasuk banyak .gitmodules dan submodule ... Saya harus menggunakan beberapa sistem git untuk bekerja dan semuanya menjadi jelek). Persyaratan terbesar saya adalah saya tidak memeriksa kode peran ke dalam proyek pedoman saya, terutama agar saya dapat menyimpan semuanya di satu tempat.
Isi file 'Requirement.yml' saya:
Saya menjalankan buku pedoman terpisah, install-role.yml:
Saya menjalankan pedoman pertama ini, lalu saya menjalankan peran saya di pedoman mana pun secara normal. Bagi saya rahasianya adalah memastikan itu diabaikan oleh git jadi saya tidak memeriksa peran secara salah. Juga karena saya menghapus folder setiap kali, saya memastikan saya tidak perlu memaksa atau mengabaikan kesalahan.
sumber
Solusi lain adalah dengan menggunakan submodul git. Bagaimanapun, Ansible Galaxy hanya adalah direktori repositori github ...
Saya menggunakan perintah ini untuk secara otomatis menambahkan peran Galaxy apa pun sebagai submodule:
Komit perubahannya ke repo git Anda. Saat Anda mengkloning repo Anda di masa mendatang, pastikan untuk mengkloningnya dengan submodul, mis
git clone ... --recursive
Keuntungannya adalah, submodul git selalu merujuk ke versi tertentu (git commit-hash). Ini akan mencegah Anda menjalankan pembaruan yang belum teruji di lingkungan produktif Anda. Versi baru dari peran Galaxy mungkin memiliki bug atau bekerja sama sekali berbeda dari sebelumnya. Dengan submodul git Anda memutuskan apakah dan kapan Anda memperbarui peran ke versi baru.
Selain itu, Anda tidak perlu juga mengurus peran galaksi daftar hitam di Anda
.gitignore
untuk mencegah memasukkan kode mereka ke repositori Anda.sumber
--force
bendera tidak berdokumen, itu tidak akan menunjukkan kepada Anda apakah atau apa yang sebenarnya berubah. Ini adalah kotak hitam yang hanya dapat Anda kendalikan jika Anda menyimpan peran galaksi yang diunduh di SCM. Untuk alasan lain, itu ide yang bagus. Saat menarik submodul, Anda setidaknya melihat peran mana yang berubah.Anda dapat menggunakan peran yang memungkinkan untuk menginstal peran yang diperlukan menggunakan modul perintah .
Berikut adalah contoh yang sangat mendasar yang berjalan
ansible-galaxy install
:The
ansible_roles_list
mungkin diberikan sebagai variabel atau sebagai parameter peran.Jika Anda melakukan ini dalam sebuah peran, itu harus diterapkan sebelum peran lain apa pun yang ingin Anda instal menggunakannya, di buku pedoman terpisah. Ini karena Ansible memeriksa apakah semua peran tersedia sebelum menjalankan playbook tempat Anda mereferensikannya.
sumber
Pada titik ini, sejauh yang saya tahu tidak ada cara otomatis untuk mengunduh peran saat runtime. Taruhan terbaik Anda adalah memasukkannya ke dalam repo Anda sendiri atau memiliki dokumentasi yang tepat yang mencantumkan semua persyaratan. Anda bahkan dapat membuat buku pedoman pra-penerbangan yang menginstal peran Anda. :)
sumber
Di sini, persyaratan saya adalah tentang peran dan digunakan di install.yml
main.yml
sumber
Jika requirement.yml berada di direktori peran proyek Anda, Tower / AWX menginstal peran tersebut secara otomatis.
sumber