چگونه مي توان از رول هاي ansible براي انتزاع محيط زيرساختي خود استفاده كرد

۶ بازديد

مقدمه
Ansible يك ابزار مديريت پيكربندي است كه براي خودكار سازي سرور مجازي هاي كنترل كننده براي مديران و تيم هاي عملياتي طراحي شده است. با استفاده از Ansible مي توانيد از يك سرور مجازي مركزي منفرد استفاده كنيد تا بسياري از سيستمهاي مختلف از راه دور را با استفاده از SSH و Python به عنوان تنها ابزار مورد نياز كنترل و پيكربندي كنيد.
Ansible وظايف خود را بر روي سرور مجازي هايي انجام مي دهد كه بر اساس تعريف وظيفه آنها را مديريت مي كند. اين كارها از ماژول هاي داخلي Ansible با استفاده از قطعه هاي كوچك YAML براي هر كار استفاده مي كند.
هرچه تعداد و تنوع سيستمهايي كه شما با يك گره كنترل Ansible مديريت مي كنيد پيچيده تر مي شود ، معقول است كه وظايف را با هم در playbooks Ansible گروه بندي كنيد. استفاده از اين playbook ها نياز به اجراي بسياري از وظايف فردي روي سيستم هاي از راه دور را برطرف مي كند ، در عوض به شما امكان مي دهد تمام محيط ها را به طور هم زمان با يك فايل واحد پيكربندي كنيد.
با اين حال ، وقتي كه playbooks وظيفه تنظيم بسياري از سيستم هاي مختلف با كارهاي مختلف براي هر سيستم را دارند ، مي توانند پيچيده تر شوند بنابراين Ansible همچنين به شما امكان مي دهد تا وظايفي را در يك ساختار دايركتوري به نام Role سازماندهي كنيد. در اين پيكربندي ، playbooks به جاي وظايف ، رول ها را فراخواني مي كنند ، بنابراين شما هنوز هم مي توانيد وظايف را با هم گروه بندي كرده و سپس در ساير playbooks از رول ها استفاده مجدد كنيد. رول ها همچنين به شما امكان مي دهد قالب ها ، فايل هاي استاتيك و متغيرها را به همراه كارهاي خود در يك قالب ساختاري جمع آوري كنيد.
در اين آموزش چگونگي ايجاد رول ها و چگونگي اضافه كردن قالب ها ، فايل هاي استاتيك و متغيرها به يك رول مورد بررسي قرار خواهد گرفت. پس از آشنايي با اصول رول هاي ساختاي ، از Ansible Galaxy استفاده خواهيم كرد تا رول هاي مرتبط با جامعه را در playbooks وارد كنيم. با پايان اين آموزش قادر خواهيد بود براي سرور مجازي هاي خود رول هاي خاص محيطي خود را ايجاد كرده و از آنها در playbooks خود استفاده كنيد تا يك يا بسياري از سيستم ها را مديريت كنيد.
پيش نيازها
براي دنبال كردن اين آموزش ، بايد Ansible را نصب و پيكربندي كنيد تا بتوانيد playbooks را ايجاد و اجرا كنيد. شما همچنين نياز به درك نحوه نوشتن playbooks Ansible حساس داريد.
رول Ansible چيست؟
در آموزش هاي پيش نياز ، شما ياد گرفتيد كه چگونه ابزار اصلي Ansible را با استفاده از دستور ansible در يك ترمينال اجرا كنيد. همچنين آموخته ايد كه چگونه وظايف را در playbooks جمع آوري كرده و آنها را با استفاده از دستور playbooks ansible اجرا كنيد. مرحله بعدي رفتن از اجراي دستورات منفرد ، به سمت وظايف ، و playbooks ، سازماندهي مجدد همه چيز با استفاده از يك رول Ansible است.

رول ها سطحي از انتزاع در صدر كارها و playbook هستند كه به شما امكان مي دهد پيكربندي Ansible خود را در قالب مدولار و قابل استفاده مجدد سازماندهي كنيد. هرچه عملكرد و انعطاف پذيري بيشتري را به playbooks خود اضافه مي كنيد ، آنها گسترده ميشوند و نگهداري شان مي تواند دشوار شود. رول ها به شما امكان مي دهد يك playbook پيچيده را به بخش هاي جداگانه و كوچكتر تقسيم كنيد كه با يك نقطه ورودي مركزي هماهنگ شوند. به عنوان مثال ، در اين آموزش كل playbook.yml كه با آنها كار خواهيم كرد به شرح زير است:
Example Playbook
1—

