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.