Unsaon Pagtrabaho uban sa Masaligan nga mga Variable ug Kamatuoran - Bahin 8
Gihisgotan namon ang mga variable sa kini nga serye sa Ansible ug aron ma-jogging ang imong hunahuna gamay. Ang usa ka variable, sama sa daghang mga programming language, usa ka yawe nga nagrepresentar sa usa ka kantidad.
Unsa ang Naglangkob sa usa ka Balido nga Ngalan sa Variable?
Ang usa ka variable nga ngalan naglakip sa mga letra, numero, underscore o kombinasyon sa 2 o tanan niini. Bisan pa, hinumdomi nga ang usa ka variable nga ngalan kinahanglan kanunay magsugod sa usa ka letra ug dili kinahanglan adunay mga espasyo.
Atong tan-awon ang pipila ka mga pananglitan sa balido ug dili madawat nga variable nga mga ngalan:
football foot_ball football20 foot_ball20
foot ball 20 foot-ball
Atong hisgotan ang mga lahi nga lahi:
1. Mga Variable sa Playbook
Ang mga variable sa Playbook sayon ug prangka. Aron matino ang usa ka variable sa usa ka playbook, gamita lang ang keyword vars sa dili pa isulat ang imong mga variable nga adunay indentation.
Aron ma-access ang bili sa variable, ibutang kini taliwala sa double curly braces nga gisukip sa mga marka sa kinutlo.
Ania ang usa ka yano nga pananglitan sa playbook:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
Sa playbook sa ibabaw, ang variable sa pagtimbaya gipulihan sa kantidad nga Hello world! sa diha nga ang playbook gipadagan. Ang playbook yanong nag-imprinta sa mensahe nga Hello world! sa dihang gipatuman.
Dugang pa, mahimo kang adunay usa ka lista o usa ka han-ay sa mga variable sama sa gipakita:
Ang playbook sa ubos nagpakita sa usa ka variable nga gitawag og mga kontinente. Ang variable adunay 5 nga lainlaing mga kantidad - mga ngalan sa kontinente. Ang matag usa niini nga mga kantidad dali nga ma-access gamit ang indeks 0 ingon ang una nga variable.
Ang pananglitan sa playbook sa ubos nagkuha ug nagpakita sa Asia (Index 1).
- hosts: all vars: continents: - Africa - Asia - South America - North America - Europe tasks: - name: Ansible List variable Example debug: msg: "{{ continents [1] }}"
Ang lista sa variable mahimo nga parehas nga istruktura sama sa gipakita:
vars: Continents: [Africa, Asia, South America, North America, Europe]
Aron ilista ang tanang butang sa lista, gamita ang with_items module. Kini mag-loop sa tanan nga mga kantidad sa array.
- hosts: all vars: continents: [Africa, Asia, South America, North America, Europe] tasks: - name: Ansible array variables example debug: msg: "{{ item }}" with_items: - "{{ continents }}"
Ang laing klase sa Ansible variable mao ang variable nga diksyonaryo.
Ang mga variable sa diksyonaryo dugang gisuportahan sa playbook. Aron ipasabot ang variable sa diksyonaryo, ilha lang ang key-value pair ubos lang sa ngalan sa variable nga diksyonaryo.
hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2
Sa pananglitan sa ibabaw, ang vlans mao ang variable sa diksyonaryo samtang ang id ug port mao ang key-value pairs.
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’] }}
Alang sa port_id, tungod kay gisugdan namon ang kantidad sa teksto ug dili ang variable, ang mga marka sa kinutlo dili kinahanglan aron palibutan ang mga kulot nga braces.
2. Espesyal nga mga Variable
Ang Ansible naghatag usa ka lista sa gitakda nang daan nga mga variable nga mahimong i-refer sa Jinja2 nga mga template ug playbook apan dili mabag-o o gihubit sa tiggamit.
Sa kinatibuk-an, ang lista sa Ansible predefined variables gitawag nga Ansible facts ug kini matigom kung ang usa ka playbook gipatuman.
Aron makakuha og lista sa tanang Ansible variables, gamita ang setup module sa Ansible ad-hoc command sama sa gipakita sa ubos:
# ansible -m setup hostname
Kini nagpakita sa output sa JSON format sama sa gipakita:
# ansible -m setup localhost
Gikan sa output, atong makita nga ang pipila sa mga pananglitan sa Ansible espesyal nga mga baryable naglakip sa:
ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux
Adunay daghang uban pang mga espesyal nga variable nga Ansible kini pipila ra nga mga pananglitan.
Kini nga mga variable mahimong magamit sa usa ka template sa Jinja2 sama sa gipakita:
<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. Mga Variable sa Imbentaryo
Sa katapusan, sa lista, kami adunay mga variable sa imbentaryo nga Ansible. Ang imbentaryo usa ka file sa INI nga format nga adunay tanan nga mga host nga dumalahon sa Ansible.
Sa mga imbentaryo, mahimo nimong i-assign ang usa ka variable sa usa ka host system ug sa ulahi gamiton kini sa usa ka playbook.
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=ubuntu http_port=8080
Ang sa ibabaw mahimong irepresentar sa usa ka playbook nga YAML file sama sa gipakita:
--- web_servers: web_server_1: ansible_user=centos http_port=80 web_server_2: ansible_user=ubuntu http_port=8080
Kung ang mga sistema sa host adunay parehas nga mga variable, mahimo nimong ipasabut ang lain nga grupo sa file sa imbentaryo aron mahimo kini nga dili kaayo hasol ug malikayan ang dili kinahanglan nga pagbalik-balik.
Pananglitan:
[web_servers] web_server_1 ansible_user=centos http_port=80 web_server_2 ansible_user=centos http_port=80
Ang naa sa ibabaw mahimong istruktura sama sa:
[web_servers] web_server_1 web_server_2 [web_servers:vars] ansible_user=centos http_port=80
Ug sa playbook YAML file, kini ipasabut ingon sa gipakita:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
Mahimong mga Kamatuoran
Kung nagdagan sa mga playbook, ang una nga buluhaton nga gihimo sa Ansible mao ang pagpatuman sa buluhaton sa pag-setup. Sigurado ko nga nakit-an nimo ang output:
TASK: [Gathering facts] *********
Ang masaligan nga mga kamatuoran wala’y lain gawas sa mga kabtangan sa sistema o mga piraso sa kasayuran bahin sa mga hilit nga node nga imong konektado. Kini nga impormasyon naglakip sa System architecture, ang OS version, BIOS information, system time and date, system uptime, IP address, ug hardware information sa paghisgot ug pipila lang.
Aron makuha ang mga kamatuoran bahin sa bisan unsang sistema gamita lang ang module sa pag-setup sama sa gipakita sa mando sa ubos:
# ansible -m setup hostname
Pananglitan:
# ansible -m setup database_server
Kini nag-imprinta sa usa ka dako nga set sa data sa JSON format sama sa gipakita:
Ang masaligan nga mga kamatuoran magamit sa pagtabang sa mga tagdumala sa sistema kung unsang mga operasyon ang himuon, pananglitan, depende sa operating system, nahibal-an nila kung unsang mga pakete sa software ang kinahanglan i-install, ug kung giunsa kini i-configure, ug uban pa.
Custom nga Kamatuoran
Nahibal-an ba usab nimo nga mahimo ka maghimo sa imong kaugalingon nga kostumbre nga mga kamatuoran nga mahimong makuha sa Ansible? Oo, mahimo nimo. Busa unsaon nimo kini? Atong ibalhin ang mga gear ug tan-awon kung giunsa.
Ang unang lakang mao ang paghimo og /etc/ansible/facts.d nga direktoryo sa gidumala o hilit nga node.
Sulod niini nga direktoryo, paghimo ug (mga) payl nga adunay .fact
extension. Kini nga (mga) file ibalik ang data sa JSON kung ang playbook gipadagan sa Ansible control node, nga naglakip sa ubang mga kamatuoran nga makuha sa Ansible pagkahuman sa usa ka playbook run.
Ania ang usa ka pananglitan sa usa ka naandan nga fact file nga gitawag date_time.fact nga nagkuha sa petsa ug oras.
# mkdir -p /etc/ansible/facts.d # vim /etc/ansible/facts.d/date_time.fact
Idugang ang mosunod nga mga linya niini.
#!/bin/bash DATE=`date` echo "{\"date\" : \"${DATE}\"}"
Pag-save ug paggawas sa file.
Karon i-assign ang execute permissions:
# chmod +x /etc/ansible/facts.d/date_time.fact
Karon, naghimo ko og playbook sa Ansible control node nga gitawag og check_date.yml.
--- - hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
Idugang ang fact file sa ansible_local variable. Ang ansible_local nagtipig sa tanan nga naandan nga mga kamatuoran.
Karon padagana ang playbook ug tan-awa ang Ansible nga pagkuha sa impormasyon nga gitipigan sa fact file:
# ansible_playbook check_date.yml
Kini nagdala kanato ngadto sa katapusan sa niini nga panudlo sa pagtrabaho uban sa Ansible variables ug mga kamatuoran.