Kif Taħdem ma’ Varjabbli u Fatti Ansible - Parti 8


Semmejna varjabbli f'din is-sensiela Ansible u biss biex tgħożż ftit moħħok. Varjabbli, bħal f'ħafna lingwi ta' programmar, huwa essenzjalment ċavetta li tirrappreżenta valur.

X'jikkostitwixxi Isem Validu ta' Varjabbli?

Isem varjabbli jinkludi ittri, numri, underscores jew taħlita ta' jew 2 jew kollha kemm huma. Madankollu, żomm f'moħħok li isem varjabbli għandu dejjem jibda b'ittra u m'għandux ikun fih spazji.

Ejja nagħtu ħarsa lejn ftit eżempji ta' ismijiet varjabbli validi u mhux aċċettabbli:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Ejja niddiskutu t-tipi varjabbli:

1. Varjabbli tal-Playbook

Il-varjabbli tal-playbook huma pjuttost faċli u sempliċi. Biex tiddefinixxi varjabbli f'playbook, sempliċement uża l-kelma prinċipali vars qabel tikteb il-varjabbli tiegħek b'indentazzjoni.

Biex taċċessa l-valur tal-varjabbli, poġġiha bejn iċ-ċingi kaboċċi doppji magħluqa bil-virgoletti.

Hawn eżempju sempliċi tal-playbook:

- hosts: all
  vars:
    greeting: Hello world! 

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

Fil-playbook ta 'hawn fuq, il-varjabbli tat-tislima hija sostitwita bil-valur Hello world! meta titmexxa l-playbook. Il-playbook sempliċement jistampa l-messaġġ Hello world! meta eżegwit.

Barra minn hekk, jista 'jkollok lista jew firxa ta' varjabbli kif muri:

Il-playbook hawn taħt juri varjabbli msejħa kontinenti. Il-varjabbli għandha 5 valuri differenti - ismijiet tal-kontinenti. Kull wieħed minn dawn il-valuri jista' jiġi aċċessat faċilment billi tuża l-indiċi 0 bħala l-ewwel varjabbli.

L-eżempju tal-playbook hawn taħt jirkupra u juri l-Asja (Indiċi 1).

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

Il-lista varjabbli tista' tkun strutturata bl-istess mod kif muri:

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

Biex telenka l-oġġetti kollha fil-lista, uża l-modulu with_items. Dan se loop permezz tal-valuri kollha fil-firxa.

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

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

Tip ieħor ta 'varjabbli Ansible huwa l-varjabbli dizzjunarju.

Il-varjabbli tad-dizzjunarju huma wkoll appoġġjati fil-playbook. Biex tiddefinixxi l-varjabbli tad-dizzjunarju, sempliċement identifika l-par ta’ valur-ċavetta eżatt taħt l-isem tal-varjabbli tad-dizzjunarju.

hosts: switch_f01

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

Fl-eżempju ta' hawn fuq, vlans hija l-varjabbli tad-dizzjunarju filwaqt li id u port huma l-pari ta' valur-ċavetta.

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

Għal port_id, peress li qed nibdew il-valur bit-test u mhux il-varjabbli, il-virgoletti mhumiex meħtieġa biex jiċċirkondaw iċ-ċingi kaboċċi.

2. Varjabbli Speċjali

Ansible jipprovdi lista ta 'varjabbli predefiniti li jistgħu jiġu referenzjati fil-mudelli Jinja2 u playbooks iżda ma jistgħux jiġu mibdula jew definiti mill-utent.

B'mod kollettiv, il-lista ta' varjabbli predefiniti Ansible tissejjaħ fatti Ansible u dawn jinġabru meta jitwettaq playbook.

Biex tikseb lista tal-varjabbli Ansible kollha, uża l-modulu tas-setup fil-kmand ad-hoc Ansible kif muri hawn taħt:

# ansible -m setup hostname

Dan juri l-output fil-format JSON kif muri:

# ansible -m setup localhost

Mill-output, nistgħu naraw li wħud mill-eżempji ta 'varjabbli speċjali Ansible jinkludu:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Hemm ħafna varjabbli speċjali oħra Ansible dawn huma biss ftit eżempji.

