നിയന്ത്രിത നോഡുകളിൽ കോൺഫിഗറേഷനുകൾ സൃഷ്ടിക്കുന്നതിന് അൻസിബിളിൽ ടെംപ്ലേറ്റുകൾ എങ്ങനെ സൃഷ്ടിക്കാം - ഭാഗം 7


നിയന്ത്രിത നോഡുകളിൽ ഇഷ്uടാനുസൃതമാക്കിയ കോൺഫിഗറേഷനുകൾ സൃഷ്uടിക്കുന്നതിന് Ansible-ൽ ടെംപ്ലേറ്റുകൾ എങ്ങനെ സൃഷ്uടിക്കാമെന്നും ഉപയോഗിക്കാമെന്നും അൻസിബിൾ സീരീസിന്റെ ഈ ഭാഗം 7-ൽ നിങ്ങൾ പഠിക്കും. പ്ലേബുക്ക് ഫയലുകളുടെ ഏറ്റവും കുറഞ്ഞ എഡിറ്റിംഗ് ഉപയോഗിച്ച് വ്യത്യസ്ത സിസ്റ്റങ്ങളിൽ പ്രവർത്തിക്കുന്ന നിയന്ത്രിത നോഡുകളിലേക്ക് ഇഷ്uടാനുസൃത കോൺഫിഗറേഷനുകൾ എത്തിക്കുന്നതിനുള്ള എളുപ്പവും സൗഹൃദപരവുമായ മാർഗമാണ് അൻസിബിളിലെ ടെംപ്ലേറ്റിംഗ്.

ഒരു ടെംപ്ലേറ്റ് എന്താണെന്ന് നന്നായി മനസ്സിലാക്കാൻ, ഒരു ഐടി മാനേജർ തന്റെ ഡിപ്പാർട്ട്uമെന്റിനെ ഒരു കോക്ടെയ്ൽ പാർട്ടിക്ക് ക്ഷണിക്കാൻ ഒരു ഇമെയിൽ ഡ്രാഫ്റ്റ് ചെയ്യുന്നത് നമുക്ക് പരിഗണിക്കാം. ഓരോ അംഗത്തിനും ഇമെയിൽ അയയ്uക്കുകയും അവരുടെ പങ്കാളികൾക്കൊപ്പം ടാഗ് ചെയ്യാൻ ക്ഷണിക്കുകയും ചെയ്യുന്നു.

ഇമെയിലിന്റെ ബോഡി അതേപടി നിലനിൽക്കുന്ന തരത്തിൽ ഇമെയിൽ ഇഷ്uടാനുസൃതമാക്കിയിരിക്കുന്നു, എന്നാൽ വിലാസക്കാരും അവരുടെ പങ്കാളികളുടെ പേരുകളും വ്യത്യാസപ്പെടുന്നു. ഇമെയിൽ ടെംപ്ലേറ്റായി മാറുന്നു, അതേസമയം സ്വീകർത്താക്കളും ബന്ധപ്പെട്ട പങ്കാളികളും വേരിയബിളുകളാണ്.

അതൊരു പൊതു ഉദാഹരണമായിരുന്നു. ഡൈനാമിക് ഉള്ളടക്കമോ എക്uസ്uപ്രഷനുകളോ സൃഷ്uടിക്കാൻ ഉപയോഗിക്കുന്ന പൈത്തൺ ചട്ടക്കൂടുകൾക്കായുള്ള ആധുനിക ടെംപ്ലേറ്റിംഗ് എഞ്ചിനായ ജിഞ്ച2 ആണ് അൻസിബിൾ ഉപയോഗിക്കുന്നത്. ഒന്നിലധികം സെർവറുകൾക്കായി ഇഷ്uടാനുസൃത കോൺഫിഗറേഷൻ ഫയലുകൾ സൃഷ്ടിക്കുമ്പോൾ ടെംപ്ലേറ്റിംഗ് വളരെ ഉപയോഗപ്രദമാണ്, എന്നാൽ അവയിൽ ഓരോന്നിനും അതുല്യമാണ്.

