Kuinka työskennellä mahdollisten muuttujien ja tosiasioiden kanssa - Osa 8
Olemme maininneet muuttujat tässä Ansible-sarjassa ja vain hieman hölkkäämään mieltäsi. Muuttuja, kuten monissa ohjelmointikielissä, on pohjimmiltaan avain, joka edustaa arvoa.
Mikä muodostaa kelvollisen muuttujan nimen?
Muuttujan nimi sisältää kirjaimia, numeroita, alaviivoja tai yhdistelmän joko kahdesta tai kaikista. Muista kuitenkin, että muuttujan nimen tulee aina alkaa kirjaimella, eikä se saa sisältää välilyöntejä.
Katsotaanpa muutamia esimerkkejä kelvollisista ja kelpaamattomista muuttujien nimistä:
Esimerkkejä kelvollisista muuttujan nimistä:
football
foot_ball
football20
foot_ball20
Esimerkkejä virheellisistä muuttujan nimistä:
foot ball
20
foot-ball
Keskustellaan muuttujatyypeistä:
1. Ohjekirjan muuttujat
Playbook-muuttujat ovat melko helppoja ja yksinkertaisia. Jos haluat määrittää muuttujan pelikirjassa, käytä avainsanaa muuttujat ennen kuin kirjoitat muuttujia sisennyksen kanssa.
Saat muuttujan arvon asettamalla sen lainausmerkeillä olevien kaksoishakasulkeiden väliin.
Tässä on yksinkertainen pelikirjaesimerkki:
- hosts: all
vars:
greeting: Hello world!
tasks:
- name: Ansible Basic Variable Example
debug:
msg: "{{ greeting }}"
Yllä olevassa ohjekirjassa tervehdys-muuttuja korvataan arvolla Hei maailma!, kun ohjekirjaa ajetaan. Pelikirja yksinkertaisesti tulostaa viestin Hei maailma!, kun se suoritetaan.
Lisäksi sinulla voi olla luettelo tai joukko muuttujia kuvan mukaisesti:
Alla olevassa ohjekirjassa on muuttuja nimeltä mannert. Muuttuja sisältää 5 eri arvoa – maanosien nimet. Jokainen näistä arvoista on helposti käytettävissä käyttämällä indeksiä 0 ensimmäisenä muuttujana.
Alla olevan ohjekirjan esimerkki hakee ja näyttää Aasia (hakemisto 1).
- hosts: all
vars:
continents:
- Africa
- Asia
- South America
- North America
- Europe
tasks:
- name: Ansible List variable Example
debug:
msg: "{{ continents [1] }}"
Muuttujaluettelo voidaan rakentaa samalla tavalla kuin kuvassa:
vars:
Continents: [Africa, Asia, South America, North America, Europe]
Jos haluat luetella kaikki luettelon kohteet, käytä with_items-moduulia. Tämä käy läpi kaikki taulukon arvot.
- hosts: all
vars:
continents: [Africa, Asia, South America, North America, Europe]
tasks:
- name: Ansible array variables example
debug:
msg: "{{ item }}"
with_items:
- "{{ continents }}"
Toinen Ansible-muuttujien tyyppi on sanakirja-muuttuja.
Sanakirja-muuttujia tuetaan lisäksi ohjekirjassa. Määritä sanakirjamuuttuja yksinkertaisesti tunnistamalla avain-arvo-pari sanakirjamuuttujan nimen alapuolella.
hosts: switch_f01
vars:
http_port: 8080
default_gateway: 10.200.50.1
vlans:
id: 10
port: 2
Yllä olevassa esimerkissä vlans on sanakirjamuuttuja, kun taas id ja port ovat avain-arvo-pareja.
hosts: switch_f01
vars:
http_port: 8080
default_gateway:
vlans:
id: 10
port: 20
tasks:
name: Configure default gateway
system_configs:
default_gateway_ip: “{{ default_gateway }}“
name: Label port on vlan 10
vlan_config:
vlan_id: “{{ vlans[‘id’] }}“
port_id: 1/1/ {{ vlans[‘port’] }}
port_id:lle, koska aloitamme arvon tekstillä emmekä muuttujalla, lainausmerkkejä ei tarvita aaltosulkeiden ympäröimiseen.
2. Erikoismuuttujat
Ansible tarjoaa luettelon ennalta määritetyistä muuttujista, joihin voidaan viitata Jinja2-malleissa ja pelikirjoissa, mutta joita käyttäjä ei voi muuttaa tai määrittää.
Yhteenvetona mahdollisten ennalta määritettyjen muuttujien luetteloa kutsutaan Ansible-faktoiksi, ja ne kerätään, kun pelikirja suoritetaan.
Saat luettelon kaikista Ansible-muuttujista käyttämällä setup-moduulia Ansible ad-hoc -komennossa alla kuvatulla tavalla:
ansible -m setup hostname
Tämä näyttää tulosteen JSON-muodossa kuten kuvassa:
ansible -m setup localhost
Tulosteesta voimme nähdä, että joitain esimerkkejä Ansible-erikoismuuttujista ovat:
ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux
On monia muita Ansible-erikoismuuttujia, nämä ovat vain muutamia esimerkkejä.
Näitä muuttujia voidaan käyttää Jinja2-mallissa kuvan mukaisesti:
<html>
<center>
<h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
<h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>
3. Varastomuuttujat
Lopuksi luettelossa on mahdollisia varastomuuttujia. Varasto on INI-muodossa oleva tiedosto, joka sisältää kaikki Ansiblen hallinnoimat isännät.
Varastoissa voit määrittää muuttujan isäntäjärjestelmälle ja käyttää sitä myöhemmin ohjekirjassa.
[web_servers]
web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=ubuntu http_port=8080
Yllä oleva voidaan esittää pelikirjan YAML-tiedostossa, kuten kuvassa:
---
web_servers:
web_server_1:
ansible_user=centos
http_port=80
web_server_2:
ansible_user=ubuntu
http_port=8080
Jos isäntäjärjestelmät jakavat samat muuttujat, voit määrittää inventaariotiedostoon toisen ryhmän tehdäksesi siitä vähemmän hankala ja välttääksesi tarpeettoman toiston.
Esimerkiksi:
[web_servers]
web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=centos http_port=80
Yllä oleva voidaan jäsentää seuraavasti:
[web_servers]
web_server_1
web_server_2
[web_servers:vars]
ansible_user=centos
http_port=80
Ja pelikirjan YAML-tiedostossa tämä määritellään seuraavasti:
---
web_servers:
hosts:
web_server_1:
web_server_2:
vars:
ansible_user=centos
http_port=80
Järkeviä faktoja
Kun käytät pelikirjoja, Ansiblen ensimmäinen tehtävä on asennustehtävän suorittaminen. Olen melko varma, että sinun on täytynyt tavata tulos:
TASK: [Gathering facts] *********
Mahdolliset tosiasiat ovat vain järjestelmän ominaisuuksia tai tietoja etäsolmuista, joihin olet muodostanut yhteyden. Nämä tiedot sisältävät järjestelmän arkkitehtuurin, käyttöjärjestelmän version, BIOS-tiedot, järjestelmän kellonajan ja päivämäärän, järjestelmän käytettävyyden, IP-osoitteen ja laitteistotiedot vain muutaman mainitakseni.
Saadaksesi tiedot mistä tahansa järjestelmästä, käytä asetus-moduulia alla olevan komennon mukaisesti:
ansible -m setup hostname
Esimerkiksi:
ansible -m setup database_server
Tämä tulostaa suuren joukon tietoja JSON-muodossa kuvan mukaisesti:
Järkevät faktat ovat käteviä auttamaan järjestelmänvalvojia, mitä toimintoja heidän tulee suorittaa, esimerkiksi käyttöjärjestelmästä riippuen he voivat tietää, mitkä ohjelmistopaketit on asennettava ja miten ne tulee konfiguroida jne.
Mukautetut tosiasiat
Tiesitkö myös, että voit luoda omia mukautettuja faktoja, jotka Ansible voi kerätä? Kyllä sinä voit. Joten miten teet sen? Vaihdetaan vaihdetta ja katsotaan miten.
Ensimmäinen vaihe on /etc/ansible/facts.d-hakemiston luominen hallittavaan tai etäsolmuun.
Luo tähän hakemistoon tiedosto(t), joiden tunniste on .fact
. Nämä tiedostot palauttavat JSON-tiedot, kun pelikirja ajetaan Ansible-ohjaussolmussa, mikä sisältää myös muut tiedot, jotka Ansible hakee pelikirjan ajon jälkeen.
Tässä on esimerkki muokatusta tietotiedostosta nimeltä date_time.fact, joka hakee päivämäärän ja kellonajan.
mkdir -p /etc/ansible/facts.d
vim /etc/ansible/facts.d/date_time.fact
Lisää siihen seuraavat rivit.
#!/bin/bash
DATE=`date`
echo "{\"date\" : \"${DATE}\"}"
Tallenna ja poistu tiedostosta.
Anna nyt suoritusoikeudet:
chmod +x /etc/ansible/facts.d/date_time.fact
Nyt loin Ansible-ohjaussolmun ohjekirjan nimeltä check_date.yml.
---
- hosts: webservers
tasks:
- name: Get custom facts
debug:
msg: The custom fact is {{ansible_local.date_time}}
Liitä tietotiedosto ansible_local-muuttujaan. ansible_local tallentaa kaikki mukautetut tiedot.
Suorita nyt pelikirja ja tarkkaile mahdollisia faktatiedostoon tallennettuja tietoja:
ansible_playbook check_date.yml
Johtopäätös
Tämä vie meidät tämän Ansible-muuttujien ja tosiasioiden kanssa työskentelyn opetusohjelman loppuun.