Jinsi ya Kufanya Kazi kwa Vigezo Vinavyofaa na Ukweli - Sehemu ya 8


Tumetaja vigeu katika mfululizo huu wa Ansible na ili tu kuchezesha akili yako kidogo. Tofauti, kama ilivyo katika lugha nyingi za programu, kimsingi ni ufunguo unaowakilisha thamani.

Nini Hujumuisha Jina Sahihi la Kigeu?

Jina badilifu linajumuisha herufi, nambari, mistari chini au mchanganyiko wa 2 au zote. Hata hivyo, kumbuka kwamba jina la kutofautiana lazima daima lianze na barua na haipaswi kuwa na nafasi.

Wacha tuangalie mifano michache ya majina ya kutofautisha halali na yasiyokubalika:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

Wacha tujadili aina tofauti:

1. Vigezo vya Kitabu cha kucheza

Vigezo vya Playbook ni rahisi sana na moja kwa moja. Ili kufafanua lahaja katika kitabu cha kucheza, tumia tu neno msingi vars kabla ya kuandika vigeu vyako kwa ujongezaji.

Ili kufikia thamani ya kutofautiana, kuiweka kati ya braces mbili za curly zilizofungwa na alama za nukuu.

Hapa kuna mfano rahisi wa kitabu cha kucheza:

- hosts: all
  vars:
    greeting: Hello world! 

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

Katika kitabu cha kucheza kilicho hapo juu, kigezo cha salamu kinabadilishwa na thamani ya Hello world! wakati kitabu cha kucheza kinaendeshwa. Kitabu cha kucheza huchapisha kwa urahisi ujumbe Hello world! inapotekelezwa.

Kwa kuongeza, unaweza kuwa na orodha au safu ya anuwai kama inavyoonyeshwa:

Kitabu cha kucheza hapa chini kinaonyesha kigezo kinachoitwa mabara. Tofauti inashikilia maadili 5 tofauti - majina ya bara. Kila moja ya maadili haya yanaweza kupatikana kwa urahisi kwa kutumia index 0 kama kigezo cha kwanza.

Mfano wa kitabu cha kucheza hapa chini hurejesha na kuonyesha Asia (Fahirisi 1).

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

Orodha ya kutofautisha inaweza pia kupangwa kama inavyoonyeshwa:

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

Ili kuorodhesha vipengee vyote kwenye orodha, tumia moduli ya with_items. Hii itapitia maadili yote kwenye safu.

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

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

Aina nyingine ya kutofautiana kwa Ansible ni kutofautiana kwa kamusi.

Vigezo vya kamusi vinaauniwa pia katika kitabu cha kucheza. Ili kufafanua utofauti wa kamusi, tambua kwa urahisi jozi ya thamani ya ufunguo chini ya jina la kutofautisha la kamusi.

hosts: switch_f01

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

Katika mfano ulio hapo juu, vlans ni kigezo cha kamusi wakati kitambulisho na bandari ni jozi za thamani-msingi.

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

Kwa port_id, kwa kuwa tunaanza thamani kwa maandishi na sio kutofautisha, alama za nukuu sio lazima kuzunguka viunga vilivyopinda.

2. Vigezo Maalum

Ansible hutoa orodha ya vigeu vilivyoainishwa awali ambavyo vinaweza kurejelewa katika violezo na vitabu vya kucheza vya Jinja2 lakini haviwezi kubadilishwa au kubainishwa na mtumiaji.

Kwa pamoja, orodha ya viambajengo vilivyobainishwa awali vinarejelewa kama Mambo Yanayofaa na haya hukusanywa wakati kitabu cha kucheza kinapotekelezwa.

Ili kupata orodha ya anuwai zote Zinazofaa, tumia moduli ya usanidi katika Ansible ad-hoc amri kama inavyoonyeshwa hapa chini:

# ansible -m setup hostname

Hii inaonyesha matokeo katika umbizo la JSON kama inavyoonyeshwa:

# ansible -m setup localhost

Kutoka kwa matokeo, tunaweza kuona kwamba baadhi ya mifano ya Vigezo maalum vya Ansible ni pamoja na:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Kuna vigezo vingine vingi vya Ansible hii ni mifano michache tu.