2- hosts: all

3 become: true
4 roles:
5 – apache

6 vars:

7 doc_root: /var/www/example

مجموعه تمام كارهايي كه براي پيكربندي يك وب سرور مجازي Apache انجام مي شود ، در رول apache كه ايجاد خواهيم كرد ، درج خواهد شد. اين رول به جاي ليست كردن تكاليف به صورت جداگانه مانند آنچه در نسخه پيكربندي مديريت 101 انجام داديم ، به شرح زير تمام كارهايي را كه بايد براي نصب Apache انجام شود ، تعريف مي كند.
ساماندهي ستاپ Ansible  شما به صورت رول ها به شما امكان مي دهد از مراحل پيكربندي مشترك بين انواع مختلف سرور مجازيها مجدد استفاده كنيد. حتي اگر اين كار با وجود چندين فايل وظيفه در يك playbook نيز امكان پذير باشد ، رول ها به ساختار دايركتوري شناخته شده و كنوانسيون نام فايل متكي هستند تا به صورت خودكار فايل هايي كه در اين بازي استفاده مي شوند را بارگيري كنند.
به طور كلي ، ايده هاي پشت رول ها اين است كه به شما امكان مي دهد با استفاده از يك ساختار پايدار ، وظايف خود را با يكديگر به اشتراك بگذاريد و از آنها استفاده مجدد كنيد ، در حالي كه نگهداري آنها بدون انجام كارهاي تكراري براي همه زيرساخت هاي شما آسان مي شود.
ايجاد رول
براي ايجاد رول Ansible  به يك ساختار دايركتوري اختصاصي نياز داريد. رول ها هميشه به اين طرح دايركتوري نياز دارند تا Ansible بتواند آنها را پيدا كرده و از آنها استفاده كند.

ما در اينجا فرض مي كنيم كه از دايركتوري هوم كاربر به عنوان دايركتوري كاربري Ansible استفاده كرده ايد. اگر پيكربندي Ansible خود را در يك مكان ديگر نگه داشته باشيد ، بايد (cd) را در آن ديركتوري تغيير دهيد.
براي شروع ، بياييد دايركتوري به نام roles ايجاد كنيم. وقتي مي خواهيم در ادامه اين آموزش رول جديد خود را در يك playbook  استفاده كنيم، Ansible به اينجا نگاه مي كند.
$ cd ~

$ mkdir roles

$ cd roles
در اين دايركتوري رول هايي را تعريف خواهيم كرد كه قابل استفاده مجدد در چندين playbook  و سرور مجازي هاي مختلف هستند. هر رولي كه ايجاد خواهيم كرد نياز به ديركتوري خاص خود دارد. ما مي خواهيم نمونه playbook  Apache را از آموزش  Configuration Management 101: Writing Ansible Playbooks  بگيريم و آن را به يك رول قابل استفاده مجدد Ansible تبديل كنيم.
براي ارجاع، اين playbook  از آن آموزش است:
playbook.yml
1—
2- hosts: all
3 become: true
4 vars:
5 doc_root: /var/www/example
6 tasks:
7 – name: Update apt
8 apt: update_cache=yes
9
10 – name: Install Apache

11 apt: name=apache2 state=latest
12
13 – name: Create custom document root
14 file: path={{ doc_root }} state=directory owner=www-data group=www-data
15
16 – name: Set up HTML file

17 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
18
19 – name: Set up Apache virtual host file
20 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
21 notify: restart apache
22
23 handlers:
24 – name: restart apache
25 service: name=apache2 state=restarted
در ابتدا ، يك دايركتوري Apache براي رول خود ايجاد مي كنيم و آن را با ديركتوري هاي مورد نياز جمع كنيم:
$ mkdir apache

