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.