Dawn il-varjabbli jistgħu jintużaw f'mudell Jinja2 kif muri:

<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. Varjabbli tal-Inventarju

Fl-aħħar nett, fuq il-lista, għandna varjabbli tal-inventarju Ansible. Inventarju huwa fajl fil-format INI li fih l-hosts kollha li għandhom jiġu ġestiti minn Ansible.

Fl-inventarji, tista 'tassenja varjabbli lil sistema ospitanti u aktar tard tużaha f'playbook.

[web_servers]

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

Dan t'hawn fuq jista 'jiġi rappreżentat f'fajl YAML tal-playbook kif muri:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Jekk is-sistemi ospitanti jaqsmu l-istess varjabbli, tista 'tiddefinixxi grupp ieħor fil-fajl tal-inventarju biex tagħmilha inqas ingombranti u tevita ripetizzjoni bla bżonn.

Pereżempju:

[web_servers]

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

Dan t'hawn fuq jista' jiġi strutturat bħala:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

U fil-fajl YAML tal-playbook, dan se jiġi definit kif muri:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Fatti Ansible

Meta tmexxi playbooks, l-ewwel kompitu li jagħmel Ansible huwa l-eżekuzzjoni tal-kompitu tas-setup. Jien pjuttost ċert li trid li ltqajt mal-output:

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

Il-fatti Ansible m'huma xejn ħlief proprjetajiet tas-sistema jew biċċiet ta' informazzjoni dwar nodi remoti li tkun konness magħhom. Din l-informazzjoni tinkludi l-arkitettura tas-Sistema, il-verżjoni tal-OS, informazzjoni tal-BIOS, ħin u data tas-sistema, uptime tas-sistema, indirizz IP, u informazzjoni dwar il-ħardwer biex insemmu biss ftit.

Biex tikseb il-fatti dwar kwalunkwe sistema sempliċement uża l-modulu tas-setup kif muri fil-kmand hawn taħt:

# ansible -m setup hostname

Pereżempju:

# ansible -m setup database_server

Dan jistampa sett kbir ta' dejta fil-format JSON kif muri:

Il-fatti Ansible huma utli biex jgħinu lill-amministraturi tas-sistema liema operazzjonijiet għandhom iwettqu, pereżempju, skont is-sistema operattiva, huma kapaċi jkunu jafu liema pakketti tas-softwer iridu jiġu installati, u kif għandhom jiġu kkonfigurati, eċċ.

Fatti tad-dwana

Kont taf ukoll li tista 'toħloq il-fatti tad-dwana tiegħek li jistgħu jinġabru minn Ansible? Iva tista. Allura kif tmur dwar dan? Ejja nbiddlu l-gerijiet u naraw kif.

L-ewwel pass huwa li toħloq direttorju /etc/ansible/facts.d fuq in-nodu ġestit jew remot.

Ġewwa dan id-direttorju, oħloq fajl(i) b'estensjoni .fact. Dan il-fajl(i) se jirritorna data JSON meta l-playbook jitmexxa fuq in-nodu tal-kontroll Ansible, li jinkludi l-fatti l-oħra li Ansible jirkupra wara t-tmexxija tal-playbook.

Hawn eżempju ta 'fajl tal-fatti personalizzat imsejjaħ date_time.fact li jirkupra d-data u l-ħin.

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

Żid il-linji li ġejjin fiha.

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

Issejvja u oħroġ mill-fajl.

Issa assenja l-permessi ta 'eżekuzzjoni:

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

Issa, ħloqt playbook fuq Ansible control node imsejjaħ check_date.yml.

---

- hosts: webservers

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

Ehmeż il-fajl tal-fatti mal-varjabbli ansible_local. L-ansible_local jaħżen il-fatti tad-dwana kollha.

Issa mexxi l-playbook u osserva Ansible li qed jirkupra l-informazzjoni ffrankata fuq il-fajl tal-fatti:

# ansible_playbook check_date.yml

Dan iwassalna għall-aħħar ta 'dan it-tutorja dwar il-ħidma ma' varjabbli u fatti Ansible.