Kuidas luua malle hallatavate sõlmede konfiguratsioonide loomiseks - 7. osa


Selles jaotises Ansible Series saate teada, kuidas jaotises Ansible malle luua ja kasutada, et luua hallatud sõlmedele kohandatud konfiguratsioone. Templating in Ansible on lihtne ja sõbralik viis kohandatud konfiguratsioonide edastamiseks hallatud sõlmedesse, mis töötavad erinevates süsteemides, minimaalselt redigeerides esitusraamatu faile.

Malli paremaks mõistmiseks kaalume IT-juhti, kes koostaks meilisõnumi, et kutsuda oma osakond kokteilipeole. E-kiri saadetakse igale liikmele ja samuti kutsutakse neid koos abikaasaga märgistama.

E-post on kohandatud nii, et e-kirja sisu jääb samaks, kuid adressaadid ja nende abikaasade nimed erinevad. E-post saab malliks, samas kui saajad ja vastavad abikaasad on muutujad.

See oli üldine näide. Ansible kasutab Jinja2, mis on Pythoni raamistike jaoks moodne mallimootor, mida kasutatakse dünaamilise sisu või avaldiste loomiseks. Mallimine on äärmiselt kasulik mitme serveri jaoks kohandatud konfiguratsioonifailide loomisel, kuid igaühe jaoks ainulaadne.

Jinja2 kasutab topelt lokkis traksid {{...}} määratletud muutuja lisamiseks. Kommentaaride jaoks kasutage {{# #} ja tingimuslausete puhul {%…%} .

Oletame, et teie võrgus on hostisüsteemidega VLAN-ide andmemudel, mille soovite vastavatele VLAN-idele edastada, nagu näidatud.

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

Selle konfiguratsiooni renderdamiseks ilmub vastav jinja2 mall nimega vlans.j2, nagu näidatud. Nagu näete, on muutujad vlan.id ja vlan.name suletud lokkisulgudesse.

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

Kui kõik see kokku panna mänguraamatusse, kuhu on paigutatud erinevad masinad, näib see olevat näidatud:

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

Näide 1: veebiserverite konfigureerimine erinevates distrodes

Selles näites loome failid index.html, mis kuvavad teavet kahe CentOSi ja Ubuntu käitava veebiserveri hosti nime ja operatsioonisüsteemi kohta.

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

Apache veebiserver on juba mõlemasse serverisse installitud.

Nii et looge mängukiri test_server.yml, nagu näidatud:

---

 - hosts: all
   become: yes

   tasks:

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

Meie Jinja failimall on index.html.j2, mis lükatakse igas veebiserveris faili index.html. Pidage alati meeles, et panete lõppu laiendi .j2 , et see tähistaks, et tegemist on jinja2-failiga.

Loome nüüd mallifaili 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>

See mall on HTML-i põhifail, kus ansible_hostname ja ansible_os_family on sisseehitatud muutujad, mis asendatakse brauseri üksikute veebiserverite vastavate hostinimede ja operatsioonisüsteemidega.

Nüüd käivitame mänguraamatu.

# ansible-playbook test_server.yml

Laadime nüüd nii CentOS 7 kui ka Ubuntu veebiserverite veebilehed uuesti.

Nagu näete, on igas serveris kuvatud erinev teave operatsioonisüsteemi hostinime ja perekonna kohta. Ja nii lahe on Jinja2 mallimine!

FILTRID:

Mõnikord võite otsustada asendada muutuja väärtus stringiga, mis ilmub teatud viisil.

Näiteks võime eelmises näites otsustada, et Ansible muutujad kuvatakse suurtähtedes. Selleks lisage muutujale väärtus ülemine. Nii teisendatakse muutuja väärtus suurtähtvormingusse.

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

Samamoodi saate stringi väljundi teisendada väikesteks, lisades väiksema argumendi.

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

Lisaks võite stringi asendada teisega.

Näiteks:

Filmi pealkiri on {{movie_name}} => Filmi pealkiri on Ring.

Väljundi asendamiseks mõne muu stringiga kasutage asendusargumenti nagu näidatud:

Filmi pealkiri on {{movie_name | asenda (“Ring”, ”Heist”)} => Filmi pealkiri on Heist.

Massiivi väikseima väärtuse saamiseks kasutage filtrit min.

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

Samamoodi kasutage suurima arvu hankimiseks filtrit max.

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

Unikaalsete väärtuste kuvamiseks kasutage unikaalset filtrit.

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

Juhusliku arvu saamiseks 0 ja väärtuse vahel kasutage juhuslikku filtrit.

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

LOOPSID:

Nii nagu programmeerimiskeeltes, on ka meil Ansible Jinja2-s silmuseid.

Näiteks numbriloendit sisaldava faili loomiseks kasutage for loopi, nagu on näidatud allpool toodud näites:

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

Teatud väärtuste filtreerimiseks ja saamiseks võite ka for loopi ühendada lausetega if-else.

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

Ja see on selle loengu jaoks kõik. Liituge meiega järgmises teemas, kus uurime muutuvate muutujate ja faktidega töötamist.