Weboldal keresés

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.