$ cd apache
در مرحله بعدي مجموعه زير دايركتوري هاي مورد نياز را ايجاد خواهيم كرد كه به Ansible اطلاع مي دهد كه بايد از محتويات به عنوان يك رول استفاده كند. با استفاده از دستور mkdir اين دايركتوري ها را ايجاد كنيد:
$ mkdir defaults files handlers meta templates tasks vars
اين ديركتوري ها براي اجراي رول ما شامل كليه كد ها مي باشند. بسياري از رول ها بسته به پيچيدگي كارهايي كه انجام مي دهند فقط از يك يا چند مورد از اين دايركتوري ها استفاده خواهند كرد. هنگام نوشتن رول هاي خود ، ممكن است نيازي به ايجاد همه اين دايركتوري ها نباشد.
در اينجا توضيحي در مورد آنچه هر دايركتوري نشان مي دهد آورده شده است:
defaults: اين دايركتوري به شما امكان مي دهد متغيرهاي پيش فرض را براي رول هاي شامل يا وابسته تنظيم كنيد. هر پيش فرض تنظيم شده در اينجا مي تواند در playbooks  يا فايل هاي موجودي تنظيم شود.
files: اين دايركتوري حاوي فايل هاي استاتيك و فايلهاي اسكريپتي است كه ممكن است در يك سرور مجازي از راه دور كپي شده يا اجرا شوند.
handlers : همه هندلر هايي كه قبلاً در playbooks  شما بوده اند اكنون مي توانند در اين دايركتوري قرار بگيرند.
Meta : اين دايركتوري براي ابرداده رول ها ، كه معمولاً براي مديريت وابستگي استفاده مي شود ، محفوظ است. به عنوان مثال ، مي توانيد ليستي از رول ها را تعريف كنيد كه بايد قبل از استناد به رول فعلي اعمال شوند.
templates: اين دايركتوري براي قالب هايي اختصاص داده شده است كه توليد فايل در هاست از راه دور را انجام ميدهند. قالب ها معمولاً از متغيرهايي استفاده مي كنند كه در فايل هاي واقع در دايركتوري vars و اطلاعات جمع آوري شده هاست در زمان اجرا، تعريف شده اند.
tasks: اين دايركتوري شامل يك يا چند فايل با كارهايي است كه بطور معمول در بخش وظايف يك playbook معمولي Ansible تعريف مي شود. اين كارها مي توانند به طور مستقيم فايل ها و الگوهاي موجود در دايركتوري هاي مربوطه خود را در داخل رول ، بدون نياز به ارائه مسير كاملي براي فايل ، ارجاع دهند.
Vars : متغيرهاي يك رول را مي توان در فايل هاي داخل اين دايركتوري مشخص كرد و سپس به مكان ديگري در يك رول ارجاع داد.
اگر فايلي به نام main.yml در يك دايركتوري وجود داشته باشد ، محتواي آن به طور خودكار به playbook اي كه رول را فراميخواند اضافه مي شود. با اين حال ، اين امر در مورد دايركتوري هاي files  و templates  صدق نمي كند ، زيرا محتواي آنها به صراحت ارجاع داده شود.
تبديل يك Playbook به يك رول
اكنون كه با آنچه در هر دايركتوري در رول Ansible استفاده مي شود آشنا هستيد ، مي توانيم playbook Apache را به رولي تبديل كنيم تا امور بهتر سازماندهي شود.
ما بايد ساختارهاي role / / apache2 / d subdirectories from را از قسمت آخر تنظيم كنيم. حال بايد برخي از فايلهاي YAML را براي تعريف رول خود ايجاد كنيم.
ايجاد فايل main.yml كارها
ما با زيرمجموعه وظايف شروع خواهيم كرد. اكنون به آن دايركتوري منتقل ميشويم:
$ cd ~/roles/apache/tasks
ما بايد يك فايل main.yml را در اين دايركتوري ايجاد كنيم. آن را با كل محتواي Playbook Apache جمع مي كنيم و سپس ويرايش مي كنيم تا فقط شامل وظايف باشد.
$ nano main.yml
وقتي شروع مي كنيد ، فايل بايد از اين قرار باشد:

main.yml
1—
2- hosts: all
3 become: true
vars:
5 _root: /var/www/example
6
7 tasks:
– name: Update apt
9 apt: update_cache=yes
10
11- name: Install Apache
12 apt: name=apache2 state=latest
13
14 – name: Create custom document root
15 file: path={{ doc_root }} state=directory owner=www-data group=www-data
16
17 – name: Set up HTML file

