Wéi mat Ansible Variabelen a Fakten ze schaffen - Deel 8


Mir hunn Variabelen an dëser Ansible Serie ernimmt a just fir Äert Geescht e bëssen ze joggen. Eng Variabel, grad wéi a ville Programméierungssproochen, ass wesentlech e Schlëssel deen e Wäert duerstellt.

Wat ass e gültege Variabelen Numm?

E Variabel Numm enthält Buschtawen, Zuelen, Ënnersträicher oder e Mix vun entweder 2 oder all vun hinnen. Denkt awer drun datt e verännerlechen Numm ëmmer mat engem Buschtaf muss ufänken a keng Plazen sollt enthalen.

Loosst eis e puer Beispiller vu gëlteg an inakzeptabel Variabel Nimm kucken:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Loosst eis d'Variabel Typen diskutéieren:

1. Playbook Verännerlechen

Playbook Variablen sinn zimlech einfach an einfach. Fir eng Variabel an engem Spillbuch ze definéieren, benotzt einfach d'Schlësselwuert vars ier Dir Är Variablen mat Indentatioun schreift.

Fir Zougang zum Wäert vun der Variabel ze kréien, plazéiert se tëscht den duebele Curly Klameren, déi mat Zitatzeechen zougemaach sinn.

Hei ass en einfacht Spillbuch Beispill:

- hosts: all
  vars:
    greeting: Hello world! 

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

Am uewe genannte Spillbuch gëtt d'Begréissungsvariabel duerch de Wäert ersat Hallo Welt! wann d'Spillbuch leeft. D'Spillbuch dréckt einfach de Message Hallo Welt! wann ausgefouert.

Zousätzlech kënnt Dir eng Lëscht oder eng Array vu Variablen hunn wéi gewisen:

D'Spillbuch hei ënnen weist eng Variabel genannt Kontinenter. D'Variabel hält 5 verschidde Wäerter - Kontinentnimm. Jiddereng vun dëse Wäerter kënnen einfach zougänglech sinn mam Index 0 als éischt Variabel.

D'Beispill vum Spillbuch hei drënner retrieves a weist Asien (Index 1).

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

D'Variabel Lëscht kann ähnlech strukturéiert ginn wéi gewisen:

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

Fir all Elementer op der Lëscht ze lëschten, benotzt de with_items Modul. Dëst wäert duerch all d'Wäerter an der Array schloen.

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

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

Eng aner Zort vun Ansible Variabel ass d'Wörterbuchvariabel.

Wierderbuch Variablen ginn zousätzlech am Spillbuch ënnerstëtzt. Fir d'Wörterbuchvariabel ze definéieren, identifizéieren einfach d'Schlësselwäertpaar just ënner dem Wierderbuch Variabelnumm.

hosts: switch_f01

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

Am Beispill hei uewen ass vlans d'Wörterbuchvariabel, während ID a Port d'Schlësselwäertpaar sinn.

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

Fir port_id, well mir de Wäert mam Text ufänken an net der Variabel, sinn Zitatzeechen net néideg fir d'Curly Klameren ëmzegoen.

2. Special Variablen

Ansible bitt eng Lëscht vu virdefinéierte Variablen déi an Jinja2 Templates a Playbooks referenzéiert kënne ginn, awer net vum Benotzer geännert oder definéiert kënne ginn.

Zesummen gëtt d'Lëscht vun Ansible virdefinéierte Variablen als Ansible Fakten bezeechent an dës gi gesammelt wann e Spillbuch ausgefouert gëtt.

Fir eng Lëscht vun all Ansible Variablen ze kréien, benotzt de Setup Modul am Ansible ad-hoc Kommando wéi hei ënnendrënner:

# ansible -m setup hostname

Dëst weist d'Ausgab am JSON Format wéi gewisen:

# ansible -m setup localhost

Vun der Ausgab kënne mir gesinn datt e puer vun de Beispiller vun Ansible Spezialvariablen enthalen:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Et gi vill aner Ansible speziell Verännerlechen dëst sinn nëmmen e puer Beispiller.

