Weboldal keresés

Hogyan dolgozzunk lehetséges változókkal és tényekkel – 8. rész


Említettünk változókat ebben az Ansible sorozatban, és csak azért, hogy kicsit megmozgassuk az elmédet. A változó, csakúgy, mint sok programozási nyelvben, lényegében egy kulcs, amely egy értéket képvisel.

Mi alkotja az érvényes változónevet?

A változó neve betűket, számokat, aláhúzásjeleket vagy kettő vagy mindegyik keverékét tartalmazza. Ne feledje azonban, hogy a változó nevének mindig betűvel kell kezdődnie, és nem tartalmazhat szóközt.

Nézzünk néhány példát az érvényes és elfogadhatatlan változónevekre:

Érvényes változónév példák:

football 
foot_ball
football20 
foot_ball20

Érvénytelen változónév példák:

foot ball
20 
foot-ball

Beszéljük meg a változó típusokat:

1. Playbook Variables

A Playbook változók meglehetősen egyszerűek és egyértelműek. Ha változót szeretne definiálni egy játékkönyvben, egyszerűen használja a vars kulcsszót, mielőtt behúzással írja be a változóit.

A változó értékének eléréséhez tegye azt az idézőjelbe zárt dupla kapcsos zárójelek közé.

Íme egy egyszerű játékkönyv példa:

- hosts: all
  vars:
    greeting: Hello world! 

  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ greeting }}"

A fenti játékfüzetben az üdvözlet változót a Hello world! érték helyettesíti a forgatókönyv futtatásakor. A játékkönyv végrehajtása után egyszerűen kinyomtatja a Hello world! üzenetet.

Ezenkívül rendelkezhet egy listával vagy változók tömbjével, ahogy az ábrán látható:

Az alábbi útmutató a kontinensek nevű változót mutatja be. A változó 5 különböző értéket tartalmaz – kontinensneveket. Ezen értékek mindegyike könnyen elérhető a 0 index használatával, mint első változóval.

Az alábbi forgatókönyv példája lekéri és megjeleníti az Ázsiát (1. index).

- hosts: all
  vars:
    continents:
      - Africa
      - Asia
      - South America
      - North America
      - Europe
      
  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ continents [1] }}"

A változólista hasonló módon strukturálható az alábbiak szerint:

vars:
    Continents: [Africa, Asia, South America, North America, Europe]

A listán szereplő összes elem felsorolásához használja a with_items modult. Ez végigfut a tömb összes értékén.

- hosts: all
  vars:
    continents: [Africa, Asia, South America, North America, Europe]

  tasks:
  - name: Ansible array variables example
    debug: 
      msg: "{{ item }}"
    with_items:
      - "{{ continents }}"

Az Ansible változó egy másik típusa a szótár változó.

A Szótár változók is támogatottak a játékkönyvben. A szótári változó meghatározásához egyszerűen azonosítsa a kulcs-érték párt közvetlenül a szótári változó neve alatt.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 10.200.50.1
   vlans:
       id: 10
       port: 2

A fenti példában a vlans a szótárváltozó, míg az id és a port a kulcs-érték párok.

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’]  }}

A port_id esetén, mivel az értéket szöveggel kezdjük, és nem a változóval, nem szükséges idézőjel a kapcsos zárójelek körül.

2. Speciális változók

Az Ansible előre definiált változók listáját tartalmazza, amelyekre hivatkozni lehet a Jinja2 sablonokban és játékkönyvekben, de a felhasználó nem módosíthatja vagy definiálhatja őket.

Együttesen az Ansible előre definiált változók listáját Lehetséges tényeknek nevezzük, és ezeket összegyűjtjük a játékkönyv futtatásakor.

Az összes Ansible változó listájának megtekintéséhez használja a setup modult az Ansible ad-hoc parancsban az alábbiak szerint:

ansible -m setup hostname

Ez a kimenetet JSON formátumban jeleníti meg, az alábbi módon:

ansible -m setup localhost

A kimenetből láthatjuk, hogy néhány példa az Ansible speciális változókra:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Sok más Ansible speciális változó is létezik, ez csak néhány példa.