18 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
19
20 – name: Set up Apache virtual host file
21 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
22 notify: restart apache
23
24 handlers:
25 – name: restart apache
26 service: name=apache2 state=restarted
ما فقط مي خواهيم خط اول — و خطوط قسمت tasks را برجسته نگه داريم. ما همچنين مي توانيم فضاهاي فرعي را به سمت چپ وظايف خود حذف كنيم. همچنين براي فعال كردن يك ماژول Apache به نام modsecurance يك بخش جديد اضافه خواهيم كرد كه بعداً در اين آموزش پيكربندي خواهيم كرد. پس از اين تغييرات ، فايل جديد ~ / role / apache / works / main.yml ما به اين شكل ظاهر مي شود:
main.yml
1—

2- name: Update apt

3 apt: update_cache=yes

4

5- name: Install Apache

6 apt: name=apache2 state=latest

7

8- name: Create custom document root

9 file: path={{ doc_root }} state=directory owner=www-data group=www-data

10

11- name: Set up HTML file

12 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644

13

14- name: Set up Apache virtual host file
15 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf

16 notify: restart apache
اكنون پيگيري و فهم فايل tasks آسان تر است زيرا فقط شامل مراحل واقعي است كه هنگام استفاده از رول Apache انجام مي شود.
توجه داشته باشيد كه چگونه خطوط copy و template به ترتيب از src = index.html و src = vhost.tpl براي فايل هاي مرجع در رول ما استفاده مي كنند ، بدون اينكه مسير قبلd داشته باشkد. ساختار دايركتوري رول ما اجازه مي دهد فايل ها و قالب ها را مستقيماً با نام آنها ارجاع دهيم ، و Ansible آنها را به طور خودكار براي ما پيدا مي كند.
هنگام پايان ويرايش آن ، فايل را ذخيره كنيد و ببنديد.
ايجاد فايل main.yml هندلرها
اكنون كه توده اي از playbook را در فايل وظايف / main.yml داريم ، بايد بخش هندلر ها را به يك فايل واقع در handlers / main.yml منتقل كنيم.
ابتدا در زير مجموعه هندلرها در رول ما cd را انجام دهيد:
$ cd ~/roles/apache/handlers
دوباره ، فايل را در ويرايشگر متن خود باز كنيد و كل محتويات اصلي playbook.yml را پيست كنيد:
$ nano main.yml
قسمت هايي كه بايد آنها را نگهداريم دوباره مشخص شده است:
playbook.yml
1—

2- hosts: all

3 become: true

4 vars:

5 doc_root: /var/www/example

6 tasks:

7 – name: Update apt

8 apt: update_cache=yes

9

10 – name: Install Apache

11 apt: name=apache2 state=latest

12

13 – name: Create custom document root

14 file: path={{ doc_root }} state=directory owner=www-data group=www-data

15

16 – name: Set up HTML file
17 copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
18

19 – name: Set up Apache virtual host file

20 template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf

21 notify: restart apache

22
23 handlers:

24 – name: restart apache
25 service: name=apache2 state=restarted

فضاي سفيد را از جلوي هندلرها نيز رفع كنيد. در پايان ، فايل بايد به صورت زير باشد:

– name: restart apache
service: name=apache2 state=restarted

پس از اتمام فايل را ذخيره كنيد و ببنديد.
افزودن فايل ها و قالب ها
اكنون كه وظايف و هندلرهايي داريم ، مرحله بعدي اين است كه اطمينان حاصل كنيم كه يك فايل index.html و يك الگوي vhost.tpl وجود دارد تا Ansible بتواند آنها را پيدا كند و روي سرور مجازي هاي راه دور ما قرار دهد. از آنجا كه ما به اين فايل ها در فايل هاي tasks/main.yml ارجاع داده ايم ، آنها بايد وجود داشته باشند درغير اين صورتAnsible قادر به اجراي صحيح اين رول نيست.
ابتدا فايل index.html را در دايركتوري ~ / role / apache / files ايجاد كنيد:
$ cd ~/roles/apache/files
$ nano index.html
موارد زير را در ويرايشگر پيست كنيد ، سپس آن را ذخيره كنيد و ببنديد:

Configuration Management Hands On

This server was provisioned using Ansible

سپس الگوي vhost.tpl را ويرايش خواهيم كرد. به ديركتوري templates رفته و فايل را با nano ويرايش كنيد:
$ cd ~/roles/apache/templates
$ nano vhost.tpl
اين خطوط را در ويرايشگر پيست كنيد ، سپس آن را ذخيره كرده و ببنديد:

ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}


AllowOverride All
Require all granted