Dës Variablen kënnen an engem Jinja2 Template benotzt ginn wéi gewisen:

<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. Stamminventar Variablen

Endlech, op der Lëscht, hu mir Ansible Inventarvariablen. En Inventar ass eng Datei am INI-Format deen all d'Host enthält déi vun Ansible geréiert ginn.

An Inventaire kënnt Dir eng Variabel un engem Hostsystem zouginn a spéider an engem Spillbuch benotzen.

[web_servers]

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

Dat hei uewen kann an enger Playbook YAML Datei vertruede sinn wéi gewisen:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Wann d'Hostsystemer déiselwecht Variabelen deelen, kënnt Dir eng aner Grupp an der Inventardatei definéieren fir et manner ëmständlech ze maachen an onnéideg Widderhuelung ze vermeiden.

Zum Beispill:

[web_servers]

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

Dat hei uewen kann strukturéiert ginn wéi:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

An an der Playbook YAML Datei gëtt dëst definéiert wéi gewisen:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Ansible Fakten

Wann Dir Playbooks leeft, ass déi éischt Aufgab déi Ansible mécht d'Ausféierung vun der Setuptask. Ech si ganz sécher datt Dir op d'Ausgab muss kommen:

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

Ansibel Fakten sinn näischt anescht wéi Systemeigenschaften oder Informatiounsstécker iwwer Fernknoten mat deenen Dir verbonne sidd. Dës Informatioun enthält d'Systemarchitektur, d'OS Versioun, BIOS Informatioun, System Zäit an Datum, System Uptime, IP Adress, an Hardware Informatioun fir nëmmen e puer ze nennen.

Fir d'Fakten iwwer all System ze kréien, benotzt einfach de Setup-Modul wéi am Kommando ënnendrënner:

# ansible -m setup hostname

Zum Beispill:

# ansible -m setup database_server

Dëst dréckt e grousse Set vun Daten am JSON Format aus wéi gewisen:

Ansible Fakten si praktesch fir de Systemadministratoren ze hëllefen wéi eng Operatiounen ausféieren, zum Beispill, ofhängeg vum Betribssystem, si fäeg ze wëssen wéi eng Software Packagen installéiert musse ginn, a wéi se konfiguréiert sinn, etc.

Benotzerdefinéiert Fakten

Wousst Dir och datt Dir Är eege personaliséiert Fakten erstellt, déi vun Ansible gesammelt kënne ginn? Jo du kanns. Also wéi gitt Dir doriwwer? Loosst eis Gears wiesselen a kucken wéi.

Den éischte Schrëtt ass e /etc/ansible/facts.d Verzeichnis op de verwalteten oder Remote Node ze kreéieren.

An dësem Verzeichnis erstellt e Fichier(en) mat enger .fact Extensioun. Dës Datei(e) ginn JSON Daten zréck wann d'Playbook um Ansible Kontrollnode leeft, wat déi aner Fakten inklusiv ass, déi d'Ansible no engem Playbook Run zréckhëlt.

Hei ass e Beispill vun enger personaliséierter Faktdatei genannt date_time.fact, déi den Datum an d'Zäit zréckhëlt.

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

Füügt déi folgend Zeilen derbäi.

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

Späichert a gitt d'Datei aus.

Gitt elo d'Ausféierungsrechter zou:

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

Elo hunn ech e Spillbuch op Ansible Kontrollnode mam Numm check_date.yml erstallt.

---

- hosts: webservers

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

Fügt d'Faktdatei an d'ansible_local Variabel. Den ansible_local späichert all personaliséiert Fakten.

Fuert elo d'Playbook an beobachtet Ansible Recuperatioun vun Informatioun, déi op der Faktdatei gespäichert ass:

# ansible_playbook check_date.yml

Dëst bréngt eis zum Enn vun dësem Tutorial iwwer d'Aarbecht mat Ansible Variablen a Fakten.