GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara meneruskan variabel tambahan ke buku pedoman Ansible

Dengan Ansible, pengguna memiliki fleksibilitas untuk menerima input eksternal saat menjalankan playbook Ansible mereka tanpa mengubah konten playbook Ansible. Ini dapat dilakukan melalui kemampuan untuk meneruskan variabel tambahan ke buku pedoman Ansible. Fitur ini tersedia saat menggunakan Ansible CLI atau Ansible Tower.

Mengapa variabel tambahan?

Mengapa saya harus meneruskan variabel ke buku pedoman Ansible ketika saya bisa mendeklarasikan setiap variabel dan nilai dalam buku pedoman atau dalam file variabel? Ini adalah pertanyaan baru-baru ini yang saya terima terakhir kali saya menjelaskan konsep penggunaan opsi vars ekstra di Ansible.

Jawabannya kebohongan menjadi eksplisit ketika Anda mengalami skenario seperti berikut:

  • Apa yang akan Anda lakukan ketika Anda ingin mengubah nilai sebuah variabel? Edit buku pedoman atau file variabel?
  • Apa yang akan Anda lakukan bila Anda ingin menggunakan nilai yang berbeda untuk variabel setiap kali Anda menjalankan buku pedoman Ansible?
  • Apa yang akan Anda lakukan jika Anda ingin menggunakan nilai untuk beberapa variabel hanya saat menjalankan buku pedoman?

Meskipun pertanyaan ini hanya menggores permukaan, menjadi jelas bahwa ketika Anda mencari fleksibilitas, Ansible ekstra fitur variabel adalah jawaban terbaik untuk sebagian besar solusi ini. Kasus penggunaan berikut menjelaskan bagaimana Anda dapat menggunakan variabel tambahan untuk menambah fleksibilitas pada buku pedoman Ansible Anda.

Host pengkodean keras adalah ide yang buruk

Misalnya, Anda membuat buku pedoman Ansible yang berjalan pada kumpulan host tertentu dan menyetel host tersebut ke grup berlabel:webgroup. Setelah menyelesaikan pengujian Playbook Ansible, Anda mengaktifkannya untuk penggunaan produksi.

Sayangnya, tim operasi atau teknisi perlu menjalankan pedoman ini di grup host lain yang disebut appgroup . Dengan mengkodekan secara eksplisit nama grup host dalam buku pedoman Ansible, Anda telah membatasi fleksibilitasnya yang memerlukan perubahan dalam buku pedoman Ansible itu sendiri.

Apa metode yang lebih baik untuk menyelesaikan masalah ini?

Penggunaan parameter --extra-vars dan memodifikasi playbook Ansible untuk mengambil variabel (mis., node) saat mendeklarasikan host Anda. Contoh berikut mengilustrasikannya:

- hosts: "{{ nodes }}"
  vars_files:
    - vars/main.yml
  roles:
    - { role: geerlingguy.apache }

Untuk meneruskan nilai ke node , gunakan --extra-vars atau -e opsi saat menjalankan playbook Ansible, seperti yang terlihat di bawah ini.

# ansible-playbook myplaybook.yaml --extra-vars "nodes=webgroup”

## Or

# ansible-playbook myplaybook.yaml --extra-vars "nodes=appgroup”

Ini memastikan Anda menghindari menjalankan playbook secara tidak sengaja terhadap host yang di-hardcode. Jika buku pedoman Ansible gagal menentukan host saat berjalan, Ansible akan menampilkan error dan berhenti, mengatakan tidak ada nilai untuk node .

Mengontrol variabel Anda dari luar peran Ansible

Peran yang mungkin adalah kumpulan templat, file, variabel, modul, penangan, dan tugas yang dibuat dengan tujuan menyederhanakan penggunaan kembali kode Ansible.

Dalam struktur direktori peran Ansible, Anda akan memiliki dua jenis variabel di dalam direktori berikut:

  • defaults/main.yml - berisi variabel untuk peran yang dapat disesuaikan berdasarkan penggunaan peran yang diinginkan.
  • vars/main.yml - berisi variabel untuk peran yang tidak dimaksudkan untuk dimodifikasi.

* Karena --extra-vars memiliki prioritas lebih tinggi daripada variabel vars/main.yml dapat dimodifikasi menggunakan parameter --extra-vars. Variabel yang dapat dimodifikasi harus berada di defaults/main.yml

Anda dapat menyetel nilai variabel dengan menggunakan --extra-vars .

Misalnya, menggunakan port yang berbeda dalam penginstalan Apache seperti di bawah ini (dengan asumsi variabel ditentukan dalam defaults/main.yml):

# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080”

Jika Anda memiliki beberapa nilai untuk diteruskan, coba ini:

# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080 apache_listen_port_ssl=443”

Bagaimana cara melewatkan variabel yang mengandung spasi?

Anda perlu menambahkan tanda kutip ke nilai string dengan spasi untuk meneruskannya sebagai variabel tambahan:

# ansible-playbook deploy-apache.yaml --extra-vars "apache_ssl_protocol='All -SSLv2 -SSLv3'"

Menutup

[ Butuh lebih banyak tentang Ansible? Ikuti kursus tinjauan teknis gratis dari Red Hat. Ansible Essentials:Kesederhanaan dalam Tinjauan Teknis Otomasi. ]

Ini hanya sekilas tentang berbagai opsi tentang cara meneruskan variabel ke buku pedoman Ansible. Untuk cara lainnya untuk meneruskan variabel ke playbook Ansible, seperti menggunakan JSON dan file variabel eksternal, lihat situs dokumentasi Ansible.


Linux
  1. Mendekonstruksi buku pedoman Ansible

  2. Bagaimana Melewati Variabel Lingkungan ke Docker Containers

  3. bagaimana cara membuat playbook yang memungkinkan untuk mendapatkan versi OS dari host jarak jauh?

  1. Cara membuat Playbook yang Mungkin

  2. Cara menginstal paket perangkat lunak dengan playbook Ansible

  3. Cara mengatur variabel lingkungan Linux dengan Ansible

  1. Playbook yang Mungkin:Cara Membuat dan Mengonfigurasi Playbook

  2. Cara Menggunakan Tag di Ansible Playbook (Contoh)

  3. Cara Mengunduh dan Menggunakan Ansible Galaxy Roles di Ansible Playbook