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.