അൻസിബിൾ വേരിയബിളുകളും വസ്തുതകളും ഉപയോഗിച്ച് എങ്ങനെ പ്രവർത്തിക്കാം - ഭാഗം 8


ഈ അൻസിബിൾ സീരീസിൽ ഞങ്ങൾ വേരിയബിളുകൾ പരാമർശിച്ചു, നിങ്ങളുടെ മനസ്സിനെ അൽപ്പം കുലുക്കാനായി. ഒരു വേരിയബിൾ, പല പ്രോഗ്രാമിംഗ് ഭാഷകളിലെയും പോലെ, അടിസ്ഥാനപരമായി ഒരു മൂല്യത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു കീയാണ്.

സാധുവായ ഒരു വേരിയബിൾ നാമം എന്താണ്?

ഒരു വേരിയബിൾ നാമത്തിൽ അക്ഷരങ്ങൾ, അക്കങ്ങൾ, അണ്ടർ സ്കോറുകൾ അല്ലെങ്കിൽ 2 അല്ലെങ്കിൽ എല്ലാറ്റിന്റെയും മിശ്രിതം ഉൾപ്പെടുന്നു. എന്നിരുന്നാലും, ഒരു വേരിയബിൾ നാമം എല്ലായ്പ്പോഴും ഒരു അക്ഷരത്തിൽ ആരംഭിക്കണമെന്നും സ്uപെയ്uസുകൾ അടങ്ങിയിരിക്കരുതെന്നും ഓർമ്മിക്കുക.

സാധുവായതും അസ്വീകാര്യവുമായ വേരിയബിൾ പേരുകളുടെ ഏതാനും ഉദാഹരണങ്ങൾ നോക്കാം:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

വേരിയബിൾ തരങ്ങളെക്കുറിച്ച് നമുക്ക് ചർച്ച ചെയ്യാം:

1. പ്ലേബുക്ക് വേരിയബിളുകൾ

പ്ലേബുക്ക് വേരിയബിളുകൾ വളരെ എളുപ്പവും ലളിതവുമാണ്. ഒരു പ്ലേബുക്കിൽ ഒരു വേരിയബിൾ നിർവചിക്കുന്നതിന്, നിങ്ങളുടെ വേരിയബിളുകൾ ഇൻഡന്റേഷൻ ഉപയോഗിച്ച് എഴുതുന്നതിന് മുമ്പ് കീവേഡ് vars ഉപയോഗിക്കുക.

വേരിയബിളിന്റെ മൂല്യം ആക്uസസ് ചെയ്യാൻ, ഉദ്ധരണി ചിഹ്നങ്ങളാൽ പൊതിഞ്ഞ ഇരട്ട ചുരുണ്ട ബ്രേസുകൾക്കിടയിൽ അത് സ്ഥാപിക്കുക.

ഒരു ലളിതമായ പ്ലേബുക്ക് ഉദാഹരണം ഇതാ:

- hosts: all
  vars:
    greeting: Hello world! 

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

മുകളിലെ പ്ലേബുക്കിൽ, ഗ്രീറ്റിംഗ് വേരിയബിളിന് പകരം ഹലോ വേൾഡ് എന്ന മൂല്യം നൽകിയിട്ടുണ്ട്! പ്ലേബുക്ക് പ്രവർത്തിപ്പിക്കുമ്പോൾ. ഹലോ വേൾഡ് എന്ന സന്ദേശം പ്ലേബുക്ക് പ്രിന്റ് ചെയ്യുന്നു. എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ.

കൂടാതെ, കാണിച്ചിരിക്കുന്നതുപോലെ നിങ്ങൾക്ക് ഒരു പട്ടികയോ വേരിയബിളുകളുടെ ഒരു നിരയോ ഉണ്ടായിരിക്കാം:

താഴെയുള്ള പ്ലേബുക്ക് ഭൂഖണ്ഡങ്ങൾ എന്ന് വിളിക്കുന്ന ഒരു വേരിയബിൾ കാണിക്കുന്നു. വേരിയബിളിന് 5 വ്യത്യസ്ത മൂല്യങ്ങളുണ്ട് - ഭൂഖണ്ഡ നാമങ്ങൾ. ആദ്യ വേരിയബിളായി സൂചിക 0 ഉപയോഗിച്ച് ഈ മൂല്യങ്ങളിൽ ഓരോന്നും എളുപ്പത്തിൽ ആക്സസ് ചെയ്യാൻ കഴിയും.

