Kaip sukurti šablonus valdomuose mazguose „Ansible to Create Configurations“ – 7 dalis


Šioje „Ansible“ serijos 7 dalyje sužinosite, kaip „Ansible“ kurti ir naudoti šablonus, kad sukurtumėte tinkintas konfigūracijas valdomuose mazguose. „Ansible“ šablonų kūrimas yra paprastas ir patogus būdas perkelti pasirinktines konfigūracijas į valdomus mazgus, kuriuose veikia skirtingos sistemos, minimaliai redaguojant žaidimo knygos failus.

Kas yra šablonas Ansible?

Kad geriau suprastume, kas yra šablonas, pasvarstykime, kaip IT vadovas parengia el. laišką, kuriuo pakviestų savo skyrių į kokteilių vakarėlį. El. laiškas siunčiamas kiekvienam nariui, taip pat kviečiamas pažymėti kartu su savo sutuoktiniais.

El. laiškas buvo pritaikytas taip, kad el. laiško turinys liktų toks pat, tačiau adresatai ir atitinkamų sutuoktinių vardai skiriasi. El. laiškas tampa šablonu, o gavėjai ir atitinkami sutuoktiniai yra kintamieji.

Tai buvo bendras pavyzdys. Ansible naudoja Jinja2, kuris yra modernus Python sistemoms skirtas šablonų variklis, naudojamas dinaminiam turiniui ar išraiškoms generuoti. Šablonas yra labai naudingas kuriant pasirinktinius konfigūracijos failus keliems serveriams, tačiau kiekvienam iš jų yra unikalus.

Jinja2 naudoja dvigubus riestinius skliaustus {{ ... }}, kad įtrauktų apibrėžtą kintamąjį. Komentarams naudokite {{# #}, o sąlyginiams teiginiams naudokite {% … %}.

Tarkime, kad tinkle turite VLAN duomenų modelį su prieglobos sistemomis, kurias norite perkelti į atitinkamus VLAN, kaip parodyta.

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

Norint pateikti šią konfigūraciją, bus rodomas atitinkamas jinja2 šablonas, vadinamas vlans.j2, kaip parodyta. Kaip matote, kintamieji vlan.id ir vlan.name buvo įtraukti į riestinius skliaustus.

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

Sudėjus visa tai į žaidimų knygą, kurioje pateikiami skirtingi pagrindiniai įrenginiai, tai atrodytų taip, kaip parodyta:

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

1 pavyzdys: žiniatinklio serverių konfigūravimas skirtinguose platinimuose

Šiame pavyzdyje sukursime index.html failus, kuriuose bus pateikta informacija apie 2 žiniatinklio serverių, kuriuose veikia CentOS ir Ubuntu prieglobos serverio pavadinimą ir OS .

Sąranka

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

Apache žiniatinklio serveris jau buvo įdiegtas abiejuose serveriuose.

„CentOS 7“.

Ubuntu 18.04

Taigi sukurkime žaidimų knygą test_server.yml, kaip parodyta:

---

 - hosts: all
   become: yes

   tasks:

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

Mūsų Jinja failo šablonas yra index.html.j2, kuris bus perkeltas į index.html failą kiekviename žiniatinklio serveryje. Visada nepamirškite pabaigoje įdėti plėtinio .j2, kad tai reikštų, kad tai Jinja2 failas.

Dabar sukurkime šablono failą 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>

Šis šablonas yra pagrindinis HTML failas, kuriame ansible_hostname ir ansible_os_family yra integruoti kintamieji, kurie bus pakeisti atitinkamais prieglobos pavadinimais ir atskirų naršyklės žiniatinklio serverių operacinėmis sistemomis.

Dabar paleiskite žaidimų knygą.

ansible-playbook test_server.yml

Dabar iš naujo įkelkime tinklalapius ir CentOS 7, ir Ubuntu žiniatinklio serveriams.

„CentOS 7“.

Ubuntu 18.04

Kaip matote, kiekviename serveryje buvo rodoma skirtinga informacija apie pagrindinio kompiuterio pavadinimą ir OS šeimą. Štai koks šaunus yra Jinja2 šablonas!

FILTRAI:

Kartais galite nuspręsti pakeisti kintamojo reikšmę eilute, kuri pasirodo tam tikru būdu.

1 pavyzdys: eilutes rodykite didžiosiomis arba mažosiomis raidėmis

Pavyzdžiui, ankstesniame pavyzdyje galime nuspręsti, kad Ansible kintamieji būtų rodomi didžiosiomis raidėmis. Norėdami tai padaryti, prie kintamojo pridėkite reikšmę. Tokiu būdu kintamojo reikšmė konvertuojama į didžiųjų raidžių formatą.

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

Panašiai galite konvertuoti eilutės išvestį į mažąsias raides, pridėdami apatinį argumentą.

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

2 pavyzdys: pakeiskite eilutę kita

Be to, eilutę galite pakeisti kita.

Pavyzdžiui:

Filmo pavadinimas yra {{ movie_name }} => Filmo pavadinimas yra Ring.

Norėdami pakeisti išvestį kita eilute, naudokite pakeitimo argumentą, kaip parodyta:

Filmo pavadinimas yra {{ filmo_pavadinimas | pakeisti („Ring“, „Heist“) }} => Filmo pavadinimas yra Heist.

3 pavyzdys: Sąrašai ir rinkiniai filtrai

Norėdami gauti mažiausią masyvo reikšmę, naudokite filtrą min.

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

Panašiai, norėdami gauti didžiausią skaičių, naudokite filtrą maks..

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

Jei norite rodyti unikalias vertes, naudokite unikalią filtrą.

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

Naudokite atsitiktinio filtrą, kad gautumėte atsitiktinį skaičių nuo 0 iki vertės.

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

KILPAS :

Kaip ir programavimo kalbose, Ansible Jinja2 turime kilpas.

Pavyzdžiui, norėdami sugeneruoti failą su skaičių sąrašu, naudokite ciklą, kaip parodyta toliau pateiktame pavyzdyje:

1 pavyzdys:

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

Taip pat galite sujungti for kilpą su if-else teiginiais, kad filtruotumėte ir gautumėte tam tikras vertes.

2 pavyzdys:

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

Ir viskas šiai paskaitai. Prisijunkite prie mūsų kitoje temoje, kurioje išdrįsime dirbti su galimais kintamaisiais ir faktais.