Cara Menggunakan Variabel Dalam Playbook yang Dimungkinkan

Dalam artikel terakhir kami, kami membahas apa itu playbook Ansible dan bagaimana membuat dan menjalankan tugas melalui playbook. Dalam artikel ini, kita akan melangkah lebih jauh dan mempelajari cara menggunakan variabel di Playbooks.
Contents
Apa Itu Variabel yang Mungkin?Variabel – Kunci, Variabel Pemetaan Nilai – Daftar ElemenVariable – DictionaryPlay Vs Task Level PrecedencePlaybook Vs Command Line Argument PrecedenceVariable FileHost And Group VariablesMagic VariabelFakta Sebagai VariabelKesimpulanApa Itu Variabel Ansible?

Variabel adalah konsep dasar dalam semua bahasa pemrograman yang digunakan untuk menyimpan data dan kemudian digunakan dalam kode. Demikian pula, ansible memiliki variabel yang menyimpan beberapa nilai, dan kemudian digunakan dalam buku pedoman untuk pemrosesan yang berbeda.

Ansible mendukung mendeklarasikan variabel di banyak tempat seperti buku pedoman, file host_vars & group_vars, dan argumen baris perintah.

Di bagian yang akan datang, kita akan membahas cara mendefinisikan variabel di tempat yang berbeda dan mempelajari tentang prioritas variabel.
Variable – Key, Value Mapping

Variables dapat didefinisikan pada level permainan dan level tugas menggunakan kata kunci “vars”. Setelah kata kunci vars, variabel dengan kunci dan nilai diberikan. Variabel ini dapat diakses oleh semua tugas di play.

I telah membuat satu tugas yang menggunakan modul debug untuk mencetak pesan dengan menggunakan nilai variabel. Variabel harus diapit dengan kurung kurawal ganda {{ variabel }}.

Cara Menggunakan Modul Debug Di Playbooks

name yang Dimungkinkan: Print vars hosts: m1 gathering_facts: false vars: os_name: "PoP!_OS Desktop" versi: tugas "21.10" : - nama: Tugas1 - Variabel pengganti debug: msg: "OS desktop saya saat ini adalah {{ os_name }} - {{ versi }}" Variabel nilai kunci Mapping

Sekarang untuk menjalankan buku pedoman, jalankan perintah berikut di terminal.

$ ansible-playbook playbook_name.yml

Dari gambar di bawah ini Anda dapat melihat kedua variabel saya diganti dengan nilainya ketika pesan dicetak ke stdout.
Variable – Daftar Elemen

Anda dapat membuat daftar elemen dalam sebuah variabel. Jika Anda melihat definisi di bawah ini, saya telah membuat variabel daftar dalam dua cara.
Standar YAML cara mendefinisikan daftar item/elemen. Di sini saya telah memberikan nama variabel sebagai “top_linux_desktops”. Sintaks Python untuk membuat daftar item/elemen. Di sini saya telah memberikan nama variabel sebagai “top_desktops”.

 vars: top_linux_desktops: - MXlinux - pop-os - Linux Mint - Manjaro - Fedora top_desktops: [MXLinux, pop-os, Linux Mint, Manjaro, Fedora]

Anda dapat mencetak semua elemen dari daftar menggunakan nama variabel. Saya telah membuat dua tugas. Tugas pertama akan mencetak elemen dari variabel top_linux_desktops dan tugas kedua akan mencetak elemen dari variabel top_desktops.

 tugas: - nama: Tugas1 - Daftar elemen debug: msg: "Desktop linux favorit saya adalah {{ top_linux_desktops }}" - name: Task2 - Daftar elemen menggunakan sintaks Python debug: msg: "Desktop linux favorit saya adalah {{ top_desktops }}" daftar 

In, Anda juga dapat mengakses elemen individual menggunakan posisi Indeksnya mirip dengan cara Anda mengakses elemen dari daftar python . Ada dua cara untuk melakukannya.
Menggunakan notasi titik(variable.index)notasi Python(variabel[index])
Saya telah membuat dua tugas. Tugas pertama menggunakan notasi titik dan tugas kedua menggunakan notasi python untuk mencetak elemen dari posisi pertama dan kedua. Tugas

: - nama: Tugas3 - Mengakses elemen Daftar menggunakan notasi titik debug: msg: "Desktop linux favorit saya adalah {{ top_linux_desktops.1 }} dan {{ top_desktops[2] }}" - nama: Task4 - Mengakses elemen Daftar menggunakan notasi python(daftar[i]) debug: msg: "Desktop linux favorit saya adalah {{ top_linux_desktops[1] }} dan {{ top_desktops[2] }}"

Variable – Dictionary