താഴെയുള്ള പ്ലേബുക്കിന്റെ ഉദാഹരണം ഏഷ്യയെ വീണ്ടെടുക്കുകയും പ്രദർശിപ്പിക്കുകയും ചെയ്യുന്നു (ഇൻഡക്സ് 1).

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

കാണിച്ചിരിക്കുന്നതുപോലെ വേരിയബിൾ ലിസ്റ്റ് ഘടനാപരമായിരിക്കാം:

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

ലിസ്റ്റിലെ എല്ലാ ഇനങ്ങളും ലിസ്റ്റുചെയ്യുന്നതിന്, with_items മൊഡ്യൂൾ ഉപയോഗിക്കുക. ഇത് അറേയിലെ എല്ലാ മൂല്യങ്ങളിലൂടെയും ലൂപ്പ് ചെയ്യും.

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

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

മറ്റൊരു തരം അൻസിബിൾ വേരിയബിളാണ് നിഘണ്ടു വേരിയബിൾ.

നിഘണ്ടു വേരിയബിളുകൾ പ്ലേബുക്കിൽ അധികമായി പിന്തുണയ്ക്കുന്നു. നിഘണ്ടു വേരിയബിൾ നിർവചിക്കുന്നതിന്, നിഘണ്ടു വേരിയബിളിന്റെ പേരിന് തൊട്ടുതാഴെയുള്ള കീ-വാല്യൂ ജോഡി തിരിച്ചറിയുക.

hosts: switch_f01

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

മുകളിലെ ഉദാഹരണത്തിൽ, vlans എന്നത് നിഘണ്ടു വേരിയബിളാണ്, ഐഡിയും പോർട്ടും കീ-വാല്യൂ ജോഡികളാണ്.

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

port_id-ന് വേണ്ടി, നമ്മൾ മൂല്യം ആരംഭിക്കുന്നത് വാചകം ഉപയോഗിച്ചാണ്, വേരിയബിളല്ല എന്നതിനാൽ, ചുരുണ്ട ബ്രേസുകളെ ചുറ്റാൻ ഉദ്ധരണി ചിഹ്നങ്ങൾ ആവശ്യമില്ല.

2. പ്രത്യേക വേരിയബിളുകൾ

Jinja2 ടെംപ്ലേറ്റുകളിലും പ്ലേബുക്കുകളിലും പരാമർശിക്കാവുന്ന മുൻ നിർവചിക്കപ്പെട്ട വേരിയബിളുകളുടെ ഒരു ലിസ്റ്റ് Ansible നൽകുന്നു, എന്നാൽ ഉപയോക്താവിന് മാറ്റം വരുത്താനോ നിർവചിക്കാനോ കഴിയില്ല.

മൊത്തത്തിൽ, അൻസിബിൾ മുൻകൂട്ടി നിശ്ചയിച്ച വേരിയബിളുകളുടെ പട്ടികയെ അൻസിബിൾ വസ്തുതകൾ എന്ന് വിളിക്കുന്നു, ഒരു പ്ലേബുക്ക് എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ ഇവ ശേഖരിക്കപ്പെടുന്നു.

എല്ലാ Ansible വേരിയബിളുകളുടെയും ഒരു ലിസ്റ്റ് ലഭിക്കാൻ, താഴെ കാണിച്ചിരിക്കുന്നതുപോലെ Ansible ad-hoc കമാൻഡിലെ സെറ്റപ്പ് മൊഡ്യൂൾ ഉപയോഗിക്കുക:

# ansible -m setup hostname

ഇത് JSON ഫോർമാറ്റിൽ കാണിച്ചിരിക്കുന്നതുപോലെ ഔട്ട്പുട്ട് പ്രദർശിപ്പിക്കുന്നു:

# ansible -m setup localhost

ഔട്ട്പുട്ടിൽ നിന്ന്, അൻസിബിൾ സ്പെഷ്യൽ വേരിയബിളുകളുടെ ചില ഉദാഹരണങ്ങളിൽ ഇവ ഉൾപ്പെടുന്നുവെന്ന് നമുക്ക് കാണാൻ കഴിയും:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

മറ്റ് നിരവധി അൻസിബിൾ പ്രത്യേക വേരിയബിളുകൾ ഉണ്ട്, ഇവ ചില ഉദാഹരണങ്ങൾ മാത്രമാണ്.