Ezek a változók használhatók a Jinja2 sablonban, az alábbi módon:

<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. Készletváltozók

Végül a listán szerepelnek az Ansible készletváltozók. A leltár egy INI formátumú fájl, amely tartalmazza az Ansible által kezelendő összes gazdagépet.

A leltárban hozzárendelhet egy változót egy gazdagéphez, és később felhasználhatja azt egy játékkönyvben.

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=ubuntu http_port=8080

A fentiek ábrázolhatók egy játékkönyv YAML fájljában, az alábbi módon:

---
   web_servers:
     web_server_1:
        ansible_user=centos
	   http_port=80

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Ha a gazdarendszerek ugyanazokat a változókat használják, a leltárfájlban egy másik csoportot is meghatározhat, hogy kevésbé nehézkes legyen, és elkerülje a szükségtelen ismétléseket.

Például:

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=centos http_port=80

A fentiek a következőképpen strukturálhatók:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

És a játékkönyv YAML fájljában ez a következőképpen lesz meghatározva:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Lehetséges tények

Playbooks futtatásakor az Ansible első feladata a beállítási feladat végrehajtása. Biztos vagyok benne, hogy találkoztál a kimenettel:

TASK:  [Gathering facts] *********

A lehetséges tények nem más, mint a rendszertulajdonságok vagy az olyan távoli csomópontokról szóló információk, amelyekhez csatlakozott. Ezek az információk magukban foglalják a rendszer architektúrát, az operációs rendszer verzióját, a BIOS-információkat, a rendszeridőt és -dátumot, a rendszer üzemidejét, az IP-címet és a hardverinformációkat, hogy csak néhányat említsünk.

A rendszerrel kapcsolatos tények megismeréséhez egyszerűen használja a beállítás modult az alábbi parancs szerint:

ansible -m setup hostname

Például:

ansible -m setup database_server

Ez nagy adathalmazt nyomtat ki JSON formátumban, az alábbi módon:

Az érthető tények hasznosak abban, hogy a rendszergazdák milyen műveleteket hajtsanak végre, például operációs rendszertől függően tudják, hogy milyen szoftvercsomagokat kell telepíteni, és hogyan kell azokat konfigurálni stb.

Egyéni tények

Azt is tudtad, hogy létrehozhatsz saját egyéni tényeket, amelyeket az Ansible összegyűjthet? Igen tudsz. Szóval hogyan fogsz hozzá? Váltsunk sebességet, és nézzük meg, hogyan.

Az első lépés egy /etc/ansible/facts.d könyvtár létrehozása a felügyelt vagy távoli csomóponton.

Ebben a könyvtárban hozzon létre egy fájl(oka)t .fact kiterjesztéssel. Ez a fájl(ok) JSON adatokat adnak vissza, amikor a játékkönyv az Ansible vezérlőcsomóponton fut, amely magában foglalja az Ansible által a játékkönyv futtatása után lehívott egyéb tényeket is.

Íme egy példa a date_time.fact nevű egyéni tényfájlra, amely lekéri a dátumot és az időt.

mkdir -p /etc/ansible/facts.d
vim /etc/ansible/facts.d/date_time.fact

Adja hozzá a következő sorokat.

#!/bin/bash
DATE=`date`
echo "{\"date\" : \"${DATE}\"}"

Mentse el és lépjen ki a fájlból.

Most rendelje hozzá a végrehajtási engedélyeket:

chmod +x /etc/ansible/facts.d/date_time.fact

Most létrehoztam egy útmutatót az Ansible vezérlőcsomópontról check_date.yml néven.

---

- hosts: webservers

  tasks:
   - name: Get custom facts
     debug:
      msg: The custom fact is {{ansible_local.date_time}}

Adja hozzá a tényfájlt az ansible_local változóhoz. Az ansible_local az összes egyéni adatot tárolja.

Most futtassa a forgatókönyvet, és figyelje meg a tényfájlba mentett lehetséges információk visszakeresését:

ansible_playbook check_date.yml

Következtetés

Ezzel az Ansible változókkal és tényekkel való munkáról szóló oktatóanyag végére értünk.