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.