കാണിച്ചിരിക്കുന്നതുപോലെ ഈ വേരിയബിളുകൾ ഒരു Jinja2 ടെംപ്ലേറ്റിൽ ഉപയോഗിക്കാം:

<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. ഇൻവെന്ററി വേരിയബിളുകൾ

അവസാനമായി, പട്ടികയിൽ, ഞങ്ങൾക്ക് അൻസിബിൾ ഇൻവെന്ററി വേരിയബിളുകൾ ഉണ്ട്. ഇൻവെന്ററി എന്നത് INI ഫോർമാറ്റിലുള്ള ഒരു ഫയലാണ്, അതിൽ Ansible മാനേജ് ചെയ്യേണ്ട എല്ലാ ഹോസ്റ്റുകളും അടങ്ങിയിരിക്കുന്നു.

ഇൻവെന്ററികളിൽ, നിങ്ങൾക്ക് ഒരു ഹോസ്റ്റ് സിസ്റ്റത്തിലേക്ക് ഒരു വേരിയബിൾ നൽകാനും പിന്നീട് അത് പ്ലേബുക്കിൽ ഉപയോഗിക്കാനും കഴിയും.

[web_servers]

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

മുകളിൽ കാണിച്ചിരിക്കുന്നതുപോലെ ഒരു പ്ലേബുക്ക് YAML ഫയലിൽ പ്രതിനിധീകരിക്കാം:

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

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

ഹോസ്റ്റ് സിസ്റ്റങ്ങൾ ഒരേ വേരിയബിളുകൾ പങ്കിടുന്നുവെങ്കിൽ, നിങ്ങൾക്ക് ഇൻവെന്ററി ഫയലിൽ മറ്റൊരു ഗ്രൂപ്പിനെ നിർവചിക്കാം, അത് ബുദ്ധിമുട്ടുള്ളതാക്കാനും അനാവശ്യമായ ആവർത്തനങ്ങൾ ഒഴിവാക്കാനും കഴിയും.

ഉദാഹരണത്തിന്:

[web_servers]

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

മേൽപ്പറഞ്ഞവ ഇനിപ്പറയുന്ന രീതിയിൽ ക്രമീകരിക്കാം:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

പ്ലേബുക്ക് YAML ഫയലിൽ, ഇത് കാണിച്ചിരിക്കുന്നതുപോലെ നിർവ്വചിക്കും:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

വ്യക്തമായ വസ്തുതകൾ

പ്ലേബുക്കുകൾ പ്രവർത്തിപ്പിക്കുമ്പോൾ, അൻസിബിൾ ചെയ്യുന്ന ആദ്യത്തെ ടാസ്ക് സെറ്റപ്പ് ടാസ്ക്കിന്റെ നിർവ്വഹണമാണ്. നിങ്ങൾ ഔട്ട്uപുട്ട് കണ്ടിട്ടുണ്ടാകുമെന്ന് എനിക്ക് നല്ല ഉറപ്പുണ്ട്:

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

നിങ്ങൾ കണക്റ്റുചെയ്uതിരിക്കുന്ന റിമോട്ട് നോഡുകളെക്കുറിച്ചുള്ള സിസ്റ്റം പ്രോപ്പർട്ടികൾ അല്ലെങ്കിൽ വിവരങ്ങളുടെ ഭാഗങ്ങൾ അല്ലാതെ മറ്റൊന്നുമല്ല അൻസിബിൾ വസ്തുതകൾ. ഈ വിവരങ്ങളിൽ സിസ്റ്റം ആർക്കിടെക്ചർ, OS പതിപ്പ്, BIOS വിവരങ്ങൾ, സിസ്റ്റം സമയവും തീയതിയും, സിസ്റ്റം പ്രവർത്തന സമയം, IP വിലാസം, ഹാർഡ്uവെയർ വിവരങ്ങൾ എന്നിവ ഉൾപ്പെടുന്നു.

ഏതെങ്കിലും സിസ്റ്റത്തെ കുറിച്ചുള്ള വസ്തുതകൾ ലഭിക്കുന്നതിന് താഴെയുള്ള കമാൻഡിൽ കാണിച്ചിരിക്കുന്നതുപോലെ സെറ്റപ്പ് മൊഡ്യൂൾ ഉപയോഗിക്കുക:

# ansible -m setup hostname

ഉദാഹരണത്തിന്:

# ansible -m setup database_server

