Kako stvoriti predloške u Ansibleu za stvaranje konfiguracija na upravljanim čvorovima - 7. dio
U ovom 7. dijelu serije Ansible naučit ćete kako izraditi i koristiti predloške u Ansibleu za stvaranje prilagođenih konfiguracija na upravljanim čvorovima. Templating u Ansibleu jednostavan je i prijateljski način guranja prilagođenih konfiguracija u upravljane čvorove koji pokreću različite sustave uz minimalno uređivanje datoteka playbook-a.
Što je šabloniranje u Ansibleu?
Da bismo bolje razumjeli što je predložak, zamislimo IT menadžera koji sastavlja e-poruku kojom poziva svoj odjel na koktel zabavu. E-poruka se šalje svakom od članova i također ih poziva da se označe zajedno sa svojim supružnicima.
E-pošta je prilagođena tako da tijelo e-pošte ostaje isto, ali se adresati i imena njihovih supružnika razlikuju. E-pošta postaje predložak, dok su primatelji i odgovarajući supružnici varijable.
To je bio generički primjer. Ansible koristi Jinja2 koji je moderan mehanizam za izradu predložaka za Python okvire koji se koriste za generiranje dinamičkog sadržaja ili izraza. Izrada predložaka je izuzetno korisna pri stvaranju prilagođenih konfiguracijskih datoteka za više poslužitelja, ali jedinstvenih za svakog od njih.
Jinja2 koristi dvostruke vitičaste zagrade {{ ... }}
za uključivanje varijable koja je definirana. Za komentare upotrijebite {{# #}
, a za uvjetne izjave upotrijebite {% … %}
.
Pretpostavimo da imate podatkovni model VLAN-ova u svojoj mreži sa sustavima domaćina koje želite gurnuti u njihove odgovarajuće VLAN-ove kao što je prikazano.
vlans:
- id: 10
name: LB
- id: 20
name: WB_01
- id: 30
name: WB_02
- id: 40
name: DB
Za prikaz ove konfiguracije pojavit će se odgovarajući predložak jinja2 pod nazivom vlans.j2 kao što je prikazano. Kao što vidite, varijable vlan.id i vlan.name stavljene su u vitičaste zagrade.
vlan {{ vlan.id }}
name {{ vlan.name }}
Stavljajući sve zajedno u priručnik koji postavlja različite host strojeve, ovo bi izgledalo kao što je prikazano:
- hosts
tasks:
- name: Rendering VLAN configuration
template:
src: vlans.j2
dest: "vlan_configs/{{ inventory_hostname }}.conf"
Primjer 1: Konfiguriranje web poslužitelja u različitim distribucijama
U ovom primjeru stvorit ćemo datoteke index.html koje će prikazivati informacije o nazivu glavnog računala i OS-u 2 web poslužitelja koji pokreću CentOS i Ubuntu .
Postaviti
Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 - IP address: 173.82.115.165
Apache web poslužitelj već je instaliran na oba poslužitelja.
Za CentOS 7
Za Ubuntu 18.04
Dakle, stvorimo priručnik test_server.yml kao što je prikazano:
---
- hosts: all
become: yes
tasks:
- name: Install index.html
template:
src: index.html.j2
dest: /var/www/html/index.html
mode: 0777
Naš Jinja predložak datoteke je index.html.j2 koji će biti proslijeđen u datoteku index.html na svakom web poslužitelju. Uvijek ne zaboravite staviti ekstenziju .j2
na kraj kako biste označili da je to jinja2 datoteka.
Kreirajmo sada datoteku predloška index.html.j2.
<html>
<center>
<h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
<h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>
Ovaj predložak je osnovna HTML datoteka u kojoj su ansible_hostname i ansible_os_family ugrađene varijable koje će biti zamijenjene odgovarajućim nazivima hostova i operativnim sustavima pojedinačnih web poslužitelja u pregledniku.
Sada, pokrenimo priručnik.
ansible-playbook test_server.yml
Sada ponovno učitajmo web stranice za CentOS 7 i Ubuntu web poslužitelje.
Za CentOS 7
Za Ubuntu 18.04
Kao što vidite, različite informacije o nazivu hosta i obitelji OS-a prikazane su na svakom poslužitelju. I tako je cool Jinja2 šabloniranje!
FILTERI:
Ponekad možete odlučiti zamijeniti vrijednost varijable nizom koji se pojavljuje na određeni način.
Primjer 1: Neka se nizovi prikazuju velikim/malim slovima
Na primjer, u prethodnom primjeru, možemo odlučiti da se Ansible varijable prikazuju velikim slovima. Da biste to učinili, dodajte gornju vrijednost varijabli. Na taj se način vrijednost u varijabli pretvara u format velikih slova.
{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT
Slično tome, možete pretvoriti izlaz niza u mala slova dodavanjem donjeg argumenta.
{{ ansible_hostname | lower }} => centos 7
{{ ansible_os_family | lower }} => redhat
Primjer 2: Zamijenite niz drugim
Osim toga, niz možete zamijeniti drugim.
Na primjer:
Naslov filma je {{ movie_name }} =>
Naslov filma je Prsten.
Za zamjenu izlaza drugim nizom, upotrijebite argument zamjene kao što je prikazano:
Naslov filma je {{ movie_name | zamijeni (“Ring“, ”Heist ”) }} =>
Naslov filma je Heist.
Primjer 3: Popisi i skupovi filtara
Da biste dohvatili najmanju vrijednost u nizu, upotrijebite filtar min.
{{ [ 2, 3, 4, 5, 6, 7 ] | min }} => 2
Slično, da biste dohvatili najveći broj, upotrijebite filtar max.
{{ [ 2, 3, 4, 5, 6, 7 ] | max }} => 7
Za prikaz jedinstvenih vrijednosti upotrijebite filtar jedinstveno.
{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} => 2, 3
Upotrijebite nasumični filtar za dobivanje nasumičnog broja između 0 i vrijednosti.
{{ 50 | random }} => Some random number
PETLJE:
Baš kao u programskim jezicima, imamo petlje u Ansible Jinja2.
Na primjer, za generiranje datoteke koja sadrži popis brojeva koristite petlju for kao što je prikazano u primjeru ispod:
Primjer 1:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{{ number }}
{% end for %}
Također možete kombinirati for petlju s if-else izjavama za filtriranje i dobivanje određenih vrijednosti.
Primjer 2:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{% if number == 5 %}
{{ number }}
{% endif%}
{% endfor %}
I to je to za ovo predavanje. Pridružite nam se u sljedećoj temi gdje ćemo se upustiti u rad s anzibilnim varijablama i činjenicama.