Mallien luominen Ansible to Create Configurations On Managed Nodes -sovelluksessa - Osa 7
Tässä Ansible-sarjan osassa 7 opit luomaan ja käyttämään malleja Ansiblessa räätälöityjen määritysten luomiseen hallituissa solmuissa. Mallineen luominen Ansiblessa on helppo ja ystävällinen tapa siirtää mukautettuja määrityksiä eri järjestelmiä käyttäviin hallittuihin solmuihin minimaalisella leikkikirjatiedostojen muokkauksella.
Mitä on mallinnus Ansiblessa?
Saadaksesi paremman käsityksen mallista, harkitsemme IT-päällikön laativan sähköpostin kutsuakseen osastonsa cocktailtilaisuuteen. Sähköposti lähetetään jokaiselle jäsenelle, ja se myös kutsuu heitä merkitsemään yhdessä puolisonsa kanssa.
Sähköposti on räätälöity siten, että sähköpostin runko pysyy samana, mutta vastaanottajat ja heidän puolisoidensa nimet vaihtelevat. Sähköpostista tulee malli, kun taas vastaanottajat ja vastaavat puolisot ovat muuttujia.
Se oli yleinen esimerkki. Ansible käyttää Jinja2:ta, joka on moderni Python-kehysten mallinnuskone, jota käytetään dynaamisen sisällön tai lausekkeiden luomiseen. Malli on erittäin hyödyllinen luotaessa mukautettuja määritystiedostoja useille palvelimille, mutta jokaiselle niistä on yksilöllinen.
Jinja2 käyttää kaksinkertaista kiharaa aaltosulkeet {{ ... }}
sisällyttääkseen muuttujan, joka on määritetty. Käytä kommenteissa {{# #}
ja ehtolausekkeissa {% … %}
.
Oletetaan, että verkossasi on tietomalli VLAN-verkkoista isäntäjärjestelmistä, jotka haluat siirtää vastaaviin VLAN-verkkoihin kuvan mukaisesti.
vlans:
- id: 10
name: LB
- id: 20
name: WB_01
- id: 30
name: WB_02
- id: 40
name: DB
Tämän määrityksen hahmontamiseksi vastaava jinja2-malli, nimeltään vlans.j2, tulee näkyviin kuvan mukaisesti. Kuten näet, muuttujat vlan.id ja vlan.name on suljettu aaltosulkeisiin.
vlan {{ vlan.id }}
name {{ vlan.name }}
Kun kaikki kootaan pelikirjaan, joka sijoittaa eri isäntäkoneet, tämä näyttäisi seuraavalta:
- hosts
tasks:
- name: Rendering VLAN configuration
template:
src: vlans.j2
dest: "vlan_configs/{{ inventory_hostname }}.conf"
Esimerkki 1: Verkkopalvelimien määrittäminen eri jakeluissa
Tässä esimerkissä luomme index.html-tiedostoja, jotka näyttävät tietoja kahden verkkopalvelimen isäntänimestä ja käyttöjärjestelmästä, joissa on CentOS ja Ubuntu. .
Perustaa
Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 - IP address: 173.82.115.165
Apache-verkkopalvelin on jo asennettu molemmille palvelimille.
CentOS 7:lle
Ubuntu 18.04
Luodaan siis pelikirja test_server.yml kuvan mukaisesti:
---
- hosts: all
become: yes
tasks:
- name: Install index.html
template:
src: index.html.j2
dest: /var/www/html/index.html
mode: 0777
Jinja-tiedostomallimme on index.html.j2, joka välitetään kunkin verkkopalvelimen index.html-tiedostoon. Muista aina laittaa pääte .j2
loppuun, mikä tarkoittaa, että kyseessä on jinja2-tiedosto.
Luodaan nyt mallitiedosto 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>
Tämä malli on HTML-perustiedosto, jossa ansible_hostname ja ansible_os_family ovat sisäänrakennettuja muuttujia, jotka korvataan selaimen yksittäisten verkkopalvelimien vastaavilla isäntänimillä ja käyttöjärjestelmillä.
Ajellaan nyt pelikirjaa.
ansible-playbook test_server.yml
Ladataan nyt verkkosivut uudelleen sekä CentOS 7- että Ubuntu -verkkopalvelimille.
CentOS 7:lle
Ubuntu 18.04
Kuten näet, kussakin palvelimessa on esitetty erilaisia tietoja isäntänimestä ja käyttöjärjestelmän perheestä. Ja näin siistiä Jinja2-mallinnus on!
SUODATIN:
Joskus saatat päättää korvata muuttujan arvon merkkijonolla, joka esiintyy tietyllä tavalla.
Esimerkki 1: Merkitse merkkijonot isoilla/pienillä kirjaimilla
Esimerkiksi edellisessä esimerkissä voimme päättää, että Ansible-muuttujat näkyvät isoilla kirjaimilla. Voit tehdä tämän lisäämällä muuttujan yläosan arvon. Tällä tavalla muuttujan arvo muunnetaan isojen kirjainten muotoon.
{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT
Vastaavasti voit muuntaa merkkijonotulosteen pieniksi liittämällä pienemmän argumentin.
{{ ansible_hostname | lower }} => centos 7
{{ ansible_os_family | lower }} => redhat
Esimerkki 2: Korvaa merkkijono toisella
Lisäksi voit korvata merkkijonon toisella.
Esimerkiksi:
Elokuvan nimi on {{ movie_name }} =>
Elokuvan nimi on Ring.
Jos haluat korvata tulosteen toisella merkkijonolla, käytä korvausargumenttia kuvan mukaisesti:
Elokuvan nimi on {{ elokuvan_nimi | korvaa ("Ring", "Heist ") }} =>
Elokuvan nimi on Heist.
Esimerkki 3: Listat ja suodattimet
Jos haluat hakea taulukon pienimmän arvon, käytä min-suodatinta.
{{ [ 2, 3, 4, 5, 6, 7 ] | min }} => 2
Vastaavasti voit hakea suurimman luvun käyttämällä max-suodatinta.
{{ [ 2, 3, 4, 5, 6, 7 ] | max }} => 7
Jos haluat näyttää yksilölliset arvot, käytä ainutlaatuista-suodatinta.
{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} => 2, 3
Käytä satunnaista-suodatinta saadaksesi satunnaisluvun 0:n ja arvon välillä.
{{ 50 | random }} => Some random number
SILMUKSET:
Aivan kuten ohjelmointikielissä, meillä on silmukat Ansiblessa Jinja2.
Jos haluat esimerkiksi luoda numeroluettelon sisältävän tiedoston, käytä for-silmukkaa alla olevan esimerkin mukaisesti:
Esimerkki 1:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{{ number }}
{% end for %}
Voit myös yhdistää for-silmukan if-else-lauseisiin suodattaaksesi ja saadaksesi tiettyjä arvoja.
Esimerkki 2:
{% for number in [0, 1, 2, 3, 4, 5, 6, 7] %}
{% if number == 5 %}
{{ number }}
{% endif%}
{% endfor %}
Ja siinä se tälle luennolle. Liity meihin seuraavassa aiheessa, jossa lähdemme työskentelemään mahdollisten muuttujien ja tosiasioiden parissa.