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.