دايركتوري متا
اگر رول ما به رول ديگري بستگي داشت ، مي توانستيم فايلي در دايركتوري متا به نام main.yml اضافه كنيم. اين فايل ممكن است مشخص كند كه اين رول به رولي به نام “apt” بستگي دارد. در رول Apache  كه ما ايجاد كرده ايم هيچ وابستگي لازم نداريم. با اين حال ، در صورت نياز فرضي به رول ديگري مانند “apt” ، فايل در ~ / role / apache / meta / main.yml ممكن است به شرح زير باشد:

dependencies:
– apt

اين تضمين مي كند كه رول “apt” قبل از رول Apache  ما اجرا مي شود. ايجاد وابستگي هايي مانند اين براي رول هاي پيچيده تري كه قبل از اجراي رول واقعي نياز به وجود ساير نرم افزارها يا پيكربندي ها دارند، مفيد است.
دايركتوري Vars
ما قبلاً گفتيم كه يك دايركتوري “vars” وجود دارد كه مي تواند براي تعيين متغيرها براي رول ما استفاده شود. در حالي كه پيكربندي پارامترهاي پيش فرض براي يك رول از طريق فايل vars / main.yml ممكن است ، اين معمولاً براي رول هاي كوچكتر توصيه نمي شود.
دليل استفاده نكردن از دايركتوري “vars” اين است كه باعث مي شود جزئيات پيكربندي شما در سلسله مراتب رول ها قرار بگيرد. رول بيشتر وظايف عمومي و وابستگي را به عهده دارد ، در حالي كه متغيرها داده پيكربندي هستند. اتصال اين دو ، استفاده مجدد از رول شما در جاي ديگر را دشوارتر مي كند.
در عوض ، بهتر است جزئيات پيكربندي را خارج از رول مشخص كنيد تا بتوانيد به راحتي رول را بدون نگراني از افشاي اطلاعات حساس به اشتراك بگذاريد. همچنين ، متغيرهاي اعلام شده در يك رول به راحتي توسط متغيرهاي مكانهاي ديگر رد مي شوند. خيلي بهتر است داده هاي متغير را در playbookهايي قرار دهيد كه براي كارهاي خاص استفاده مي شوند.
با اين حال ، ذكر دايركتوري “vars” هنوز هم خالي از لطف نيست، زيرا با رول هاي پيچيده تر مفيد است. به عنوان مثال ، اگر يك رول به پشتيباني از توزيع هاي مختلف لينوكس نياز دارد ، تعيين مقادير پيش فرض براي متغيرها مي تواند براي مديريت نام هاي مختلف بسته ها ، نسخه ها و تنظيمات مفيد باشد.
شمول فايل هاي ديگر
بعضي مواقع وقتي رول ها با وظايف متعدد ايجاد مي كنيد ، درك و فهم وابستگي ها يا منطق شرطي دشوار خواهد شد. در چنين شرايطي مي توانيد وظايف خود را در فايل هاي خود تقسيم كرده و آنها را در tasks/main.yml قرار دهيد.

به عنوان مثال ، اگر ما يك مجموعه كار اضافي براي پيكربندي TLS براي سرور مجازي Apache خود داشتيم ، مي توانستيم آن ها را در فايل خودشان جدا كنيم. ما مي توانيم فايل tasks/tls.yml را فراخواني كنيم و آن را مانند اين در فايل tasks/main.yml قرار دهيم:
. . .
tasks:
– include: roles/apache/tasks/tls.yml

يك Playbook اسكلتي ايجاد كنيد
اكنون كه ساختار رول خود را پيكربندي كرده ايم ، مي توانيم آن را با حداقل playbook  در مقايسه با نسخه يكپارچه در ابتداي اين آموزش استفاده كنيم.
استفاده از رول ها به اين طريق به ما اين امكان را مي دهد تا از playbooks استفاده كنيم تا آنچه را كه سرور مجازي بايد انجام دهد را بدون نياز به تكرار هميشگي وظايف براي انجام اين كار ، اعلان كنيم.
براي ايجاد يك playbook حداقل كه شامل رول Apache ما باشد ، از دايركتوري رول ها (دايركتوري هوم ما در اين مثال). cd out كنيد. اكنون مي توانيم يك فايل playbook ايجاد كنيم:
$ cd ~
$ nano playbook.yml
پس از باز كردن فايل ، موارد زير را پيست كنيد و سپس فايل را ذخيره كرده و ببنديد:

– hosts: all
become: true
roles:
– apache
vars:
– doc_root: /var/www/example

اطلاعات بسيار كمي در اين فايل مورد نياز است. ابتدا سرور مجازي هايي را كه مي خواهيم اين رول را اجرا كنند ، ليست مي كنيم ، بنابراين از – hosts: all استفاده مي كنيم . اگر گروهي از هاست ها به نام webservers را داشتيد مي توانستيد آنها را هدف قرار دهيد. در مرحله بعد ، اعلام مي كنيم كه از چه رول هايي استفاده مي كنيم. در اين حالت فقط يكي وجود دارد ، بنابراين از خط – apache استفاده مي كنيم.
اين كل playbook ما است كه بسيار كوچك و خواندن و فهميدن آن سريع است. مرتب كردن playbook هايي مانند اين به ما امكان مي دهد تا به جاي فعاليت روي كارهاي شخصي ، روي اهداف كلي براي پيكربندي سرور مجازي تمركز كنيم. حتي نكته بهتر آن كه، اگر چندين رول مورد نياز داشته باشيم ، اكنون مي توانيم آنها را در بخش رول ها در playbook خود ليست كنيم و آنها به ترتيبي كه ظاهر مي شوند اجرا شوند.

به عنوان مثال ، اگر ما براي راه اندازي سرور مجازي وردپرس با استفاده از Apache و MySQL رول هايي داشتيم ، احتمالا playbook داشتيم كه مشابه زير ميبود:

– hosts: wordpress_hosts
become: true
roles:
– apache
– php
– mysql
– wordpress
vars:
– doc_root: /var/www/example

اين ساختار playbook به ما امكان مي دهد درباره اين كه مي خواهيم يك سرور مجازي چگونه باشد ، خيلي دقيق پيش برويم. سرانجام ، از آنجا كه playbook ها رول ها را فرا ميخوانند ، دستور اجراي ما دقيقاً مشابه حالتي است كه گويا همه در يك فايل واحد قرار گرفته اند:
$ ansible-playbook playbook.yml

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

TASK [Gathering Facts] ******************************************************
ok: [64.225.15.1]

TASK [apache : Update apt] **************************************************
ok: [64.225.15.1]

TASK [apache : Install Apache] **********************************************
changed: [64.225.15.1]

TASK [apache : Create custom document root] *********************************
changed: [64.225.15.1]

TASK [apache : Set up HTML file] ********************************************
changed: [64.225.15.1]

TASK [apache : Set up Apache virtual host file] *****************************
changed: [64.225.15.1]

RUNNING HANDLER [apache : restart apache] ***********************************
changed: [64.225.15.1]

PLAY RECAP ******************************************************************
64.225.15.1 : ok=7 changed=5 unreachable=0 failed=0

به عنوان مثال مي توانيد فايل playbook.yml به نام apache.yml را فراخواني كنيد ، تا نام فايل رول (هاي) موجود در آن را منعكس كند.
گلكسي Ansible
آموزش در مورد رول هاي Ansible بدون بررسي منابع موجود از طريق Galaxy Ansible كامل نخواهد بود. كهكشان جستجوگر ، منبعي از رول هاي كمكي كاربر است كه مي توانيد براي انجام كارهاي مختلف بدون نياز به نوشتن آنها ، به playbooks اضافه كنيد.
به عنوان مثال ، مي توانيم يك ماژول مفيد Apache به نام mod_security2 را به playbook خود اضافه كنيم تا آپاچي را با برخي تنظيمات امنيتي اضافي پيكربندي كنيم. ما از يك رول ansible Galaxy با عنوان apache_modsecurance استفاده خواهيم كرد. براي استفاده از اين رول ، آن را به صورت محلي دانلود خواهيم كرد و سپس آن را در playbook خود قرار خواهيم داد.
ابتدا با ابزار ansible-galaxy آشنا مي شويم. ما با استفاده از ابزار Galaxy را جستجو خواهيم كرد و سپس يك رول را از ليست انتخاب شده از دستور جستجو انتخاب مي كنيم:
$ ansible-galaxy search “PHP for RedHat/CentOS/Fedora/Debian/Ubuntu”
دستور جستجو خروجي شبيه به زير را به همراه خواهد داشت:

Output
Found 21 roles matching your search:

Name Description
—- ———–
alikins.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
bpresles.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
entanet_devops.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
esperdyne.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
fidanf.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
frogasia.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
geerlingguy.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
icamys.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jhu-sheridan-libraries.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jibsan94.ansible_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
KAMI911.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
monsieurbiz.geerlingguy_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
nesh-younify.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
net2grid.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
thom8.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
v0rts.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vahubert.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
Vaizard.mage_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
viasite-ansible.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vvgelder.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
(END)

اگر نتايج زيادي حاصل شود ، Ansible از دستور less براي خروجي نتايج جستجو استفاده مي كند ، كه تا زماني كه q را فشار دهيد، ترمينال شما را مسدود مي كند. اين كار براي زماني مفيد است كه نتايج جستجو گسترده باشد و شما بايد در ميان آنها صفحه گذاري كنيد ، كه مي توانيد با فشار دادن space اين كار را انجام دهيد.
ما رول geerlingguy.php را براي playbook خود انتخاب خواهيم كرد. اگر مايل هستيد اطلاعات بيشتري درباره رول هايي كه با نتايج جستجوي شما برگشته اند ، بخوانيد ، مي توانيد به صفحه جستجوي Galaxy مراجعه كرده و اسم رول مورد نظر خود را در محل نام رول پيست كنيد.
براي دانلود رول براي استفاده در playbook ، از دستور installible-galaxy استفاده مي كنيم:
$ ansible-galaxy install geerlingguy.php
هنگامي كه آن فرمان را اجرا مي كنيد ، بايد خروجي مانند اين را مشاهده كنيد:
Output
– downloading role ‘php’, owned by geerlingguy
– downloading role from https://github.com/geerlingguy/ansible-role-php/archive/3.7.0.tar.gz
– extracting geerlingguy.php to /home/sammy/.ansible/roles/geerlingguy.php
– geerlingguy.php (3.7.0) was installed successfully

اكنون مي توانيم رول را به فايل playbook.yml اضافه كنيم:

– hosts: all
become: true
roles:
– apache
– geerlingguy.php
vars:
– doc_root: /var/www/example
– php_default_version_debian: “7.2”

با قرار دادن رول پس از رول apache، اطمينان مي دهيم كه Apache قبل از تنظيمات مربوط به مكان رول geerlingguy.php ، روي سيستمهاي از راه دور تنظيم و پيكربندي شده است. بسته به نحوه رفتار سرور مجازي هاي از راه دور ، مي توانيم رول هاي mysql و wordpress را نيز به هر ترتيبي كه انتخاب مي كنيم ، شامل شويم.
اجراي ansible-playbook playbook.yml با رول Galaxy اضافه شده منجر به خروجي زير خواهد شد:
Output
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [64.225.15.1]

TASK [apache : Update apt] *****************************************************
changed: [64.225.15.1]

TASK [apache : Install Apache] *************************************************
changed: [64.225.15.1]

TASK [apache : Install modsecurity] ********************************************
changed: [64.225.15.1]

TASK [apache : Create custom document root] ************************************
changed: [64.225.15.1]

TASK [apache : Set up HTML file] ***********************************************
changed: [64.225.15.1]

TASK [apache : Set up Apache virtual host file] ********************************
changed: [64.225.15.1]

TASK [geerlingguy.php : Include OS-specific variables.] ************************
ok: [64.225.15.1]

TASK [geerlingguy.php : Define php_packages.] **********************************
ok: [64.225.15.1]

. . .

PLAY RECAP *********************************************************************
64.225.15.1 : ok=37 changed=15 unreachable=0 failed=0
(END)

نتيجه
رول هاي Ansible يك روش عالي براي ساختاردهي و تعريف چگونگي سرور مجازي هاي شما ميباشد. حتي اگر فقط به playbooks براي هر يك از سرور مجازي هاي خود تكيه كرده ايد ، ارزشش را دارد كه نحوه استفاده از آنها را بياموزيد. اگر قصد استفاده گسترده از Ansible را داريد ، رول ها پيكربندي سطح ميزبان را جدا از وظيفه خود نگه مي دارند ، و اطمينان حاصل مي كنند كه كد Ansible شما تميز و خوانا است. از همه مهمتر ، رول ها به شما امكان مي دهند تا به راحتي از كد استفاده كرده و به اشتراك بگذاريد و تغييرات خود را به صورت كنترل شده و مدولار پياده سازي كنيد.

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.