Sablonok létrehozása az Ansible to Create Configurations On Managed Node alkalmazásban – 7. rész
Az Ansible sorozat e 7. részében megtudhatja, hogyan lehet sablonokat létrehozni és használni az Ansible alkalmazásban testreszabott konfigurációk létrehozásához a felügyelt csomópontokon. A sablonok létrehozása az Ansible-ben egy egyszerű és barátságos módja annak, hogy az egyéni konfigurációkat különböző rendszereket futtató felügyelt csomópontokba tolja el a játékkönyvfájlok minimális szerkesztésével.
Mi az a sablonozás az Ansible-ben?
Annak érdekében, hogy jobban megértsük, mi a sablon, vegyük fontolóra, hogy egy IT-vezető e-mailt készít, hogy meghívja osztályát egy koktélpartira. Az e-mailt minden tagnak elküldik, és felkérik őket, hogy házastársukkal együtt címkézzenek.
Az e-mailt úgy alakították ki, hogy az e-mail törzse változatlan marad, de a címzettek és házastársuk neve eltérő. Az e-mail lesz a sablon, míg a címzettek és a megfelelő házastársak változók.
Ez egy általános példa volt. Az Ansible a Jinja2-t használja, amely egy modern sablonozómotor a dinamikus tartalom vagy kifejezések generálására használt Python-keretrendszerekhez. A sablonok használata rendkívül hasznos egyéni konfigurációs fájlok létrehozásakor több szerverhez, de mindegyikhez egyedi.
A Jinja2 a {{ ... }}
dupla kapcsos kapcsos zárójeleket használja a definiált változók közé. Megjegyzésekhez használja a {{# #}
, feltételes utasításokhoz pedig a {% … %}
kódot.
Tételezzük fel, hogy van a hálózatában a VLAN-ok adatmodellje olyan gazdagéprendszerekkel, amelyeket a képen látható módon át szeretne küldeni a megfelelő VLAN-okba.
vlans:
- id: 10
name: LB
- id: 20
name: WB_01
- id: 30
name: WB_02
- id: 40
name: DB
Ennek a konfigurációnak a megjelenítéséhez a megfelelő jinja2 sablon, a vlans.j2 az ábra szerint jelenik meg. Amint láthatja, a vlan.id és a vlan.name változók kapcsos zárójelek közé vannak zárva.
vlan {{ vlan.id }}
name {{ vlan.name }}
Ha mindezt egy játékfüzetbe helyezzük, amely különböző gazdagépeket helyez el, a következőképpen fog megjelenni:
- hosts
tasks:
- name: Rendering VLAN configuration
template:
src: vlans.j2
dest: "vlan_configs/{{ inventory_hostname }}.conf"
1. példa: Webszerverek konfigurálása különböző disztribúciókban
Ebben a példában index.html fájlokat fogunk létrehozni, amelyek információkat jelenítenek meg a gazdanévről és a CentOS és Ubuntu webszerver operációs rendszeréről. .
Beállít
Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 - IP address: 173.82.115.165
Az Apache webszerver már telepítve van mindkét szerveren.
CentOS 7-hez
Ubuntu 18.04-hez
Tehát hozzunk létre egy játékkönyvet test_server.yml az ábra szerint:
---
- hosts: all
become: yes
tasks:
- name: Install index.html
template:
src: index.html.j2
dest: /var/www/html/index.html
mode: 0777
Jinja fájlsablonunk az index.html.j2, amely minden webszerveren az index.html fájlba kerül. Mindig ne felejtse el a végére tenni a .j2
kiterjesztést, jelezve, hogy ez egy jinja2 fájl.
Most hozzuk létre az index.html.j2 sablonfájlt.
<html>
<center>
<h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
<h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>
Ez a sablon egy alapvető HTML-fájl, amelyben az ansible_hostname és az ansible_os_family beépített változók, amelyeket a böngészőben az egyes webszerverek megfelelő gazdagépneveivel és operációs rendszereivel helyettesítenek.
Most pedig futtassuk a játékkönyvet.
ansible-playbook test_server.yml
Most töltsük be újra a weboldalakat a CentOS 7 és az Ubuntu webszerverekhez.
CentOS 7-hez
Ubuntu 18.04-hez
Amint láthatja, az egyes szervereken különböző információk jelennek meg a gazdagépnévvel és az operációs rendszer családjával kapcsolatban. És milyen klassz a Jinja2 sablon!
SZŰRŐK:
Néha dönthet úgy, hogy egy változó értékét egy bizonyos módon megjelenő karakterlánccal helyettesíti.
1. példa: A karakterláncok megjelenítése nagy-/kisbetűkkel
Például az előző példában eldönthetjük, hogy az Ansible változókat nagybetűvel jelenítsük meg. Ehhez adja hozzá az értéket a változóhoz. Így a változó értéke nagybetűs formátumra konvertálódik.
{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT
Hasonlóképpen konvertálhatja a karakterlánc kimenetét kisbetűssé az alsó argumentum hozzáfűzésével.
{{ ansible_hostname | lower }} => centos 7
{{ ansible_os_family | lower }} => redhat
2. példa: Cserélj ki egy karakterláncot másikra
Ezenkívül lecserélhet egy karakterláncot egy másikra.
Például:
A film címe: {{ movie_name }} =>
A film címe: Ring.
A kimenet másik karakterláncra való lecseréléséhez használja a csere argumentumot az alábbi módon:
A film címe: {{ movie_name | helyettesít ("Ring", "Heist ") }} =>
A film címe Heist.
3. példa: Listák és szűrők beállításai
Egy tömb legkisebb értékének lekéréséhez használja a min szűrőt.
{{ [ 2, 3, 4, 5, 6, 7 ] | min }} => 2
Hasonlóképpen a legnagyobb szám lekéréséhez használja a max szűrőt.
{{ [ 2, 3, 4, 5, 6, 7 ] | max }} => 7
Az egyedi értékek megjelenítéséhez használja az egyedi szűrőt.
{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} => 2, 3
Használja a véletlenszerű szűrőt, hogy véletlenszerű számot kapjon 0 és az érték között.
{{ 50 | random }} => Some random number
HURKOK:
Csakúgy, mint a programozási nyelvekben, az Ansible Jinja2ben is vannak hurkok.
Például számlistát tartalmazó fájl létrehozásához használja a for ciklust az alábbi példában látható módon:
1. példa:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{{ number }}
{% end for %}
A for ciklust az if-else utasításokkal is kombinálhatja bizonyos értékek szűréséhez és lekéréséhez.
2. példa:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{% if number == 5 %}
{{ number }}
{% endif%}
{% endfor %}
És ennyi az előadás. Csatlakozzon hozzánk a következő témában, ahol belevágunk a lehetséges változókkal és tényekkel való munkába.