Hvernig á að vinna með Ansible breytur og staðreyndir - Part 8


Við höfum nefnt breytur í þessari Ansible seríu og bara til að skokka hugann aðeins. Breyta, rétt eins og í mörgum forritunarmálum, er í raun lykill sem táknar gildi.

Hvað er gilt breytuheiti?

Heiti breyta inniheldur bókstafi, tölustafi, undirstrik eða blanda af annaðhvort 2 eða öllum. Hins vegar skaltu hafa í huga að heiti breytu verður alltaf að byrja á bókstaf og ætti ekki að innihalda bil.

Við skulum skoða nokkur dæmi um gild og óviðunandi breytuheiti:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Við skulum ræða breytugerðirnar:

1. Playbook Variables

Playbook breytur eru frekar auðveldar og einfaldar. Til að skilgreina breytu í leikbók, notaðu einfaldlega lykilorðið vars áður en þú skrifar breyturnar þínar með inndrætti.

Til að fá aðgang að gildi breytunnar skaltu setja hana á milli tvöföldu krulluðu axlaböndunum með gæsalappir.

Hér er einfalt leikbókardæmi:

- hosts: all
  vars:
    greeting: Hello world! 

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

Í leikbókinni hér að ofan er kveðjubreytunni skipt út fyrir gildið Halló heimur! þegar leikbókin er keyrð. Leikbókin prentar einfaldlega skilaboðin Halló heimur! þegar hann er tekinn af lífi.

Að auki geturðu haft lista eða fylki af breytum eins og sýnt er:

Leikbókin hér að neðan sýnir breytu sem kallast heimsálfur. Breytan hefur 5 mismunandi gildi - heimsálfaheiti. Auðvelt er að nálgast hvert þessara gilda með því að nota vísitölu 0 sem fyrstu breytuna.

Dæmið af leikbókinni hér að neðan sækir og sýnir Asíu (vísitala 1).

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

Breytulistann getur á svipaðan hátt verið uppbyggður eins og sýnt er:

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

Til að skrá öll atriðin á listanum skaltu nota with_items eininguna. Þetta mun fara í gegnum öll gildin í fylkinu.

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

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

Önnur tegund af Ansible breytu er orðabókarbreytan.

Orðabókarbreytur eru að auki studdar í leikbókinni. Til að skilgreina orðabókarbreytuna skaltu einfaldlega auðkenna lykilgildaparið rétt fyrir neðan orðabókarbreytuna.

hosts: switch_f01

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

Í dæminu hér að ofan er vlans orðabókarbreytan á meðan id og port eru lykilgildapörin.

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

Fyrir port_id, þar sem við erum að byrja gildið með texta en ekki breytunni, eru gæsalappir ekki nauðsynlegar til að umlykja hrokkið axlabönd.

2. Sérstakar breytur

Ansible veitir lista yfir fyrirfram skilgreindar breytur sem hægt er að vísa til í Jinja2 sniðmátum og leikbókum en ekki er hægt að breyta eða skilgreina af notandanum.

Saman er vísað til lista yfir Ansible fyrirfram skilgreindar breytur sem Ansible staðreyndir og þeim er safnað saman þegar leikbók er keyrð.

Til að fá lista yfir allar Ansible breyturnar, notaðu uppsetningareininguna í Ansible ad-hoc skipuninni eins og sýnt er hér að neðan:

# ansible -m setup hostname

Þetta sýnir úttakið á JSON sniði eins og sýnt er:

# ansible -m setup localhost

Af úttakinu getum við séð að sum dæmanna um Ansible sérstakar breytur innihalda:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Það eru margar aðrar sérstakar breytur frá Ansible þetta eru aðeins nokkur dæmi.

Þessar breytur er hægt að nota í Jinja2 sniðmáti eins og sýnt er:

<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. Birgðabreytur

Að lokum, á listanum, höfum við Ansible birgðabreytur. Birgðaskrá er skrá á INI sniði sem inniheldur alla vélina sem Ansible á að stjórna.

Í birgðum er hægt að úthluta breytu til hýsingarkerfis og nota hana síðar í leikbók.

[web_servers]

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

Ofangreint er hægt að tákna í playbook YAML skrá eins og sýnt er:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Ef hýsingarkerfin deila sömu breytum geturðu skilgreint annan hóp í birgðaskránni til að gera hann fyrirferðarminni og forðast óþarfa endurtekningar.

Til dæmis:

[web_servers]

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

Ofangreint getur verið byggt upp sem:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

Og í playbook YAML skránni verður þetta skilgreint eins og sýnt er:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Ansible Staðreyndir

Þegar leikbækur eru keyrðar er fyrsta verkefnið sem Ansible gerir að framkvæma uppsetningarverkefni. Ég er nokkuð viss um að þú hlýtur að hafa rekist á úttakið:

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

Mögulegar staðreyndir eru ekkert nema kerfiseiginleikar eða upplýsingar um ytri hnúta sem þú hefur tengst. Þessar upplýsingar innihalda kerfisarkitektúr, stýrikerfisútgáfu, BIOS upplýsingar, kerfistíma og dagsetningu, spenntur kerfis, IP tölu og upplýsingar um vélbúnað svo aðeins sé nefnt.

Til að fá staðreyndir um hvaða kerfi sem er, notaðu einfaldlega uppsetningareininguna eins og sýnt er í skipuninni hér að neðan:

# ansible -m setup hostname

Til dæmis:

# ansible -m setup database_server

Þetta prentar út mikið safn af gögnum á JSON sniði eins og sýnt er:

Áhugaverðar staðreyndir eru gagnlegar til að hjálpa kerfisstjórum hvaða aðgerðir á að framkvæma, t.d. eftir stýrikerfi, þeir geta vitað hvaða hugbúnaðarpakka þarf að setja upp og hvernig á að stilla þá o.s.frv.

Sérsniðnar staðreyndir

Vissir þú líka að þú getur búið til þínar eigin sérsniðnu staðreyndir sem Ansible getur safnað saman? Já þú getur. Svo hvernig ferðu að því? Við skulum skipta um gír og sjá hvernig.

Fyrsta skrefið er að búa til /etc/ansible/facts.d möppu á stýrða eða ytri hnútnum.

Inni í þessari möppu skaltu búa til skrá(r) með .fact endingunni. Þessi skrá(r) mun skila JSON gögnum þegar leikbókin er keyrð á Ansible stjórnunarhnútnum, sem er innifalið í öðrum staðreyndum sem Ansible sækir eftir leikbókarkeyrslu.

Hér er dæmi um sérsniðna staðreyndaskrá sem heitir date_time.fact sem sækir dagsetningu og tíma.

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

Bættu eftirfarandi línum í það.

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

Vistaðu og lokaðu skránni.

Úthlutaðu nú framkvæmdarheimildum:

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

Nú bjó ég til leikbók á Ansible stjórnunarhnút sem heitir check_date.yml.

---

- hosts: webservers

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

Bættu staðreyndaskránni við ansible_local breytuna. Ansible_local geymir allar sérsniðnar staðreyndir.

Keyrðu nú leikbókina og fylgstu með því að Ansible sækir upplýsingar sem vistaðar eru á staðreyndaskránni:

# ansible_playbook check_date.yml

Þetta leiðir okkur til enda þessarar kennslu um að vinna með Ansible breytur og staðreyndir.