Artikel ini akan menunjukkan kepada anda cara menggunakan Ansible templat modul dan beberapa asas bahasa templat Jinja2. Oleh itu, mari kita mulakan!
Prasyarat
Sekiranya anda ingin mencuba contoh dalam artikel ini:
1) Anda mesti memasang Ansible di komputer anda.
2) Anda mesti mempunyai sekurang-kurangnya host Ubuntu / Debian atau host CentOS / RHEL 8 yang dikonfigurasi untuk automasi Ansible.
Terdapat banyak artikel mengenai LinuxHint yang dikhaskan untuk Memasang Ansible dan mengkonfigurasi host untuk automasi Ansible. Anda juga boleh melihatnya sekiranya diperlukan.
Menyiapkan Direktori Projek Ansible
Sebelum kita melangkah lebih jauh, adalah idea yang baik untuk membuat struktur direktori projek, hanya untuk memastikan sesuatu tetap teratur.
Untuk membuat direktori projek templat-demo / dan semua subdirektori yang diperlukan (dalam direktori kerja semasa anda), jalankan arahan berikut:
$ mkdir -pv template-demo / playbooks / templat
Setelah direktori projek dibuat, arahkan ke direktori projek, seperti berikut:
templat-demo $ cd /
Buat a tuan rumah fail inventori, seperti berikut:
hos $ nano
Kemudian, tambahkan nama IP atau DNS host anda (vm1.angguk.com dan vm2.angguk.com) dalam fail inventori.
Setelah anda selesai dengan langkah ini, simpan fail dengan menekan
Buat fail konfigurasi Ansible dalam direktori projek, seperti berikut:
$ nano tidak boleh dimakan.cfg
Kemudian, taipkan baris berikut di tidak boleh dimakan.cfg fail.
Setelah menyelesaikan langkah ini, simpan fail dengan menekan
Pada ketika ini, direktori projek akan kelihatan seperti berikut:
pokok $
Seperti yang anda lihat, hos Ansible juga dapat diakses. Oleh itu, kita boleh beralih ke bahagian seterusnya dari artikel ini.
$ ansible all -u ansible -m ping
Asas Modul Templat Ansible
The templat modul Ansible menerima pilihan yang sama seperti salinan modul Ansible.
Orang biasa templat pilihan modul:
src - Laluan fail templat Jinja2 di komputer anda, yang akan dihuraikan oleh bahasa templat Jinja2 dan disalin ke host jauh.
dest - Laluan tujuan pada hos terpencil yang failnya akan disalin.
pemilik - Pemilik fail di host jauh.
kumpulan - Kumpulan fail pada hos jauh.
mod - Mod kebenaran fail pada hos jauh.
Mari kita lihat contohnya.
Pertama, buat buku main Ansible baru copy_file_template1.keladi di dalam buku permainan / direktori, seperti berikut:
Buku main $ nano / copy_file_template1.keladi
Kemudian, taipkan baris berikut di copy_file_template1.keladi buku permainan.
- tuan rumah: semuapengguna: tidak boleh dimakan
tugas:
- nama: Salin indeks.fail html ke pelayan
templat:
src: indeks.jinja2
dest: / home / ansible / index.html
pemilik: tidak boleh dimakan
kumpulan: tidak boleh dimakan
mod: 0644
Buku main ini akan menyalin indeks.jinja2 fail dari buku permainan / templat / direktori (relatif dengan direktori projek anda) ke host jauh menggunakan Ansible templat modul.
Setelah anda selesai dengan langkah ini, simpan fail dengan menekan
Buat indeks.jinja2 fail templat di buku / templat direktori, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Taipkan baris berikut di indeks.jinja2 fail templat:
Selamat datang ke Linuxhint!
Ini hanyalah fail HTML biasa. Saya tidak menggunakan sintaks Jinja2 mewah di sini.
Setelah anda selesai dengan langkah ini, simpan fail dengan menekan
Jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Buku permainan harus berjalan dengan jayanya.
Seperti yang anda lihat, indeks.jinja2 templat diberikan menggunakan bahasa templat Jinja2. Kandungan yang diberikan harus disalin ke indeks.html fail host jauh.
Mencetak Pemboleh ubah dalam Templat Jinja2
Anda boleh menggunakan fakta, pemboleh ubah, dan pemboleh ubah yang ditentukan pengguna dalam templat Jinja2 anda.
Pada templat Jinja2 anda, anda boleh mencetak nilai pemboleh ubah menggunakan variabelName sintaksis. Sekiranya pemboleh ubah adalah objek, anda boleh mencetak sifat objek individu menggunakan objekBoleh ubah.namaNama sintaksis.
Dalam contoh berikut, kami akan mencetak Tarikh harta tanah ansible_date_time objek di kami indeks.jinja2 templat.
$ ansible all -u ansible -m setup | egrep - warna 'tarikh | masa'
Pertama, buka indeks.jinja2 fail templat dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Tambahkan baris berikut ke indeks.jinja2 fail templat:
Halaman dihasilkan pada ansible_date_time.Tarikh
Yang terakhir indeks.jinja2 fail akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah anda selesai dengan langkah ini, simpan fail dengan menekan
Jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, indeks.jinja2 templat diproses oleh bahasa templat Jinja2 dan menggantikan ansible_date_time.Tarikh pemboleh ubah dengan tarikh di YYYY-MM-DD format. Hasilnya kemudian disalin ke indeks.html fail pada hos jauh.
Bersyarat jika Pernyataan dalam Templat Jinja2
Bahasa templat Jinja2 menyokong bersyarat sekiranya penyataan. Anda boleh memeriksa pemboleh ubah tertentu sebelum mencetak apa-apa menggunakan sekiranya penyataan.
Jinja2 sekiranya sintaks adalah seperti berikut:
% jika keadaan%Lakukan sesuatu sekiranya syaratnya benar
% endif%
Mari kita lihat contoh Jinja2 sekiranya penyataan.
Pada bahagian ini, saya akan menunjukkan Jinja2 sekiranya penyataan menggunakan ansible_distribusi pemboleh ubah fakta.
$ ansible all -u ansible -m setup | egrep - warna 'dist'
Pertama, buka indeks.jinja2 Templat Jinja2 dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Seterusnya, tambahkan baris berikut di indeks.jinja2 fail templat:
% if ansible_distribution == "Debian"%Anda menjalankan Debian Linux
% endif%
Di sini, saya telah memeriksa sama ada ansible_distribusi adalah Debian. Sekiranya ada, maka cetak rentetan itu Anda menjalankan Debian Linux
Akhirnya, indeks.jinja2 fail templat akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Sekarang, jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, pada hos jauh Debian saya, indeks.html fail mempunyai garis Anda menjalankan Debian Linux
Bersyarat: Pernyataan if-else dalam Templat Jinja2
Bahasa templat Jinja2 menyokong bersyarat jika tidak penyataan. Anda boleh mencetak satu perkara jika keadaan sesuai dan mencetak sesuatu yang lain jika tidak menggunakan jika tidak penyataan.
Jinja2 jika tidak sintaks adalah seperti berikut:
% jika keadaan%Lakukan sesuatu sekiranya syaratnya benar
% yang lain%
Lakukan sesuatu sekiranya keadaannya salah
% endif%
Mari kita lihat contoh Jinja2 jika tidak penyataan.
Pertama, buka indeks.jinja2 Templat Jinja2 dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Seterusnya, tambahkan baris berikut di indeks.jinja2 fail templat:
% if ansible_distribution == "Debian"%Anda menjalankan Debian Linux
% yang lain%
Anda tidak menjalankan Debian Linux
% endif%
Di sini, saya telah memeriksa sama ada ansible_distribusi adalah Debian. Sekiranya ada, maka cetak rentetan itu Anda menjalankan Debian Linux Anda tidak menjalankan Debian Linux
Akhirnya, indeks.jinja2 fail templat akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, pada hos jauh Debian saya, indeks.html fail mempunyai garis Anda menjalankan Debian Linux Anda tidak menjalankan Debian Linux
Bersyarat: Pernyataan if-elif dalam Templat Jinja2
Bahasa templat Jinja2 menyokong bersyarat sekiranya-elif penyataan.
Jinja2 sekiranya-elif sintaks adalah seperti berikut:
% jika syarat1%Lakukan sesuatu sekiranya syarat1 itu benar
% keadaan elif2%
Lakukan sesuatu sekiranya syarat2 itu benar
% keadaan elif3%
Lakukan sesuatu sekiranya syarat3 itu benar
…
% keadaan elifN%
Lakukan sesuatu sekiranya syaratN itu benar
% yang lain%
Lakukan sesuatu sekiranya tiada syarat yang berlaku
% endif%
Di sini, % yang lain% bahagian adalah pilihan, tetapi ia ada jika anda memerlukannya.
Mari kita lihat contoh Jinja2 sekiranya-elif penyataan.
Pertama, buka indeks.jinja2 Templat Jinja2 dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Seterusnya, tambahkan baris berikut di indeks.jinja2 fail templat:
% if ansible_distribution == "Debian"%Anda menjalankan Debian Linux
% elif ansible_distribution == "CentOS"%
Anda menjalankan CentOS Linux
% yang lain%
Sistem Operasi anda tidak disokong
% endif%
Di sini, saya telah memeriksa sama ada ansible_distribusi adalah Debian. Sekiranya ada, maka cetak rentetan itu Anda menjalankan Debian Linux
Saya juga telah memeriksa sama ada ansible_distribusi adalah CentOS. Sekiranya ada, maka cetak rentetan itu Anda menjalankan CentOS Linux
Jika tidak, cetak Sistem Operasi anda tidak disokong
Akhirnya, indeks.jinja2 fail templat akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, pada hos jauh Debian saya, indeks.html fail mempunyai garis Anda menjalankan Debian Linux
Pada hos jauh CentOS saya, indeks.html fail mempunyai garis Anda menjalankan CentOS Linux
Sekiranya saya mempunyai hos jauh lain yang menjalankan OS selain Debian atau CentOS, ia pasti ada Sistem Operasi anda tidak disokong
Jadi, Jinja2 sekiranya-elif keadaan sedang berfungsi.
Gelung dalam Templat Jinja2
Anda juga boleh mencetak tatasusunan dan objek menggunakan gelung di Jinja2.
Jinja2 untuk sintaks gelung adalah seperti berikut:
Lakukan sesuatu dengan nama berubah-ubah
% endfor%
Di sini, dalam setiap lelaran larik Nama array, salah satu elemen larik (bermula dari awal tatasusunan) diberikan kepada PembolehubahNama pemboleh ubah. Anda boleh melakukan sesuatu dengan pemboleh ubah ini di dalam gelung.
Mari kita lihat bagaimana anda boleh mencetak elemen array dalam templat Jinja2 anda dalam contoh berikut.
Pertama, buka copy_file_template1.keladi Buku permainan yang boleh dibaca dengan penyunting teks nano, seperti berikut:
Buku main $ nano / copy_file_template1.keladi
Seterusnya, tambahkan baris berikut di copy_file_template1.keladi fail buku main:
vars:menu:
- Rumah
- Produk
- Tentang kita
- Hubungi Kami
Di sini, saya telah menambah a menu susunan di copy_file_template1.keladi buku permainan. Seterusnya, saya akan mencetak elemen array menggunakan gelung di saya indeks.jinja2 Fail templat Jinja2.
Akhirnya, copy_file_template1.keladi fail buku main harus kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Sekarang, buka indeks.jinja2 Templat Jinja2 dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Tambahkan baris berikut di indeks.jinja2 fail templat:
Di sini, saya menghasilkan bar navigasi HTML ringkas menggunakan Jinja2 untuk gelung. Gelung berulang melalui menu array (yang telah saya tentukan dalam copy_file_template1.buku permainan yaml) unsur dan menghasilkan a menu item dalam setiap lelaran.
Akhirnya, indeks.jinja2 fail templat akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, Jinja2 untuk gelung menghasilkan bar navigasi HTML (di indeks.html fail).
Anda juga dapat mengakses pelbagai objek dalam templat Jinja2 anda.
Mari kita lihat contoh lain.
Pertama, buka copy_file_template1.keladi Buku permainan yang boleh dibaca dengan penyunting teks nano, seperti berikut:
Buku main $ nano / copy_file_template1.keladi
Seterusnya, tambahkan baris berikut di copy_file_template1.keladi fail buku main:
vars:menu:
- nama: Rumah
pautan: / rumah
- nama: Produk
pautan: / produk
- nama: Mengenai Kami
pautan: / mengenai-kita
- nama: Hubungi Kami
pautan: / hubungi-kami
Di sini, saya telah menambah a menu susunan objek di copy_file_template1.keladi buku permainan. Setiap objek ini mempunyai dua sifat, a nama harta benda dan a pautan harta benda.
Akhirnya, copy_file_template1.keladi fail buku main harus kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Buka indeks.jinja2 Templat Jinja2 dengan penyunting teks nano, seperti berikut:
Buku / templat / indeks $ nano.jinja2
Seterusnya, tambahkan baris berikut di indeks.jinja2 fail templat:
Semua yang anda lihat di sini sama seperti contoh sebelumnya. Satu-satunya perbezaan ialah saya mencetak sifat objek nama (menggunakan menu.nama) dan pautan (menggunakan menu.pautan) di saya indeks.jinja2 Templat Jinja2.
Akhirnya, indeks.jinja2 fail templat akan kelihatan seperti yang ditunjukkan dalam tangkapan skrin di bawah.
Setelah mengedit fail, simpan fail dengan menekan
Sekarang, jalankan buku main copy_file_template1.keladi seperti berikut:
buku permainan $ ansible-playbook / copy_file_template1.keladi
Seperti yang anda lihat, Jinja2 untuk gelung menghasilkan bar navigasi HTML (di indeks.html fail) dari pelbagai objek.
Apa yang akan datang?
Dalam artikel ini, saya telah menunjukkan cara menggunakan Ansible templat modul dan menerangkan beberapa asas bahasa templat Jinja2. Lawati laman web rasmi Jinja2 untuk mengetahui lebih lanjut mengenai bahasa templat Jinja2.