Anda dapat membuat objek kamus dan menetapkannya ke variabel. Ini mirip dengan kamus python. Kamus dapat dibuat dengan dua cara.
Sintaks YAML standar untuk mendefinisikan kamus notasi kamusPython
Jika Anda dapat melihat cuplikan buku pedoman di bawah ini, saya telah membuat dua variabel kamus. Variabel pertama “release_info” mengikuti pendekatan sintaks YAML dan variabel kedua “new_release_info” mengikuti sintaks kamus python.

 vars: release_info: name: PoP!_OS Versi desktop: 22.04 release_month: April, 2022 new_release_info: { name: PoP!_OS Desktop, versi: 22.04, release_month: "April, 2022"}

Anda dapat mengambil semua nilai dari variabel atau elemen kamus tertentu menggunakan kuncinya. Mirip dengan daftar, kamus juga mengikuti notasi titik dan python untuk mencetak nilai kunci.

I telah membuat dua tugas, tugas pertama akan menggunakan notasi titik untuk mengambil elemen dari kamus dan tugas kedua akan menggunakan notasi python untuk mengambil elemen. Tugas

: - nama: Tugas1 - Mengakses nilai kamus menggunakan kuncinya dengan titik notation(dict.key) debug: msg: "{{ release_info.name }} versi {{ release_info.version }} dirilis pada {{ release_info.release_month }}" - nama: Task2 - Mengakses nilai kamus menggunakan kuncinya dengan python notation(dict['key']) debug: msg: "{{ new_release_info['name'] }} versi {{ new_release_info['version'] }} dirilis pada {{ new_release_info['release_month'] }}"

Play Vs Task Level Precedence

Variables dapat didefinisikan pada level tugas dan level permainan tetapi variabel yang ditentukan pada level tugas lebih diutamakan daripada variabel yang ditentukan pada level permainan.

Dalam contoh di bawah ini, saya telah membuat vars pada level permainan dan level tugas dengan nama variabel yang sama. Sekarang ketika saya menjalankan buku pedoman itu akan menggunakan nama variabel tugas.

 vars: os_name: "PoP!_OS Desktop" versi: "21.10" tugas: - nama: Tugas1 - Variabel pengganti vars: os_name: "Linux Mint" versi: "20.03 " debug: msg: "OS desktop saya saat ini adalah {{ os_name }} - {{ versi }}"

Playbook Vs Command Line Argument Precedence

Anda dapat mengganti variabel yang diteruskan di playbook dengan menggunakan flag -e. Prioritas yang lebih tinggi diberikan kepada variabel yang melewati -e flag.

Saya menjalankan buku pedoman yang sama dari bagian sebelumnya lagi menimpa variabel dengan -e flag.

$ ansible-playbook 4_var_precedence.yml -e "os_name=fedora" -e "version=35"

Anda dapat meneruskan variabel ke flag -e dalam format Json, YAML atau ini.

# FORMAT INI $ ansible-playbook 4_var_precedence.yml -e "os_name=fedora" -e "version=35" # FORMAT JSON $ ansible-playbook 4_var_precedence.yml -e '{"os_name": "fedora"}' -e '{"version": 35}' # YAML FORMAT $ ansible-playbook 4_var_precedence.yml -e "{os_name: fedora}" - e "{version: 35}"

Anda juga dapat membuat file terpisah untuk variabel dan meneruskannya melalui flag -e. Sintaksnya akan menjadi sebagai berikut. Di sini saya telah membuat file bernama vars.yml dan mengelompokkan semua variabel saya. Sekarang ketika file diteruskan ke flag -e semua variabel diimpor ke playbook.

$ ansible-playbook 4_var_precedence.yml -e @vars.yml

Variable File

Alih-alih mendefinisikan variabel di playbook, Anda dapat membuat file dan mendeklarasikan semua variabel dalam file. Saya telah membuat file bernama vars.yml dan mengelompokkan semua variabel yang telah kita bahas di bagian sebelumnya di file ini.

Daripada menggunakan kata kunci vars, Anda harus menggunakan vars_files Di buku pedoman dan berikan nama file. Sekarang ketika Anda menjalankan playbook, Anda akan memilih variabel dari file. File dapat berada di path apa saja.
Host Dan Variabel Grup

Anda dapat menentukan variabel level host dan level grup dalam file inventaris. Anda dapat merujuk ke artikel berikut di mana kami telah membahas secara singkat cara membuat variabel level host dan level grup.

File Inventaris dan Konfigurasi yang Mungkin

Sebagai praktik terbaik, Anda tidak boleh mendefinisikan variabel di dalam file inventaris sebagai gantinya Anda dapat membuat direktori untuk host_vars dan group_vars dan ansible akan secara otomatis memilih file di direktori. Buat direktori bernama host_vars.

$ mkdir host_vars

Di dalam direktori host_vars, Anda dapat menentukan variabel tingkat host, yaitu Anda dapat membuat file format INI, YAML atau JSON dan menyimpan variabel untuk host tertentu. Jika Anda melihat file inventaris saya di bawah ini, saya memiliki dua host bernama “ubuntu” dan “rocky” dan membuat file variabel untuk setiap host.
Heads Up: File harus diberi nama yang sama dengan nama host/alias di inventaris Anda file.

# File inventaris [m1] ubuntu ansible_host=ubuntu.anslab.com [m2] rocky ansible_host=rocky.anslab.com
$ mkdir host_vars/ubuntu.yml $ echo "pesan: Variabel ini dibaca dari host_vars/ubuntu.yml file"> host_vars/ubuntu.yml" $ mkdir host_vars/rocky.yml $ echo "message: Variabel ini dibaca dari file host_vars/rocky.yml"> host_vars/rocky.yml

Saya telah menambahkan variabel bernama “message” di kedua file variabel. Sekarang jika saya menjalankan buku pedoman saya, variabel akan diambil dari dua file ini.

Demikian pula, Anda juga dapat membuat file variabel untuk grup. Buat direktori “group_vars” dan buat file dengan nama grup sesuai file inventaris .

[m1] ubuntu ansible_host=ubuntu.anslab.com [m2] rocky ansible_host=rocky.anslab.com [s ervers:children] m1 m2

Saya telah membuat grup anak yang disebut “server”, jadi saya membuat nama file sebagai server.yml.

$ mkdir group_vars $ mkdir group_vars/servers.yml $ echo "pesan: Variabel ini dibaca dari group_vars /servers.yml file"> group_vars/servers.yml

Sekarang jika saya menjalankan buku pedoman itu akan membaca server.yml dari group_vars.
Heads Up: Jika Anda memiliki host_vars dan group_vars, mungkin akan mencari definisi host_vars terlebih dahulu, dan jika tidak ditemukan itu akan pergi ke group_vars.
Magic Variables

Ansible menyediakan beberapa variabel internal di mana status variabel ditentukan saat Anda menjalankan buku pedoman. Kita dapat menggunakan variabel-variabel ini melalui buku pedoman. Untuk mendapatkan daftar variabel khusus yang tersedia, Anda dapat merujuk ke tautan berikut.

Variabel Khusus Ansibles

Misalnya ada variabel bernama inventory_dir yang menyimpan path absolut untuk file inventaris yang digunakan oleh playbook.

 - name: Magic Variables - Dapatkan debug jalur direktori inventaris: msg: "{{ inventory_dir }}"

Variabel ajaib yang penting adalah hostvars. Variabel ini akan mencetak kumpulan beberapa variabel ajaib dalam format json.

 - nama: Variabel Ajaib - hostvars debug: msg: "{{ hostvars }}"

Output berisi informasi dalam format str, daftar, dan kamus. Katakanlah saya ingin memeriksa di grup mana host ubuntu saya berada, maka saya bisa mendapatkannya dengan cara berikut. Saya menggunakan notasi sintaks python di sini.

 - nama: Variabel Ajaib debug: msg: "{{ hostvars['ubuntu']['group_names'] }}"

Tidak semua variabel ajaib berguna dalam operasi sehari-hari. Lihatlah semua variabel ajaib dan lihat mana yang sesuai dengan kasus penggunaan Anda.
Fakta Sebagai Variabel

Ketika Anda menjalankan buku pedoman, Ansible akan menggunakan modul pengaturan dan mengumpulkan fakta dari host yang ditargetkan dan menyimpan outputnya di memori sehingga dapat digunakan di buku pedoman. Fakta juga disebut variabel buku pedoman.

Pertama, ketahui tentang keluaran fakta sehingga Anda dapat mengambil atribut tertentu. Jalankan perintah berikut yang akan mengumpulkan output fakta dan menyimpannya dalam file.

$ ansible all -m setup --tree /tmp/facts_result

File output terpisah akan dibuat untuk setiap host. Jika Anda melihat pada output, itu tidak lain adalah output format JSON.

Atribut dalam output fakta akan berada dalam format Daftar, Kamus, dan AnsibleUnsafeText. Di bawah ini adalah beberapa contoh jenis yang berbeda.

 - nama: Keluaran fakta - Debug AnsibleUnsafeText: msg: "{{ found_interpreter_python }}" - nama: Keluaran fakta - Debug daftar: msg: "{{ ansible_all_ipv4_addresses }}" - nama: Fakta output - Kamus debug: msg: "{{ ansible_python }}"

Ada banyak informasi yang dikumpulkan berdasarkan fakta, jadi luangkan waktu Anda untuk melihat output dan lihat apa yang sesuai dengan kebutuhan Anda.
Conclusion

Dalam artikel ini, kita telah membahas apa itu variabel yang memungkinkan dan cara mendeklarasikan variabel di tempat yang berbeda. Prioritas variabel sangat penting ketika mendeklarasikan variabel dan itu tercakup dalam artikel ini. Kami juga membahas variabel ajaib dan kasus penggunaannya. Akhirnya, kami membahas apa itu fakta dan bagaimana menggunakan keluaran fakta sebagai variabel.