Hvernig á að búa til sniðmát í Ansible til að búa til stillingar á stýrðum hnútum - Hluti 7


Í þessum hluta 7 af Ansible Series muntu læra hvernig á að búa til og nota sniðmát í Ansible til að búa til sérsniðnar stillingar á stýrðum hnútum. Sniðmát í Ansible er auðveld og vinaleg leið til að ýta sérsniðnum stillingum á stýrða hnúta sem keyra mismunandi kerfi með lágmarks klippingu á leikbókarskrám.

Til að fá betri tilfinningu fyrir því hvað sniðmát er, skulum við íhuga upplýsingatæknistjóra að semja tölvupóst til að bjóða deild sinni í kokteilboð. Tölvupósturinn er sendur á hvern félaga og þeim er einnig boðið að merkja með maka sínum.

Tölvupósturinn hefur verið sérsniðinn þannig að meginmál tölvupóstsins er sá sami, en viðtakendur og nöfn maka þeirra eru mismunandi. Tölvupósturinn verður sniðmátið en viðtakendur og makar eru breytur.

Þetta var almennt dæmi. Ansible notar Jinja2 sem er nútíma sniðmátsvél fyrir Python ramma sem notuð er til að búa til kraftmikið efni eða tjáningu. Sniðmát er afar gagnlegt þegar búið er til sérsniðnar stillingarskrár fyrir marga netþjóna en einstök fyrir hvern þeirra.

Jinja2 notar tvöföldu krullu axlaböndin {{ ... }} til að setja inn breytu sem hefur verið skilgreind. Fyrir athugasemdir, notaðu {{# #} og fyrir skilyrtar staðhæfingar notaðu {% … %}.

Gerum ráð fyrir að þú sért með gagnalíkan af VLAN á netinu þínu með hýsilkerfum sem þú vilt ýta á viðkomandi VLAN eins og sýnt er.

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

Til að gera þessa stillingu birtist samsvarandi jinja2 sniðmát sem kallast vlans.j2 eins og sýnt er. Eins og þú sérð hafa breyturnar vlan.id og vlan.name verið lokaðar með krulluðum axlaböndum.

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

Ef þetta er sett allt saman í leikbók sem setur mismunandi vélar, myndi þetta birtast eins og sýnt er:

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

Dæmi 1: Stilling vefþjóna í mismunandi dreifingum

Í þessu dæmi munum við búa til index.html skrár sem birta upplýsingar um hýsingarheitið og stýrikerfið á 2 vefþjónum sem keyra CentOS og Ubuntu.

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

Apache vefþjónn hefur þegar verið settur upp á báðum netþjónum.

Svo við skulum búa til leikbók test_server.yml eins og sýnt er:

---

 - hosts: all
   become: yes

   tasks:

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

Jinja skráarsniðmátið okkar er index.html.j2 sem verður ýtt í index.html skrána á hverjum vefþjóni. Mundu alltaf að setja viðbótina .j2 í lokin til að gefa til kynna að þetta sé jinja2 skrá.

Við skulum nú búa til sniðmátsskrána 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>

Þetta sniðmát er grunn HTML skrá þar sem ansible_hostname og ansible_os_family eru innbyggðar breytur sem skipt verður út fyrir viðkomandi hýsilnöfn og stýrikerfi einstakra vefþjóna í vafranum.

Nú skulum við keyra leikbókina.

# ansible-playbook test_server.yml

Nú skulum við endurhlaða vefsíðurnar fyrir bæði CentOS 7 og Ubuntu vefþjóna.

Eins og þú sérð hafa mismunandi upplýsingar um hýsingarheitið og fjölskyldu stýrikerfisins verið birtar á hverjum netþjóni. Og það er hversu flott Jinja2 sniðmát er!

SÍUR:

Stundum gætirðu ákveðið að skipta út gildi breytu fyrir streng sem birtist á ákveðinn hátt.

Til dæmis, í fyrra dæminu, getum við ákveðið að láta Ansible breyturnar birtast með hástöfum. Til að gera það skaltu bæta gildinu efri við breytuna. Þannig er gildinu í breytunni breytt í hástafi.

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

Á sama hátt geturðu breytt strengjaúttakinu í lágstafi með því að bæta við lægri röksemdinni.

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

Að auki geturðu skipt út streng fyrir annan.

Til dæmis:

Titill kvikmyndarinnar er {{ movie_name }} => Titill kvikmyndarinnar er Ring.

Til að skipta út úttakinu fyrir annan streng, notaðu skiptu rökin eins og sýnt er:

Titill kvikmyndarinnar er {{ movie_name | replace (\Ring\,,”Heist”) }} => Titill kvikmyndarinnar er Heist.

Til að sækja minnstu gildi í fylki, notaðu min síuna.

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

Á sama hátt, til að ná í stærsta fjöldann, notaðu hámarkssíuna.

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

Notaðu einstaka síu til að sýna einstök gildi.

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

Notaðu handahófssíuna til að fá slembitölu á milli 0 og gildisins.

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

LYKKUR:

Rétt eins og í forritunarmálum höfum við lykkjur í Ansible Jinja2.

Til dæmis, til að búa til skrá sem inniheldur lista yfir tölur, notaðu for lykkjuna eins og sýnt er í dæminu hér að neðan:

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

Þú getur líka sameinað for lykkjuna með if-else setningum til að sía og fá ákveðin gildi.

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

Og það er það fyrir þennan fyrirlestur. Taktu þátt í næsta efni þar sem við munum hætta okkur í að vinna með hugsanlegar breytur og staðreyndir.