നിർവചിച്ചിരിക്കുന്ന ഒരു വേരിയബിൾ എൻക്ലോസ് ചെയ്യാൻ Jinja2 ഇരട്ട ചുരുണ്ട ബ്രേസുകൾ {{ ... }} ഉപയോഗിക്കുന്നു. അഭിപ്രായങ്ങൾക്ക്, {{# #} ഉപയോഗിക്കുക, സോപാധികമായ പ്രസ്താവനകൾക്ക് {% … %} ഉപയോഗിക്കുക.

നിങ്ങളുടെ നെറ്റ്uവർക്കിൽ ഹോസ്റ്റ് സിസ്റ്റങ്ങളുള്ള VLAN-കളുടെ ഒരു ഡാറ്റ മോഡൽ നിങ്ങൾക്ക് ഉണ്ടെന്ന് നമുക്ക് അനുമാനിക്കാം, അത് കാണിച്ചിരിക്കുന്നതുപോലെ അതത് VLAN-കളിലേക്ക് തള്ളാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നു.

vlans:
  - id: 10
    name: LB
  - id: 20
    name: WB_01
  - id: 30
    name: WB_02
  - id: 40
    name: DB

ഈ കോൺഫിഗറേഷൻ റെൻഡർ ചെയ്യുന്നതിന്, കാണിച്ചിരിക്കുന്നതുപോലെ vlans.j2 എന്ന് വിളിക്കപ്പെടുന്ന ജിഞ്ച2 ടെംപ്ലേറ്റ് ദൃശ്യമാകും. നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, vlan.id, vlan.name എന്നീ വേരിയബിളുകൾ ചുരുണ്ട ബ്രേസുകളിൽ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്.

vlan {{ vlan.id }}
  name {{ vlan.name }}

വ്യത്യസ്uത ഹോസ്റ്റ് മെഷീനുകൾ സ്ഥാപിക്കുന്ന ഒരു പ്ലേബുക്കിൽ അതെല്ലാം ഒരുമിച്ച് ചേർത്താൽ, ഇത് കാണിച്ചിരിക്കുന്നതുപോലെ ദൃശ്യമാകും:

    - hosts
  tasks:
    - name: Rendering VLAN configuration
      template:
         src: vlans.j2
         dest: "vlan_configs/{{ inventory_hostname }}.conf"

ഉദാഹരണം 1: വ്യത്യസ്ത ഡിസ്ട്രോകളിൽ വെബ് സെർവറുകൾ ക്രമീകരിക്കുന്നു

ഈ ഉദാഹരണത്തിൽ, CentOS & Ubuntu പ്രവർത്തിക്കുന്ന 2 വെബ് സെർവറുകളുടെ ഹോസ്റ്റ്നാമത്തെയും OS-നെയും കുറിച്ചുള്ള വിവരങ്ങൾ പ്രദർശിപ്പിക്കുന്ന index.html ഫയലുകൾ ഞങ്ങൾ സൃഷ്ടിക്കും.

Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 -  IP address: 173.82.115.165

രണ്ട് സെർവറുകളിലും അപ്പാച്ചെ വെബ്uസെർവർ ഇതിനകം ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട്.

അതിനാൽ, കാണിച്ചിരിക്കുന്നതുപോലെ നമുക്ക് ഒരു playbook test_server.yml സൃഷ്ടിക്കാം:

---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777

ഞങ്ങളുടെ ജിൻജ ഫയൽ ടെംപ്ലേറ്റ് index.html.j2 ആണ്, അത് ഓരോ വെബ്സെർവറിലുമുള്ള index.html ഫയലിലേക്ക് തള്ളപ്പെടും. ഇത് ഒരു jinja2 ഫയലാണെന്ന് സൂചിപ്പിക്കാൻ എല്ലായ്uപ്പോഴും .j2 എന്ന വിപുലീകരണം അവസാനം ഇടാൻ ഓർമ്മിക്കുക.

നമുക്ക് ഇപ്പോൾ index.html.j2 എന്ന ടെംപ്ലേറ്റ് ഫയൽ ഉണ്ടാക്കാം.

<html>
<center>
   <h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
   <h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>

ഈ ടെംപ്ലേറ്റ് ഒരു അടിസ്ഥാന HTML ഫയലാണ്, അവിടെ ansible_hostname, ansible_os_family എന്നിവ ബിൽറ്റ്-ഇൻ വേരിയബിളുകളാണ്, അത് ബ്രൗസറിലെ വ്യക്തിഗത വെബ്uസെർവറുകളുടെ ബന്ധപ്പെട്ട ഹോസ്റ്റ്നാമങ്ങളും ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളും ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കും.

ഇപ്പോൾ, നമുക്ക് പ്ലേബുക്ക് പ്രവർത്തിപ്പിക്കാം.

# ansible-playbook test_server.yml

ഇനി നമുക്ക് CentOS 7, ഉബുണ്ടു വെബ്uസെർവറുകൾക്കായി വെബ്uപേജുകൾ വീണ്ടും ലോഡുചെയ്യാം.

നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, ഓരോ സെർവറിലും OS-ന്റെ ഹോസ്റ്റ്നാമത്തെയും കുടുംബത്തെയും കുറിച്ചുള്ള വ്യത്യസ്ത വിവരങ്ങൾ പ്രദർശിപ്പിച്ചിരിക്കുന്നു. ജിഞ്ജ2 ടെംപ്ലേറ്റിംഗ് എത്ര രസകരമാണ്!

ഫിൽട്ടറുകൾ:

ചിലപ്പോൾ, ഒരു വേരിയബിളിന്റെ മൂല്യം ഒരു പ്രത്യേക രീതിയിൽ ദൃശ്യമാകുന്ന ഒരു സ്ട്രിംഗ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാൻ നിങ്ങൾ തീരുമാനിച്ചേക്കാം.

ഉദാഹരണത്തിന്, മുമ്പത്തെ ഉദാഹരണത്തിൽ, അൻസിബിൾ വേരിയബിളുകൾ വലിയക്ഷരത്തിൽ ദൃശ്യമാക്കാൻ നമുക്ക് തീരുമാനിക്കാം. അങ്ങനെ ചെയ്യുന്നതിന്, വേരിയബിളിന്റെ മുകളിലെ മൂല്യം കൂട്ടിച്ചേർക്കുക. ഈ രീതിയിൽ വേരിയബിളിലെ മൂല്യം വലിയക്ഷര ഫോർമാറ്റിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു.

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT

അതുപോലെ, ലോവർ ആർഗ്യുമെന്റ് ചേർത്തുകൊണ്ട് നിങ്ങൾക്ക് സ്ട്രിംഗ് ഔട്ട്പുട്ട് ചെറിയക്ഷരത്തിലേക്ക് പരിവർത്തനം ചെയ്യാം.

{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat

കൂടാതെ, നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് മറ്റൊന്ന് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാം.

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

സിനിമയുടെ പേര് {{ movie_name }} => സിനിമയുടെ പേര് റിംഗ് ആണ്.

ഔട്ട്പുട്ട് മറ്റൊരു സ്ട്രിംഗ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാൻ, കാണിച്ചിരിക്കുന്നതുപോലെ മാറ്റിസ്ഥാപിക്കുക ആർഗ്യുമെന്റ് ഉപയോഗിക്കുക:

സിനിമയുടെ പേര് {{ movie_name | പകരം (\റിംഗ്\,”ഹീസ്റ്റ്”) }} => സിനിമയുടെ പേര് ഹീസ്റ്റ് എന്നാണ്.

ഒരു അറേയിലെ ഏറ്റവും ചെറിയ മൂല്യം വീണ്ടെടുക്കാൻ, മിനി ഫിൽട്ടർ ഉപയോഗിക്കുക.

{{ [ 2, 3, 4, 5, 6, 7 ] | min }}	=>	2

അതുപോലെ, ഏറ്റവും വലിയ സംഖ്യ വീണ്ടെടുക്കാൻ, പരമാവധി ഫിൽട്ടർ ഉപയോഗിക്കുക.

{{ [ 2, 3, 4, 5, 6, 7 ] | max }}	=>	7

അദ്വിതീയ മൂല്യങ്ങൾ പ്രദർശിപ്പിക്കുന്നതിന്, അദ്വിതീയ ഫിൽട്ടർ ഉപയോഗിക്കുക.

{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} =>	2, 3

0 നും മൂല്യത്തിനും ഇടയിലുള്ള ഒരു റാൻഡം നമ്പർ ലഭിക്കാൻ റാൻഡം ഫിൽട്ടർ ഉപയോഗിക്കുക.

{{ 50 | random }} =>  Some random number

ലൂപ്പുകൾ:

പ്രോഗ്രാമിംഗ് ഭാഷകളിലെന്നപോലെ, നമുക്ക് Ansible Jinja2 ലും ലൂപ്പുകൾ ഉണ്ട്.

ഉദാഹരണത്തിന്, സംഖ്യകളുടെ ഒരു ലിസ്റ്റ് അടങ്ങുന്ന ഒരു ഫയൽ ജനറേറ്റുചെയ്യുന്നതിന്, ചുവടെയുള്ള ഉദാഹരണത്തിൽ കാണിച്ചിരിക്കുന്നതുപോലെ ഫോർ ലൂപ്പ് ഉപയോഗിക്കുക:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{{ number }}
{% end for %}

ചില മൂല്യങ്ങൾ ഫിൽട്ടർ ചെയ്യാനും നേടാനും നിങ്ങൾക്ക് for loop-നെ if-else പ്രസ്താവനകളുമായി സംയോജിപ്പിക്കാനും കഴിയും.

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{% if number == 5 %}
         {{ number }}
{% endif%}
{% endfor %}

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