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
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.