ഇത് കാണിച്ചിരിക്കുന്നതുപോലെ JSON ഫോർമാറ്റിൽ ഒരു വലിയ കൂട്ടം ഡാറ്റ പ്രിന്റ് ചെയ്യുന്നു:

സിസ്റ്റം അഡ്മിനിസ്uട്രേറ്റർമാരെ ഏതൊക്കെ പ്രവർത്തനങ്ങൾ നടത്തണമെന്ന് സഹായിക്കുന്നതിന് അൻസിബിൾ വസ്തുതകൾ സുലഭമാണ്, ഉദാഹരണത്തിന്, ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തെ ആശ്രയിച്ച്, ഏതൊക്കെ സോഫ്uറ്റ്uവെയർ പാക്കേജുകളാണ് ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതെന്നും അവ എങ്ങനെ കോൺഫിഗർ ചെയ്യണമെന്നും അവർക്ക് അറിയാൻ കഴിയും.

ഇഷ്uടാനുസൃത വസ്uതുതകൾ

അൻസിബിളിന് ശേഖരിക്കാൻ കഴിയുന്ന നിങ്ങളുടെ സ്വന്തം ഇഷ്uടാനുസൃത വസ്uതുതകൾ സൃഷ്uടിക്കാൻ കഴിയുമെന്നും നിങ്ങൾക്കറിയാമോ? അതെ, നിങ്ങൾക്ക് കഴിയും. അപ്പോൾ നിങ്ങൾ എങ്ങനെ പോകും? നമുക്ക് ഗിയർ മാറ്റി എങ്ങനെയെന്ന് നോക്കാം.

നിയന്ത്രിത അല്ലെങ്കിൽ റിമോട്ട് നോഡിൽ ഒരു /etc/ansible/facts.d ഡയറക്ടറി സൃഷ്ടിക്കുക എന്നതാണ് ആദ്യപടി.

ഈ ഡയറക്uടറിക്കുള്ളിൽ, ഒരു .fact വിപുലീകരണത്തോടുകൂടിയ ഒരു ഫയൽ(കൾ) സൃഷ്uടിക്കുക. അൻസിബിൾ കൺട്രോൾ നോഡിൽ പ്ലേബുക്ക് റൺ ചെയ്യുമ്പോൾ ഈ ഫയൽ(കൾ) JSON ഡാറ്റ നൽകും, ഒരു പ്ലേബുക്ക് റണ്ണിന് ശേഷം Ansible വീണ്ടെടുക്കുന്ന മറ്റ് വസ്തുതകൾ ഇതിൽ ഉൾപ്പെടുന്നു.

തീയതിയും സമയവും വീണ്ടെടുക്കുന്ന date_time.fact എന്ന ഇഷ്uടാനുസൃത വസ്തുത ഫയലിന്റെ ഒരു ഉദാഹരണം ഇതാ.

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

അതിൽ താഴെ പറയുന്ന വരികൾ ചേർക്കുക.

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

ഫയൽ സംരക്ഷിച്ച് പുറത്തുകടക്കുക.

ഇപ്പോൾ എക്സിക്യൂട്ട് അനുമതികൾ നൽകുക:

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

ഇപ്പോൾ, ഞാൻ അൻസിബിൾ കൺട്രോൾ നോഡിൽ check_date.yml എന്ന പേരിൽ ഒരു പ്ലേബുക്ക് സൃഷ്ടിച്ചു.

---

- hosts: webservers

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

ansible_local വേരിയബിളിലേക്ക് വസ്തുത ഫയൽ കൂട്ടിച്ചേർക്കുക. ansible_local എല്ലാ ഇഷ്uടാനുസൃത വസ്uതുതകളും സംഭരിക്കുന്നു.

ഇപ്പോൾ പ്ലേബുക്ക് പ്രവർത്തിപ്പിച്ച് വസ്തുത ഫയലിൽ സംരക്ഷിച്ചിരിക്കുന്ന അൻസിബിൾ വീണ്ടെടുക്കൽ വിവരങ്ങൾ നിരീക്ഷിക്കുക:

# ansible_playbook check_date.yml

അൻസിബിൾ വേരിയബിളുകളും വസ്തുതകളും ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നതിനുള്ള ഈ ട്യൂട്ടോറിയലിന്റെ അവസാനത്തിലേക്ക് ഇത് ഞങ്ങളെ എത്തിക്കുന്നു.