எல்லா கணிணிகளும் இனி உங்கள் வசம் – Ansible – பாகம் 5 – நிறைவுப் பகுதி

Tasks:

மேற்கண்ட அனைத்தையும் பல்வேறு தொடர்ந்த செயல்பாடுகளின் தொகுப்பாக Task என்று வரையறுக்கலாம்.

கோப்பு – tasks/main.yml


– 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: Add H5BP Config
when: nginxinstalled|success
copy: src=h5bp dest=/etc/nginx owner=root group=root

– name: Disable Default Site
when: nginxinstalled|success
file: dest=/etc/nginx/sites-enabled/default state=absent

– name: Add SFH Site Config
when: nginxinstalled|success
register: sfhconfig
template: src=kaniyam.com.j2 dest=/etc/nginx/sites-available/{{ ‘{{‘ }} domain {{ ‘}}’  }}.conf owner=root group=root

– name: Enable SFH Site Config
when: sfhconfig|success
file: src=/etc/nginx/sites-available/{{ ‘{{‘ }} domain {{ ‘}}’  }}.conf dest=/etc/nginx/sites-enabled/{{ ‘{{‘ }} domain {{ ‘}}’  }}.conf state=link

– name: Create Web root
when: nginxinstalled|success
file: dest=/var/www/{{ ‘{{‘ }} domain {{ ‘}}’  }}/public mode=775 state=directory owner=www-data group=www-data
notify:
– Reload Nginx

– name: Web Root Permissions
when: nginxinstalled|success
file: dest=/var/www/{{ ‘{{‘ }} domain {{ ‘}}’  }} mode=775 state=directory owner=www-data group=www-data recurse=yes
notify:
– Reload Nginx

Nginx நிறுவத் தேவையான எல்லா செயல்பாடுகளும் இங்கு கூறப்பட்டுள்ளன. இதில் பின்வரும் செயல்கள் அதே வரிசையில் செயல்படுத்தப் படுகின்றன.

1. Nginx stable PPA repository சேர்த்தல்
2. Nginx நிறுவுதல். பின் Nginx ஐத் தொடங்குதல். nginxinstalled என்ற செய்தியை register செய்து மீதம் உள்ள taskகளைத் தொடர்தல்
3. H5BP configuration சேர்த்தல்
4. sites-enabled என்ற directory ல் உள்ள default என்ற கோப்புக்கான symbolic link ஐ நீக்கி, இயல்பான virtual host ஐ நீக்குதல்
5. kaniyam.com.j2 என்ற virtual host template ஐ நகல் செய்தல்
6. sites enabled directory ல் symbolic link உருவாக்கி, virtual host ஐச் சேர்த்தல்
7. webroot folder உருவாக்குதல்
8. webroot folder க்கு மேலே உள்ள folderக்கு தேவையான permissions தருதல்

இங்கு copy, template, file போன்ற module பயன்படுவதைக் கவனிக்கவும். இவற்றுக்குத் தகுந்த arguments ஐத் தருவதன் மூலம் பல்வேறு செயல்களைச் செய்யலாம்.

state=absent என்பது ஒரு கோப்பு ஏற்கெனவே இருந்தால் அதை அழிக்கிறது. state=link ஆனது ஒரு symbolic link ஐ  உருவாக்குகிறது. ஒவ்வொரு மாடியூலுக்குமான ஆவணத்தில் இது போன்ற பல்வேறு குறிப்புகள் கிடைக்கின்றன.

Role-ஐ இயக்குதல்:

ஒரு Role-ஐ இயக்கும்முன், அந்த Role க்கான கோப்புகள் இருக்கும் இடத்தை சொல்லிவிட வேண்டும். இதை /etc/ansible/ansible.cfg என்ற கோப்பில் எழுத வேண்டும்.

roles_path    = /vagrant/ansible/roles

இதன்படி nginx role ன் இருப்பிடம்  /vagrant/ansible/roles/nginx

இப்போதைக்கு meta/mail.yml ல் உள்ள ssl பற்றிய விவரங்களை நீக்கி விடலாம்.

இப்போது ஒரு master yaml கோப்பில் role மற்றும் தேவையான host களைக் குறிப்பிடலாம்.

