பல Taskகளைச் சேர்த்தல்
பல வேலைகளை ஒரே playbookல் சேர்ப்பது பற்றி பார்ப்போம்.
—
– hosts: local
vars:
– docroot: /var/www/serversforhackers.com/public
tasks:
– name: Add Nginx Repository
apt_repository: repo=’ppa:nginx/stable’ state=present
register: ppastable– name: Install Nginx
apt: pkg=nginx state=installed update_cache=true
when: ppastable|success
register: nginxinstalled
notify:
– Start Nginx– name: Create Web Root
when: nginxinstalled|success
file: dest={{ ‘{{‘ }} docroot {{ ‘}}’ }} mode=775 state=directory owner=www-data group=www-data
notify:
– Reload Nginxhandlers:
– name: Start Nginx
service: name=nginx state=started– name: Reload Nginx
service: name=nginx state=reloaded
இதில் மூன்று வேலைகள்(Tasks) உள்ளன.
1. Add Ngnix Repository
apt-repository என்ற மாடியூல் மூலம் மிகப்புதிய Ngnix ஐப் பெற அதன் Repository சேர்க்கப்படுகிறது.
2. Install Ngnix:
apt என்ற மாடியூல் மூலம் ngnix நிறுவப்படுகிறது.
3. Create WebRoot:
WebRoot directory உருவாக்கப்படுகிறது.
இங்கு register மற்றும் when என்ற குறிச்சொற்களைக் கவனிக்கவும்.
when என்பது எப்போது ஒரு குறிப்பிட்ட செயல் நடைபெற வேண்டும் என்பதைக் குறிக்கும்.
Add Ngnix Repository என்ற செயல் ppastable என்பதை அறிவிக்கிறது. இந்த ppastable என்பது பதிவு செய்யப்பட்டிருந்தால் மட்டுமே Install Ngnix என்ற செயல் நடைபெறும். இதை when:ppastable | success என்பதன் மூலம் செயல்மபடுத்துகிறோம். இவ்வாறு ஏற்கெனவே நடைபெற்ற செயல்களின் முடிவுகளின் அடிப்படையில் புதிய செயல்களை செய்யலாமா? அல்லது வேண்டாமா? என்பதை Ansible தானே முடிவு எடுக்குமாறு செய்யலாம்.
இங்கு vars என்ற பகுதியில் docroot என்ற variable இருப்பதைக் காணலாம். இது file module மூலம் destination என்பதைக் குறிக்க, பின்னர் பயன்படுவதைக் காண்க. இது docroot ல் நாம் சொல்லியுள்ள directory ஐ உருவாக்குகிறது.
இந்த playbook ஐப் பின்வருமாறு இயக்கலாம்.
ansible-playbook -s -k -u nithya ngnix.yml
இந்த playbook கோப்புகளை மேலும் ஒழுங்குபடுத்தி Roles ஆக மாற்றலாம்.
Roles:
ஒன்றோடொன்று தொடர்புடைய பல்வேறு Taskகளை ஒழுங்குபடுத்தி ஒன்று சேர்க்கலாம். தேவையான தகவல்களையும், கோப்புகளையும் ஒருங்கே, ஒரே நேரத்தில் தரலாம்.
உதாரணமாக, ngnix ஐ நிறுவுதல் என்பது, அதற்கான repository(PPA) சேர்த்தல், தேவையான packageகளை நிறுவுதல், configuration file ல் தேவையான மாற்றங்களைச் செய்தல் என்ற மூன்று நிலைகளைக் கொண்டது. repository சேர்த்தல், நிறுவுதல் ஆகிய செயல்களை playbook வழியே செய்துவிட்டோம். configuration செய்தல் என்பது பல்வேறு மாற்றங்களைக் கொண்டது. இவற்றை Role மூலம் எளிதாகச் செய்யலாம்.
configuration பகுதியில் நமக்கு variables, files, dynamic templates போன்ற பல தகவல்கள் தேவைப்படும். இவற்றை நன்கு ஒழுங்குபடுத்தி, தொடர்புடைய செயல்களை ஒன்று சேர்ப்பதே Role எனப்படும்.
Role ன் Directory Structure பின்வருமாறு இருக்கும்.
rolename
– files
– handlers
– meta
– templates
– tasks
– vars
இதன் ஒவ்வொரு directoryக்கு உள்ளேயும் main.yml என்ற கோப்பு இருக்க வேண்டும். இதை Ansible ஆனது தானே தேடிப் படித்து விடும்.
இப்போது, நமது ngnix.yml ஐ Role க்கு ஏற்ப பல்வேறு பகுதிகளாகப் பிரிக்கலாம்.
Files:
Files என்ற directory ல் நமக்குத் தேவையான configuration file போன்றவற்றை வைக்கலாம். அவை நாம் சொல்லும் இடங்களில் அப்படியே copy செய்யப்படும்.
சர்வர்களின் முக்கிய விவரங்களை ஏற்கெனவே முடிவு செய்து, அவற்றை configuration file ல் எழுதி, இங்கே வைக்கலாம்.
Ngnix ன் configuration ஐ இங்கிருந்து நகல் எடுக்கலாம். பின் தேவையான மாற்றங்கள் செய்து files directory ல் வைக்கலாம்.
nginx
– files
– – h5bp
பின்னர் copy module மூலம், இவை தக்க இடத்தில் நகல் எடுக்கப்படும்.
Handlers
முன்னர் ngnix.yml ல் நாம் எழுதிய எல்லா handler களையும் இந்த handlers directory க்குள் வைக்கலாம்.
handlers/mail.yml
—
– name: Start Nginx
service: name=nginx state=started– name: Reload Nginx
service: name=nginx state=reloaded
இதில் எழுதியபின், இவற்றை பிற கோப்புகளில் இருந்து எளிதாக அழைக்கலாம்.
Meta
ஒரு Roleக்கான metadata என்பதை இந்த directory குறிக்கிறது. ஒரு role ஆனது வேறு roleகளை சார்ந்து இருந்தால், அவற்றையும் இங்கே குறிப்பிடலாம். நமது ngnix role ஆனது ssl என்ற role ஐச் சார்ந்துள்ளது. அது ssl certificate ஐ நிறுவப் பயன்படுகிறது. இந்தச் சார்பு நிலையைப் பின்வருமாறு குறிப்பிடலாம்.
—
dependencies:
– { role: ssl }
நாம் ngnix role ஐ இயக்கும் போது, முதலில் ssl role இயக்கப்படும். பின்பே ngnix role இயக்கப்படும்.
இவ்வாறு சார்புகள் ஏதும் இல்லையெனில் meta directory ஐ காலியாக விடலாம். எதுவும் எழுதத் தேவையில்லை. அல்லது பின்வருமாறு main.yml ல் தரலாம்.
—
dependencies: []
Templates
Template வகைக் கோப்புகளில் பல்வேறு variable களைச் சேமிக்கலாம். இவை பைதான் மொழியின் Jinja2 Template Engine ஐ அடிப்படையாகக் கொண்டவை. .j2 என்ற extensionல் இவற்றைச் சேமிக்க வேண்டும்.
files module போன்றே இதிலும் main.yml தேவையில்லை.
உதாரணமா, ngnix க்கான ஒரு virtual host configuration ஐப் பார்ப்போம். இதில் பயன்படும் variable களை நாம் vars/mail.yml ல் சொல்லப் போகிறோம்.
கோப்பு – templates/kaniyam.com.conf
server {
# Enforce the use of HTTPS
listen 80 default_server;
server_name *.{{ ‘{{‘ }} domain {{ ‘}}’ }};
return 301 https://{{ ‘{{‘ }} domain {{ ‘}}’ }}$request_uri;
}server {
listen 443 default_server ssl;root /var/www/{{ ‘{{‘ }} domain {{ ‘}}’ }}/public;
index index.html index.htm index.php;access_log /var/log/nginx/{{ ‘{{‘ }} domain {{ ‘}}’ }}.log;
error_log /var/log/nginx/{{ ‘{{‘ }} domain {{ ‘}}’ }}-error.log error;server_name {{ ‘{{‘ }} domain {{ ‘}}’ }};
charset utf-8;
include h5bp/basic.conf;
ssl_certificate {{ ‘{{‘ }} ssl_crt {{ ‘}}’ }};
ssl_certificate_key {{ ‘{{‘ }} ssl_key {{ ‘}}’ }};
include h5bp/directive-only/ssl.conf;location /book {
return 301 book.{{ ‘{{‘ }} domain {{ ‘}}’ }};
}location / {
try_files $uri $uri/ /index.php$is_args$args;
}location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;include fastcgi_params; # fastcgi.conf for version 1.6.1+
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param ENV production;
}# Nginx status
# Nginx Plus only
#location /status {
# status;
# status_format json;
# allow 127.0.0.1;
# deny all;
#}location ~ ^/(fpmstatus|fpmping)$ {
access_log off;
allow 127.0.0.1;
deny all;
include fastcgi_params; # fastcgi.conf for version 1.6.1+
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
இது PHPக்கான ngnixன் பொதுவான configuration. இங்கு 3 variables பயன்படுத்தப்படுகின்றன.
1. domain
2. ssl_crt
3. ssl_keys
இவற்றை variables என்ற பகுதியில் வரையறுக்கப் போகிறோம்.
Variables
vars என்ற directory ல் உள்ள main.yml கோப்பில், நாம் பயன்படுத்தப் போகும் எல்லா variable களையும் எழுத வேண்டும். இங்கு சொல்லப்படும் variable களை, Role ன் உள்ளே எங்கு வேண்டுமானாலும் எளிதில் பயன்படுத்தலாம்.
கோப்பு – vars/main.yml
—
domain: kaniyam.com.com
ssl_key: /etc/ssl/kaniyam/kaniyam.key
ssl_crt: /etc/ssl/kaniyam/kaniyam.crt
இவையே நாம் முன்னர் பார்த்த Template ல் பயன்படுத்தப் படுகின்றன. இவை task களிலும் பயன்படுத்தப்படுகின்றன.
— தொடரும்
த.சீனிவாசன் tshrinivasan@gmail.com