எல்லா கணிணிகளும் இனி உங்கள் வசம் – Ansible – பாகம் 3

Modules:

பல்வேறு பணிகளைச் செய்ய, Ansible ஆனது Modules களைப் பயன்படுத்துகிறது. Module மூலம் மென்பொருள் நிறுவுதல், கோப்புகளை நகல் எடுத்தல், உருவாக்குதல், திருத்துதல் என Commandline ல் நாம் செய்யும் எதையும் செய்யலாம். நேரடியாக command மூலம் செய்யாமல், அவற்றுக்கான module மூலம் செய்தால், பலன்கள் அதிகம்.
இந்த Module கள், ansible ன் முதலில் பெற்ற Facts, உண்மைகளைப் பொறுத்து, தாமாக தம் செயல்களை மாற்றிக் கொள்கின்றன.

Module இல்லாமலும் நேரடியாகக் கட்டளைகளை இயக்கலாம்.

ansible all -s -m shell -a ‘apt-get install nginx’

-s – sudo மூலம் இயக்க
-m shell – shell என்ற module ஐப் பயன்படுத்த
-a – இந்த argument மூலம் கட்டளைகளைத் தரலாம்.

ஆனால், இந்த முறை சரியானது அல்ல. ஒரு bash script செய்யும் வேலையை மட்டுமே இது செய்கிறது.

சரியான module ஐப் பயன்படுத்துவதன் மூலம், எந்தப் பிழையும் இன்றி கட்டளைகள் இயங்குவதை உறுதிப் படுத்தலாம். Indempotence அதாவது ஒரே வேலையை எந்த பாதிப்பும் இன்றி, எத்தனை முறை வேண்டுமானாலும் இயக்கிப் பார்க்கும் வசதியை இந்த module கள் தருகின்றன.

ansible all -s -m apt -a ‘pkg=nginx state=installed update_cache=true’
127.0.0.1 | success >> {
“changed”: false
}

இதில் apt என்ற மாடியூல் பயன்படுத்துகிறோம். இது apt-get update ஐ இயக்கிப் பின், nginx ஏற்கெனவே நிறுவப்பட்டுற்றதா என சோதிக்கிறது. இல்லையெனில் நிறுவி விடுகிறது. ஏற்கெனவே நிறுவப்பட்டிருந்தால், அப்படியே விட்டு விடுகிறது.

இதன் பலனாக”changed:false” என வருகிறது. மாற்றங்கள் ஏதும் செய்யப்படவில்லை என்பதைக் குறிக்கிறது. ஏற்கெனவே nginx நிறுவப்பட்டிருப்பதைக் கண்டறிந்ததால், புதிதாக மீண்டும் ஒரு முறை நிறுவவில்லை. இதை எத்தனை முறை வேண்டுமானாலும் இயக்கிப் பார்க்கலாம்.

இதில்,

-m apt = apt என்ற module ஐக் குறிக்கிறது.
-a ‘pkg=nginx state=installed update_cache=true’
pkg = நாம் நிறுவ விரும்பும் மென்பொருள் பெயர்
state= installed, updated, removed போன்ற நிலைகள்
update_cache = true இது repository ஐப் புதுப்பிக்கிறது. அதாவது apt-get update ஐ இயக்குகிறது.

இது போன்ற பல்வேறு வேலைகளை சேர்த்து செயல்படுத்த, playbooks என்ற அமைப்பில் எழுத வேண்டும்.

PlayBooks:

ஒரு PlayBook ஆனது, பல்வேறு வேலைகளை(Tasks) செய்யக்கூடியது. சாதாரணக் கட்டளைகள் தந்து இயக்குவதை விட, அவற்றை PlayBook ஆக மாற்றும்போது, நமக்கு அதிக வசதிகள் கிடைக்கின்றன.

PlayBooks, Roles  போன்ற Amsbile ன் கூறுகள் யாவும் YAML என்ற வடிவிலேயே இருக்கும். .yml என்ற extension கொண்டு சேமிக்கப் படுகின்றன

கோப்பு : nginx.yml


– hosts: local
tasks:
– name: Install Nginx
apt: pkg=nginx state=installed update_cache=true