கோப்பு: server.yml


– hosts: all
roles:
– nginx

இந்த role-ஐ இயக்கலாம்.

ansible-playbook -s server.yml

# Or as I do with my Vagrant VM:
ansible-playbook -s -k -u vagrant server.yml

 

இதன் வெளிப்பாடு:

PLAY [all] ********************************************************************

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

TASK: [nginx | Add Nginx Repository] ******************************************
changed: [127.0.0.1]

TASK: [nginx | Install Nginx] *************************************************
changed: [127.0.0.1]

TASK: [nginx | Add H5BP Config] ***********************************************
changed: [127.0.0.1]

TASK: [nginx | Disable Default Site] ******************************************
changed: [127.0.0.1]

TASK: [nginx | Add SFH Site Config] *******************************************
changed: [127.0.0.1]

TASK: [nginx | Enable SFH Site Config] ****************************************
changed: [127.0.0.1]

TASK: [nginx | Create Web root] ***********************************************
changed: [127.0.0.1]

TASK: [nginx | Web Root Permissions] ******************************************
ok: [127.0.0.1]

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

NOTIFIED: [nginx | Reload Nginx] **********************************************
changed: [127.0.0.1]

PLAY RECAP ********************************************************************
127.0.0.1                  : ok=8   changed=7   unreachable=0    failed=0

அருமை. பாராட்டுக்கள். நாம் தேவையான எல்லா கூறுகளையும் இணைத்து ஒரு Role உருவாக்கி, அதன் மூலம் Nginx ஐ நிறுவி, configure செய்தும் விட்டோம்.

Facts:

Task களை இயக்கும் முன் Ansible ஆனது கணிணியின் பல்வேறு தகவல்களைச் சேகரிக்கிறது. இவை Facts எனப்படுகின்றன. CPU எண்ணிக்கை, IPV4, IPV6 முகவரிகள், disks, லினக்ஸ் பதிப்பு போன்ற பல்வேறு விவரங்கள் சேகரிக்கப் படுகின்றன.

இந்தத் தகவல்களை Task, Template களில் பயன்படுத்தலாம்.Nginx ல் worker processor ஐ, CPU Core ஐப் பொறுத்து பயன்படுத்தலாம். nginx.conf க்கான template பின்வருமாறு.

1 cpu core க்கானது.

user www-data www-data;
worker_processes {% verbatim %}{{ ansible_processor_cores }}{% endverbatim %};
pid /var/run/nginx.pid;

பல CPU Core க்கானது.

user www-data www-data;
worker_processes {% verbatim %}{{ ansible_processor_cores * ansible_processor_count }}{% endverbatim %};
pid /var/run/nginx.pid;

 

இந்தத் தகவல்கள் ansible_ என்று தொடங்கும் Global Variables ஆகும். இவற்றை variables பயன்படும் files, tasks, templates களில் பயன்படுத்தலாம்.

Vault:

சில நேரங்களில் password போன்ற முக்கிய விவரங்களை ansible templates ல் தர வேண்டியதிருக்கும். files, variables ல் இந்தத் தகவல்களைப் பாதுகாக்க Ansible Vault என்ற வசதி உள்ளது.

இந்த vault ஆனது variable file ஐ மட்டும் encrypt செய்கிறது. பிற files, templates ஐ encrypt செய்வதில்லை. encrypt செய்யப்பட்ட கோப்பு உருவாகும் முன் password கேட்கப்படும். அந்தக் கோப்பை, பிறகு மாற்றும் போதும் roles, playbook ஐ இயக்கும் போதும் இதே கடவுச்சொல்லைத் தர வேண்டும்.

உதாரணம் – புது vault file ஐ உருவாக்குதல்

ansible-vault create vars/main.yml
Vault Password:

கடவுச்சொல் தந்தவுடன், vim போன்ற ஒரு editor ல் இந்தக் கோப்பு திறக்கப்படும்.

ansible-vault ன் பிற arguments பின் வருமாறு.

$ ansible-vault -h
Usage: ansible-vault [create|decrypt|edit|encrypt|rekey] \
[–help] [options] file_name

Options:
-h, –help  show this help message and exit

 

