Artikel ini akan menunjukkan cara menggunakan Ansible templat modul dan beberapa dasar bahasa templating Jinja2. Jadi, mari kita mulai!
Prasyarat
Jika Anda ingin mencoba contoh di artikel ini:
1) Anda harus menginstal Ansible di komputer Anda.
2) Anda harus memiliki setidaknya host Ubuntu/Debian atau host CentOS/RHEL 8 yang dikonfigurasi untuk otomatisasi yang memungkinkan.
Ada banyak artikel di LinuxHint yang didedikasikan untuk Menginstal Ansible dan mengonfigurasi host untuk otomatisasi Ansible. Anda dapat memeriksa ini juga, jika perlu.
Menyiapkan Direktori Proyek yang Mungkin
Sebelum kita melanjutkan lebih jauh, ada baiknya untuk membuat struktur direktori proyek, hanya untuk menjaga agar sedikit teratur.
Untuk membuat direktori proyek template-demo/ dan semua subdirektori yang diperlukan (di direktori kerja Anda saat ini), jalankan perintah berikut:
$ mkdir -pv template-demo/playbooks/templates
Setelah direktori proyek dibuat, navigasikan ke direktori proyek, sebagai berikut:
$ cd template-demo/
Membuat tuan rumah berkas inventaris, sebagai berikut:
$ nano host
Kemudian, tambahkan IP host atau nama DNS Anda (vm1.simpul.com dan vm2.simpul.com) dalam file inventaris.
Setelah Anda selesai dengan langkah ini, simpan file dengan menekan
Buat file konfigurasi Ansible di direktori proyek, sebagai berikut:
$ nano mungkin.cfg
Kemudian, ketik baris berikut di mungkin.cfg mengajukan.
Setelah menyelesaikan langkah ini, simpan file dengan menekan
Pada titik ini, direktori proyek akan terlihat sebagai berikut:
$pohon
Seperti yang Anda lihat, host Ansible juga dapat diakses. Jadi, kita bisa melanjutkan ke bagian selanjutnya dari artikel ini.
$ mungkin semua -u mungkin -m ping
Dasar-dasar Modul Template yang Mungkin
Itu templat modul Ansible menerima opsi yang sama dengan salinan modul Ansible.
Kemungkinan Umum templat pilihan modul:
src - Jalur file template Jinja2 di komputer Anda, yang akan diuraikan oleh bahasa template Jinja2 dan disalin ke host jarak jauh.
tujuan - Jalur tujuan pada host jarak jauh tempat file akan disalin.
pemilik - Pemilik file di host jarak jauh.
kelompok - Grup file di host jarak jauh.
mode - Mode izin file pada host jarak jauh.
Mari kita lihat sebuah contoh.
Pertama, buat buku pedoman Ansible baru copy_file_template1.yaml dalam buku pedoman/ direktori, sebagai berikut:
$ nano buku pedoman/copy_file_template1.yaml
Kemudian, ketik baris berikut di copy_file_template1.yaml buku pedoman.
- tuan rumah: semuapengguna: mungkin
tugas:
- nama: Salin indeks.file html ke server
pola:
src: indeks.jinja2
tujuan: /home/ansible/index.html
pemilik: mungkin
grup: mungkin
modus: 0644
Buku pedoman ini akan menyalin indeks.jinja2 file dari buku pedoman/templat/ direktori (relatif terhadap direktori proyek Anda) ke host jarak jauh menggunakan Ansible templat modul.
Setelah Anda selesai dengan langkah ini, simpan file dengan menekan
Buat indeks.jinja2 file template di buku pedoman/templat direktori, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Ketik baris berikut di indeks.jinja2 berkas templat:
Selamat datang di Linuxhint!
Ini hanya file HTML biasa. Saya tidak menggunakan sintaks Jinja2 mewah di sini.
Setelah Anda selesai dengan langkah ini, simpan file dengan menekan
Jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Playbook harus berjalan dengan sukses.
Seperti yang Anda lihat, indeks.jinja2 template dirender menggunakan bahasa template Jinja22. Konten yang dirender harus disalin ke indeks.html file host jarak jauh.
Mencetak Variabel dalam Template Jinja2
Anda dapat menggunakan fakta, variabel, dan variabel yang ditentukan pengguna di templat Jinja2 Anda.
Pada template Jinja2 Anda, Anda dapat mencetak nilai variabel menggunakan variable nama variabel sintaksis. Jika variabel adalah objek, Anda dapat mencetak properti objek individual menggunakan using variabel objek.Nama properti sintaksis.
Dalam contoh berikut, kami akan mencetak tanggal milik dari mungkin_tanggal_waktu objek di kami indeks.jinja2 templat.
$ ansible all -u ansible -m setup | egrep --color 'tanggal|waktu'
Pertama, buka indeks.jinja2 file template dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Tambahkan baris berikut ke indeks.jinja2 berkas templat:
Halaman dibuat pada ansible_date_time.tanggal
Akhir indeks.jinja2 file akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda selesai dengan langkah ini, simpan file dengan menekan
Jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Seperti yang Anda lihat, indeks.jinja2 templat diproses oleh bahasa templating Jinja2 dan menggantikan kemungkinan_tanggal_waktu.tanggal variabel dengan tanggal di YYYY-MM-DD format. Outputnya kemudian disalin ke indeks.html file di host jarak jauh.
Pernyataan Bersyarat jika dalam Template Jinja2
Bahasa templating Jinja2 mendukung kondisional jika pernyataan. Anda dapat memeriksa variabel tertentu sebelum mencetak apa pun menggunakan jika pernyataan.
Jinja2 jika sintaksnya adalah sebagai berikut:
% jika kondisi %Lakukan sesuatu jika kondisinya benar
% berakhir jika %
Mari kita lihat contoh Jinja2 jika pernyataan.
Di bagian ini, saya akan mendemonstrasikan Jinja2 jika pernyataan menggunakan distribusi_mungkin variabel fakta.
$ ansible all -u ansible -m setup | egrep --warna 'dist'
Pertama, buka indeks.jinja2 Template Jinja2 dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Selanjutnya, tambahkan baris berikut di indeks.jinja2 berkas templat:
% jika distribusi_mungkin == "Debian" %Anda menjalankan Debian Linux
% berakhir jika %
Di sini, saya telah memeriksa jika distribusi_mungkin aku s Debian. Jika ya, maka cetak string Anda menjalankan Debian Linux
Akhirnya, indeks.jinja2 file template akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda mengedit file, simpan file dengan menekan
Sekarang, jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Seperti yang Anda lihat, pada remote host Debian saya, indeks.html file memiliki garis Anda menjalankan Debian Linux
Conditional: Pernyataan if-else di Jinja2 Template
Bahasa templating Jinja2 mendukung kondisional jika-lain pernyataan. Anda dapat mencetak satu hal jika kondisinya cocok dan mencetak sesuatu yang lain jika tidak menggunakan jika-lain pernyataan.
Jinja2 jika-lain sintaksnya adalah sebagai berikut:
% jika kondisi %Lakukan sesuatu jika kondisinya benar
% lain %
Lakukan sesuatu jika kondisinya salah
% berakhir jika %
Mari kita lihat contoh Jinja2 jika-lain pernyataan.
Pertama, buka indeks.jinja2 Template Jinja2 dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Selanjutnya, tambahkan baris berikut di indeks.jinja2 berkas templat:
% jika ansible_distribution == "Debian" %Anda menjalankan Debian Linux
% lain %
Anda tidak menjalankan Debian Linux
% berakhir jika %
Di sini, saya telah memeriksa jika distribusi_mungkin aku s Debian. Jika ya, maka cetak string Anda menjalankan Debian Linux Anda tidak menjalankan Debian Linux
Akhirnya, indeks.jinja2 file template akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda mengedit file, simpan file dengan menekan
Jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Seperti yang Anda lihat, pada remote host Debian saya, indeks.html file memiliki garis Anda menjalankan Debian Linux Anda tidak menjalankan Debian Linux
Conditional: Pernyataan if-elif di Jinja2 Template
Bahasa templating Jinja2 mendukung kondisional jika-elif pernyataan.
Jinja2 jika-elif sintaksnya adalah sebagai berikut:
% jika kondisi1 %Lakukan sesuatu jika kondisi1 benar
% kondisi elif2 %
Lakukan sesuatu jika kondisi2 benar
% kondisi elif3 %
Lakukan sesuatu jika kondisi3 benar
…
% kondisi elifN %
Lakukan sesuatu jika kondisiN benar
% lain %
Lakukan sesuatu jika tidak ada kondisi yang benar
% berakhir jika %
Di sini, % lain % bagian adalah opsional, tetapi ada jika Anda membutuhkannya.
Mari kita lihat contoh Jinja2 jika-elif pernyataan.
Pertama, buka indeks.jinja2 Template Jinja2 dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Selanjutnya, tambahkan baris berikut di indeks.jinja2 berkas templat:
% jika distribusi_mungkin == "Debian" %Anda menjalankan Debian Linux
% elif ansible_distribution == "CentOS" %
Anda menjalankan CentOS Linux
% lain %
Sistem Operasi Anda tidak didukung
% berakhir jika %
Di sini, saya telah memeriksa jika distribusi_mungkin aku s Debian. Jika ya, maka cetak string Anda menjalankan Debian Linux
Saya juga telah memeriksa jika distribusi_mungkin aku s CentOS. Jika ya, maka cetak string Anda menjalankan CentOS Linux
Jika tidak, cetak Sistem Operasi Anda tidak didukung
Akhirnya, indeks.jinja2 file template akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda mengedit file, simpan file dengan menekan
Jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ buku pedoman playbook yang memungkinkan/copy_file_template1.yaml
Seperti yang Anda lihat, pada remote host Debian saya, indeks.html file memiliki garis Anda menjalankan Debian Linux
Di host jarak jauh CentOS saya, indeks.html file memiliki garis Anda menjalankan CentOS Linux
Jika saya memiliki Host jarak jauh lain yang menjalankan OS selain Debian atau CentOS, itu akan memiliki garis Sistem Operasi Anda tidak didukung
Jadi, Jinja2 jika-elif kondisi berfungsi.
Loop di Jinja2 Template
Anda juga dapat mencetak array dan objek menggunakan loop di Jinja2.
Jinja2 untuk sintaks loop adalah sebagai berikut:
Lakukan sesuatu dengan variableName
% akhir untuk %
Di sini, di setiap iterasi array nama array, salah satu elemen array (dimulai dari awal array) ditugaskan ke is nama variabel variabel. Anda dapat melakukan sesuatu dengan variabel ini di dalam loop.
Mari kita lihat bagaimana Anda dapat mencetak elemen array di template Jinja2 Anda dalam contoh berikut:.
Pertama, buka copy_file_template1.yaml Playbook yang memungkinkan dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/copy_file_template1.yaml
Selanjutnya, tambahkan baris berikut di copy_file_template1.yaml file buku pedoman:
vars:menu:
- Rumah
- Produk
- Tentang kami
- Hubungi kami
Di sini, saya telah menambahkan menu array di copy_file_template1.yaml buku pedoman. Selanjutnya, saya akan mencetak elemen array menggunakan loop di my indeks.jinja2 File template Jinja2.
Akhirnya, copy_file_template1.yaml file playbook akan terlihat seperti yang ditunjukkan pada tangkapan layar di bawah ini.
Setelah Anda mengedit file, simpan file dengan menekan
Sekarang, buka indeks.jinja2 Template Jinja2 dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Tambahkan baris berikut di indeks.jinja2 berkas templat:
Di sini, saya membuat bilah navigasi HTML sederhana menggunakan Jinja2 untuk lingkaran. Loop iterasi melalui menu array (yang telah saya definisikan di copy_file_template1.yaml playbook) elemen dan menghasilkan a Tidak bisa item di setiap iterasi.
Akhirnya, indeks.jinja2 file template akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda mengedit file, simpan file dengan menekan
Jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Seperti yang Anda lihat, Jinja2 untuk loop menghasilkan bilah navigasi HTML (di indeks.html mengajukan).
Anda juga dapat mengakses berbagai objek di template Jinja2 Anda.
Mari kita lihat contoh lain.
Pertama, buka copy_file_template1.yaml Playbook yang memungkinkan dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/copy_file_template1.yaml
Selanjutnya, tambahkan baris berikut di copy_file_template1.yaml file buku pedoman:
vars:menu:
- nama: Rumah
tautan: /rumah
- nama: Produk
tautan: /produk
- nama: Tentang Kami
tautan: /tentang-kami
- nama: Hubungi Kami
tautan: /hubungi-kami
Di sini, saya telah menambahkan menu array objek di copy_file_template1.yaml buku pedoman. Masing-masing objek ini memiliki dua properti, a nama properti dan tautan Properti.
Akhirnya, copy_file_template1.yaml file playbook akan terlihat seperti yang ditunjukkan pada tangkapan layar di bawah ini.
Setelah Anda mengedit file, simpan file dengan menekan
Buka indeks.jinja2 Template Jinja2 dengan editor teks nano, sebagai berikut:
$ nano buku pedoman/templat/indeks.jinja2
Selanjutnya, tambahkan baris berikut di indeks.jinja2 berkas templat:
Semua yang Anda lihat di sini sama seperti pada contoh sebelumnya. Satu-satunya perbedaan adalah saya mencetak properti objek nama (menggunakan Tidak bisa.nama) dan tautan (menggunakan Tidak bisa.tautan) di my indeks.jinja2 Template Jinja2.
Akhirnya, indeks.jinja2 file template akan terlihat seperti yang ditunjukkan pada gambar di bawah.
Setelah Anda mengedit file, simpan file dengan menekan
Sekarang, jalankan buku pedoman copy_file_template1.yaml sebagai berikut:
$ playbook yang memungkinkan-playbook/copy_file_template1.yaml
Seperti yang Anda lihat, Jinja2 untuk loop menghasilkan bilah navigasi HTML (di indeks.html file) dari array objek.
Apa berikutnya?
Dalam artikel ini, saya telah menunjukkan kepada Anda cara menggunakan Ansible templat modul dan menjelaskan beberapa dasar-dasar bahasa templating Jinja2. Kunjungi situs web resmi Jinja2 untuk mempelajari lebih lanjut tentang bahasa templating Jinja2.