Vigezo hivi vinaweza kutumika katika kiolezo cha Jinja2 kama inavyoonyeshwa:

<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. Vigezo vya Mali

Mwishowe, kwenye orodha, tunayo anuwai za hesabu zinazofaa. Orodha ni faili katika umbizo la INI ambalo lina seva pangishi zote zinazopaswa kusimamiwa na Ansible.

Katika orodha, unaweza kugawa kigezo kwa mfumo wa mwenyeji na baadaye uitumie kwenye kitabu cha kucheza.

[web_servers]

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

Yaliyo hapo juu yanaweza kuwakilishwa katika kitabu cha kucheza faili ya YAML kama inavyoonyeshwa:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Ikiwa mifumo ya seva pangishi inashiriki vigezo sawa, unaweza kufafanua kundi lingine katika faili ya hesabu ili kuifanya iwe ya shida na kuepuka marudio yasiyo ya lazima.

Kwa mfano:

[web_servers]

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

Yaliyomo hapo juu yanaweza kupangwa kama ifuatavyo:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

Na katika kitabu cha kucheza faili ya YAML, hii itafafanuliwa kama inavyoonyeshwa:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Mambo Yanayofaa

Wakati wa kuendesha vitabu vya kucheza, kazi ya kwanza ambayo Ansible hufanya ni utekelezaji wa kazi ya usanidi. Nina hakika kuwa lazima umepata matokeo:

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

Ukweli unaowezekana sio chochote ila sifa za mfumo au vipande vya habari kuhusu nodi za mbali ambazo umeunganisha. Maelezo haya yanajumuisha usanifu wa Mfumo, toleo la Mfumo wa Uendeshaji, maelezo ya BIOS, saa na tarehe ya mfumo, saa ya juu ya mfumo, anwani ya IP, na maelezo ya maunzi kutaja machache tu.

Ili kupata ukweli juu ya mfumo wowote tumia tu moduli ya usanidi kama inavyoonyeshwa kwenye amri hapa chini:

# ansible -m setup hostname

Kwa mfano:

# ansible -m setup database_server

Hii inachapisha seti kubwa ya data katika umbizo la JSON kama inavyoonyeshwa:

Mambo yanayoeleweka yanafaa katika kuwasaidia wasimamizi wa mfumo ambao shughuli za kufanya, kwa mfano, kulingana na mfumo wa uendeshaji, wanaweza kujua ni vifurushi vipi vya programu vinavyohitaji kusakinishwa, na jinsi vinapaswa kusanidiwa, nk.

Desturi Ukweli

Je, unajua pia kwamba unaweza kuunda ukweli wako binafsi ambao unaweza kukusanywa na Ansible? Ndio unaweza. Kwa hivyo unaifanyaje? Hebu tubadilishe gia tuone jinsi gani.

Hatua ya kwanza ni kuunda saraka /etc/ansible/facts.d kwenye nodi inayosimamiwa au ya mbali.

Ndani ya saraka hii, tengeneza faili ukitumia kiendelezi cha .fact. Faili hizi zitarejesha data ya JSON wakati kitabu cha kucheza kinaendeshwa kwenye nodi ya udhibiti Inayowezekana, ambayo inajumuisha mambo mengine ambayo Ansible hupata baada ya kitabu cha kucheza kukimbia.

Huu hapa ni mfano wa faili maalum ya ukweli inayoitwa date_time.fact ambayo hurejesha tarehe na saa.

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

Ongeza mistari ifuatayo ndani yake.

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

Hifadhi na uondoke faili.

Sasa toa ruhusa za kutekeleza:

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

Sasa, nimeunda kitabu cha kucheza kwenye nodi ya kudhibiti Ansible inayoitwa check_date.yml.

---

- hosts: webservers

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

Ongeza faili ya ukweli kwa kigezo cha ansible_local. Ansible_local huhifadhi ukweli wote maalum.

Sasa endesha kitabu cha kucheza na uangalie Ansible retrieping information iliyohifadhiwa kwenye faili ya ukweli:

# ansible_playbook check_date.yml

Hii inatuleta hadi mwisho wa somo hili la kufanya kazi na viambajengo vinavyofaa na ukweli.