பொதுவாக ansible-vault create/edit /path/to/file.yml என்றே பயன்படுத்துவோம். பிற பயனுள்ள கட்டளைகள்

create – புது கோப்பை உருவாக்கி encrypt செய்கிறது
decrypt – encrypted file ல் இருந்து plain text கோப்பை உருவாக்குகிறது
edit – ஏற்கெனவே encrypt செய்யப்பட்ட கோப்பை திருத்த உதவுகிறது
encrypt – plain text கோப்பை encypt செய்கிறது
rekey – ஏற்கெனவே encrypt செய்யப்பட்ட கோப்பிற்கு புது password வைக்கிறது

 

உதாரணம் – Users:

புது பயனர்களை உருவாக்கி, அவர்களுக்கு password வைக்கும்போது vault ஐப் பயன்படுத்தலாம். userக்கான ஒரு role-ல் variable file-ல்  password-ஐயும் public key-ஐயும் சேர்க்கலாம்.

உங்கள் public ssh key கோப்புகளை அனைவரும் பார்க்கலாம். தங்கள் சர்வர்களில் authorized keys கோப்பில் சேர்த்து, உங்களை login செய்ய அனுமதிக்கலாம். அதற்கான private key நம்மிடம் இருக்க வேண்டும்.

vault மூலம் encrypt செய்யப்பட்ட கோப்பு இதோ. இதை edit செய்யும் போது plain text ஆகவே இருக்கும்.

shrini_password: $6$lpQ1DqjZQ25gq9YW$mHZAmGhFpPVVv0JCYUFaDovu8u5EqvQi.Ih
nithya_password: $6$edOqVumZrYW9$d5zj1Ok/G80DrnckixhkQDpXl0fACDfNx2EHnC
common_public_key: ssh-rsa ALongSSHPublicKeyHere

இங்கு password தகவல்கள் hash செய்யப்பட்டிருப்பதைக் காண்க. docs.ansible.com/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module [generating encrypted passwords] இந்த இணைப்பில் user உருவாக்கும் போது password தருவதைப் பற்றிப் படிக்கலாம்.

# The whois package makes the mkpasswd
# command available on Ubuntu
$ sudo apt-get install -y whois

# Create a password hash
$ mkpasswd –method=SHA-512
Password:

இது hash செய்யப்பட்ட ஒரு வரியைத் தருகிறது. இதை user மாடியூலில் பயன்படுத்தலாம்.

variable கோப்பில் password, public key சேர்த்தபின், இவற்றைப் பயன்படுத்தும் ஒரு task ஐ உருவாக்கலாம்.

 


– name: Create User shrini
user:
name=shrini
password={% verbatim %}{{ shrini_password }}{% endverbatim %}
groups=sudo
append=yes
shell=/bin/bash

– name: Add shrini Authorized Key
authorized_key:
user=admin
key=”{% verbatim %}{{ common_public_key }}{% endverbatim %}”
state=present

– name: Create User nithya
user:
name=nithya
password={% verbatim %}{{ nithya_password }}{% endverbatim %}
groups=www-data
append=yes
shell=/bin/bash

– name: Add nithya Authorized Key
authorized_key:
user=deploy
key=”{% verbatim %}{{ common_public_key }}{% endverbatim %}”
state=present

 

வழக்கம் போலவே இந்த taskல் variables பயன்படுத்தப் பட்டாலும் இந்த role-ஐ இயக்கும்போது vault password ஐத் தர வேண்டும்.

user role-ஐப் பயன்படுத்தும் provision.yml playbook இதோ.

 


– hosts: all
sudo: yes
roles:
– user

இதை vault password பயன்படுத்திப் பின்வருமாறு இயக்கலாம்.

ansible-playbook –ask-vault-pass provision.yml

இவ்வாறு ansible ஐப் பயன்படுத்தி, நம் சர்வர்களில் செய்யும் எல்லாப் பணிகளையும் எளிதில் செய்துவிடலாம்.

மேலும் ansible பற்றி அறிய docs.ansible.com

 

த.சீனிவாசன் tshrinivasan@gmail.com

 

–முற்றும்.

 

தொடரின் எல்லாப் பகுதிகளையும் படிக்க:

www.kaniyam.com/category/ansible/

%d bloggers like this: