Kā izveidot veidnes, lai varētu izveidot konfigurācijas pārvaldītajos mezglos - 7. daļa


Šajā Ansible Series 7. daļā jūs uzzināsiet, kā izveidot un izmantot veidnes Ansible, lai izveidotu pielāgotas konfigurācijas pārvaldītajos mezglos. Veidņu veidošana pakalpojumā Ansible ir vienkāršs un draudzīgs veids, kā pielāgotās konfigurācijas virzīt uz pārvaldītajiem mezgliem, kuros darbojas dažādas sistēmas, minimāli rediģējot atskaņošanas grāmatas failus.

Lai labāk izprastu, kas ir veidne, ņemsim vērā IT menedžeri, kas sastāda e-pastu, lai uzaicinātu savu nodaļu uz kokteiļu ballīti. E-pasts tiek nosūtīts katram no dalībniekiem, kā arī aicina viņus atzīmēt kopā ar dzīvesbiedriem.

E-pasts ir pielāgots tā, ka e-pasta pamatteksts paliek nemainīgs, taču adresāti un viņu laulāto vārdi atšķiras. E-pasts kļūst par veidni, savukārt saņēmēji un attiecīgie laulātie ir mainīgie.

Tas bija vispārējs piemērs. Ansible izmanto Jinja2, kas ir moderns veidošanas dzinējs Python ietvariem, ko izmanto, lai radītu dinamisku saturu vai izteicienus. Veidošana ir ārkārtīgi noderīga, veidojot pielāgotus konfigurācijas failus vairākiem serveriem, bet katram no tiem unikāla.

Jinja2 izmanto dubultās cirtainās iekavas {{...}} , lai pievienotu definēto mainīgo. Komentāriem izmantojiet {{# #} un nosacījuma paziņojumiem - {%…%} .

Pieņemsim, ka jūsu tīklā ir VLAN datu modelis ar mitināšanas sistēmām, kuras vēlaties virzīt uz attiecīgajiem VLAN, kā parādīts attēlā.

vlans:
  - id: 10
    name: LB
  - id: 20
    name: WB_01
  - id: 30
    name: WB_02
  - id: 40
    name: DB

Lai padarītu šo konfigurāciju, parādīsies atbilstošā jinja2 veidne ar nosaukumu vlans.j2, kā parādīts. Kā redzat, mainīgie vlan.id un vlan.name ir iekļauti cirtaini iekavās.

vlan {{ vlan.id }}
  name {{ vlan.name }}

Saliekot to visu kopā ar spēļu grāmatu, kurā ievietotas dažādas resursdatora mašīnas, tas parādīsies, kā parādīts:

    - hosts
  tasks:
    - name: Rendering VLAN configuration
      template:
         src: vlans.j2
         dest: "vlan_configs/{{ inventory_hostname }}.conf"

1. piemērs: Tīmekļa serveru konfigurēšana dažādos apgabalos

Šajā piemērā mēs izveidosim index.html failus, kas parādīs informāciju par resursdatora nosaukumu un OS tīmekļa serveriem, kuros darbojas CentOS un Ubuntu.

Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 -  IP address: 173.82.115.165

Apache tīmekļa serveris jau ir instalēts abos serveros.

Tāpēc izveidosim playbook test_server.yml, kā parādīts:

---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777

Mūsu Jinja faila veidne ir index.html.j2, kas tiks virzīta uz index.html failu katrā tīmekļa serverī. Vienmēr atcerieties beigās ievietot paplašinājumu .j2 , lai norādītu, ka tas ir jinja2 fails.

Tagad izveidosim veidnes failu 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>

Šī veidne ir pamata HTML fails, kurā ansible_hostname un ansible_os_family ir iebūvēti mainīgie, kas pārlūkprogrammā tiks aizstāti ar attiecīgajiem atsevišķu tīmekļa serveru resursdatora nosaukumiem un operētājsistēmām.

Tagad palaidīsim lugu grāmatu.

# ansible-playbook test_server.yml

Tagad pārlādēsim gan CentOS 7, gan Ubuntu tīmekļa serveru tīmekļa lapas.

Kā redzat, katrā serverī ir parādīta atšķirīga informācija par OS resursdatora nosaukumu un saimi. Un tas ir cik foršs Jinja2 veidne!

FILTRI:

Dažreiz jūs varat izlemt aizstāt mainīgā vērtību ar virkni, kas parādās noteiktā veidā.

Piemēram, iepriekšējā piemērā mēs varam izlemt, vai mainīgie lielumi parādīsies lielajā burtā. Lai to izdarītu, mainīgajam pievienojiet vērtības augšējo vērtību. Tādā veidā mainīgā vērtība tiek konvertēta lielo burtu formātā.

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT

Līdzīgi varat pārveidot virknes izvadi uz mazajiem burtiem, pievienojot mazāko argumentu.

{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat

Virkni var aizstāt ar citu.

Piemēram:

Filmas nosaukums ir {{movie_name}} => Filmas nosaukums ir Ring.

Lai aizstātu izvadi ar citu virkni, izmantojiet aizstāt argumentu, kā parādīts:

Filmas nosaukums ir {{movie_name | aizstāt (“Ring”, ”Heist”)} => Filmas nosaukums ir Heist.

Lai izgūtu mazāko masīva vērtību, izmantojiet filtru min.

{{ [ 2, 3, 4, 5, 6, 7 ] | min }}	=>	2

Līdzīgi, lai iegūtu vislielāko skaitu, izmantojiet maksimālo filtru.

{{ [ 2, 3, 4, 5, 6, 7 ] | max }}	=>	7

Lai parādītu unikālas vērtības, izmantojiet unikālo filtru.

{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} =>	2, 3

Izmantojiet izlases filtru, lai iegūtu nejaušu skaitli starp 0 un vērtību.

{{ 50 | random }} =>  Some random number

CILPES:

Tāpat kā programmēšanas valodās, mums ir cilpas arī Ansible Jinja2.

Piemēram, lai izveidotu failu, kurā ir numuru saraksts, izmantojiet for ciklu, kā parādīts zemāk esošajā piemērā:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{{ number }}
{% end for %}

Varat arī apvienot for ciklu ar if-else paziņojumiem, lai filtrētu un iegūtu noteiktas vērtības.

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{% if number == 5 %}
         {{ number }}
{% endif%}
{% endfor %}

Un tas ir par šo lekciju. Pievienojieties mums nākamajā tēmā, kur mēs mēģināsim strādāt ar mainīgiem mainīgajiem un faktiem.