Kif Toħloq Mudelli f'Ansible biex Oħloq Konfigurazzjonijiet Fuq Nodi Immaniġġjati - Parti 7


F'din il-Parti 7 tas-Serje Ansible, titgħallem kif toħloq u tuża mudelli f'Ansible biex toħloq konfigurazzjonijiet personalizzati fuq nodi ġestiti. It-templating f'Ansible huwa mod faċli u faċli biex timbotta konfigurazzjonijiet personalizzati għal nodi ġestiti li jmexxu sistemi differenti b'editjar minimu ta' fajls tal-playbook.

Biex tikseb sens aħjar ta 'x'inhu mudell, ejja nikkunsidraw maniġer tal-IT li jabbozza email biex jistieden lid-dipartiment tiegħu għal cocktail party. L-email tintbagħat lil kull wieħed mill-membri u tistiednhom ukoll biex jimmarkaw mal-konjuġi tagħhom.

L-email ġiet personalizzata b'tali mod li l-korp tal-email jibqa' l-istess, iżda d-destinatarji u l-ismijiet tal-konjuġi rispettivi tagħhom ivarjaw. L-email issir il-mudell, filwaqt li r-riċevituri u l-konjuġi rispettivi huma varjabbli.

Dak kien eżempju ġeneriku. Ansible juża Jinja2 li hija magna moderna ta 'templating għal oqfsa Python użata biex tiġġenera kontenut jew espressjonijiet dinamiċi. It-templating huwa estremament utli meta jinħolqu fajls ta 'konfigurazzjoni tad-dwana għal servers multipli iżda uniku għal kull wieħed minnhom.

Jinja2 juża ċ-ċingi kaboċċi doppji {{ ... }} biex jehmżu varjabbli li ġiet definita. Għal kummenti, uża {{# #} u għal dikjarazzjonijiet kundizzjonali uża {% … %}.

Ejja nassumu li għandek mudell tad-dejta ta 'VLANs fin-netwerk tiegħek b'sistemi ospitanti li trid timbotta lejn il-VLANs rispettivi tagħhom kif muri.

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

Biex tirrendi din il-konfigurazzjoni, il-mudell jinja2 korrispondenti msejjaħ vlans.j2 jidher kif muri. Kif tistgħu taraw, il-varjabbli vlan.id u vlan.name ġew magħluqa fi ċineg kaboċċi.

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

Meta tpoġġi dan kollu flimkien fi playbook li jpoġġi magni ospitanti differenti, dan jidher kif muri:

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

Eżempju 1: Konfigurazzjoni ta' Web Servers f'Distros Differenti

F'dan l-eżempju, se noħolqu fajls index.html li juru informazzjoni dwar l-isem tal-host u l-OS ta' 2 servers tal-web li jħaddmu CentOS u Ubuntu.

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

Apache webserver diġà ġie installat fuq iż-żewġ servers.

Mela ejja noħolqu playbook test_server.yml kif muri:

---

 - hosts: all
   become: yes

   tasks:

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

Il-mudell tal-fajl Jinja tagħna huwa index.html.j2 li se jiġi mbuttat lejn il-fajl index.html fuq kull webserver. Dejjem ftakar li tpoġġi l-estensjoni .j2 fl-aħħar biex tindika li huwa fajl jinja2.

Ejja issa noħolqu l-fajl tal-mudell 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>

Dan il-mudell huwa fajl HTML bażiku fejn ansible_hostname u ansible_os_family huma varjabbli inkorporati li se jiġu sostitwiti bl-hostnames rispettivi u s-sistemi operattivi tal-webservers individwali fuq il-browser.

Issa, Ejja nmexxu l-playbook.

# ansible-playbook test_server.yml

Issa ejja nerġgħu tagħbija l-paġni tal-web kemm għas-servers tal-web CentOS 7 kif ukoll għal Ubuntu.

Kif tistgħu taraw, informazzjoni differenti dwar l-isem tal-host u l-familja tal-OS ġiet murija fuq kull server. U hekk hu jibred it-templating Jinja2!

FILTRI:

Xi drabi, tista 'tiddeċiedi li tissostitwixxi l-valur ta' varjabbli b'sekwenza li tidher b'ċertu mod.

Pereżempju, fl-eżempju ta 'qabel, nistgħu niddeċiedu li l-varjabbli Ansible jidhru f'Majuskulari. Biex tagħmel dan, waħħal il-valur ta' fuq mal-varjabbli. B'dan il-mod il-valur fil-varjabbli jiġi kkonvertit f'format Uppercase.

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

Bl-istess mod, tista 'tikkonverti l-output tas-sekwenza f'ittri żgħar billi tehmeż l-argument t'isfel.

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

Barra minn hekk, tista 'tissostitwixxi string ma' ieħor.

Pereżempju:

It-titlu tal-film huwa {{ movie_name }} > It-titlu tal-film huwa Ring.

Biex tissostitwixxi l-output b'sekwenza oħra, uża l-argument ta' sostituzzjoni kif muri:

It-titlu tal-film huwa {{ movie_name | ibdel (Ring\,Heist) }} > It-titlu tal-film huwa Heist.

Biex tirkupra l-iżgħar valur f'firxa, uża l-filtru min.

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

Bl-istess mod, biex tirkupra l-akbar numru, uża l-filtru max.

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

Biex turi valuri uniċi, uża l-filtru uniku.

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

Uża l-filtru każwali biex tikseb numru każwali bejn 0 u l-valur.

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

LOOPS:

Eżatt bħal fil-lingwi ta 'programmar, għandna loops f'Ansible Jinja2.

Pereżempju, biex tiġġenera fajl li jkun fih lista ta' numri uża l-for loop kif muri fl-eżempju hawn taħt:

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

Tista 'wkoll tgħaqqad il-linja for ma' dikjarazzjonijiet if-else biex tiffiltra u tikseb ċerti valuri.

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

U hekk għal din il-lecture. Ingħaqad magħna fis-suġġett li jmiss fejn ser niventure biex naħdmu ma 'varjabbli u fatti ansible.