இந்தTask ஆனது, முன்பு நாம் சொன்ன அதே கட்டளையைத்தான் இயக்குகிறது. ஆனால், இங்கு hosts என்பதை கவனிக்கவும். hosts:all என்பது hosts கோப்பில் உள்ள எல்லாக் கணிணிகளையும் குறிக்கும். இங்கு hosts:local என்று குறிப்பிட்டுள்ளதன் மூலம், local என்ற குழுவில் உள்ள கணிணிகளை மட்டும் கையாளுகிறோம். ansible-playbook என்ற கட்டளை மூலம் இதை இயக்கலாம்.

$ ansible-playbook -s nginx.yml

PLAY [local] ******************************************************************

GATHERING FACTS ***************************************************************
ok: [127.0.0.1]

TASK: [Install Nginx] *********************************************************
ok: [127.0.0.1]

PLAY RECAP ********************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0

 

இதை இயக்கிய பின்பும் எந்த மாற்றமும் இல்லை.  changed=0 என்பதை கவனிக்கவும். -s என்று தந்து sudo ஆக இயக்கவும். இப்போது அதிக விவரங்கள் தரப்படுகின்றன. இருந்தாலும் மாற்றம் இல்லை. ஏனெனில் நாம் ஏற்கெனவே nginx ஐ நிறுவி விட்டோம். nginx க்கு பதில் வேறு ஒரு மென்பொருளை nginx.yml ல் தந்து இயக்கிப் பார்க்கவும். உதாரணம் – mc, mplayer

Handlers:

Handler என்பது Task போலத்தான். நாம் சொல்லும் வேலையை செய்து முடித்து விடும். ஆனால், இதை வேறு ஒரு Task வழியாகவே இயக்கமுடியும். இது ஒரு Event System போல. அதாவது ஒரு செயலுக்காகக் காத்திருந்து, அது நடந்தவுடன் வேறு ஒரு செயலை செய்தல் போல.

இதன் மூலம் பல துணைச் செயல்கள் செய்யலாம். உதாரணம், ஒரு Network service நிறுவியவுடன், அதைத் தொடங்குதல். ஒரு configuration file மாற்றியவுடன், அதன் service ஐ reload செய்தல் போன்றவை.

உதாரணம்.


– hosts: local
tasks:
– name: Install Nginx
apt: pkg=nginx state=installed update_cache=true
notify:
– Start Nginx

handlers:
– name: Start Nginx
service: name=nginx state=started

இங்கு நாம் எழுதிய handler ன் பெயர் Start Nginx. இதை nginx ஐ நிறுவும் Task ல் notify என்ற பகுதியில் அழைத்துள்ளோம்.  ஒரு Task ல் Notify பகுதி இருந்தால், Task முடிந்தவுடன், Notify ல் கூறப்பட்டுள்ள handler  ஆனது இயக்கப்படுகிறது.

இங்கு நாம் எழுதிய handler ல் service என்ற மாடியூல் பயன்படுத்தப் படுகிறது. இதன் மூலம் start, stop, restart, reload ஆகிய செயல்களைச் செய்யலாம்.

இங்கு state=started என்று எழுதியுள்ளோம். Ansible க்கு நாம் விரும்பும் நிலையைச் சொன்னாலே போதும். அதற்கான மாற்றங்களையோ, செயல்களையோ தனியே சொல்ல வேண்டியதில்லை. இங்கு service nginx start என்று சொல்லாமல், state=started என்றே சொல்கிறோம். அதன்படி, nginx ஐ start செய்துவிடும். இப்போது இதை இயக்கிப் பார்க்கலாம்.

$ ansible-playbook -s nginx.yml

PLAY [local] ******************************************************************

GATHERING FACTS ***************************************************************
ok: [127.0.0.1]

TASK: [Install Nginx] *********************************************************
ok: [127.0.0.1]

NOTIFIED: [nginx | Start Nginx] ***********************************************
ok: [127.0.0.1]

PLAY RECAP ********************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0

nginx நிறுவப்பட்டு, பின் அது start செய்யப் படுகிறது. ஒரு task வெற்றிகரமாக இயக்கப்பட்டால் மட்டுமே, அதனை ஒட்டிய handler இயக்கப்படும். task இயங்கவில்லை என்றால், handler ம் அழைக்கப்படாது.

ஒரே playbookல் பல tasks, variables, பிற playbooks ஐக்கூட சேர்க்கலாம்.

 

த.சீனிவாசன்

tshrinivasan@gmail.com

%d bloggers like this: