- برای نگارش پروندههای yaml نیازی نیست تا تمام دستورالعملها اعم از Task ، handlers ، Template و … را در درون یک پرونده ایجاد کرد.
- این کار خطایابی را با مشکل روبهرو میکند.
- راهکار دیگر استفاده از مفهوم roles میباشد.
- این راهکار اجازه میدهد تا تمام مواردی که قرار است در درون پروندهی PlayBook استفاده شود، در درون پوشهها و پروندههایی جدا از هم نگارش شود.
- به عنوان مثال فرض کنید :
- قصد نصب سرویس Apache بر روی گروهی خاص از خادمهای تحت مدیریت را دارید.
- سپس در صورتی که نصب به صورت موفقیت آمیز طی شد، سرویس Apache به منظور پیکربندی متوقف شود.
- برای این منظور کافیست در پوشهی جاری یک پوشه با نام roles ایجاد کنید :
|
1 |
# mkdir roles |
- نکته: حتما باید از نام roles استفاده شود.
- در مرحله بعد پوشهای با نام PlayBook اصلی ایجاد کنید :
|
1 |
# mkdir roles/install_apache |
- نکته: نام install_apache فرضی بوده و باید تغییر یابد.
- در مرحلهی بعد پوشههای tasks و handlers را درون این پوشه ایجاد کنید :
|
1 2 |
# mkdir roles/install_apache/tasks # mkdir roles/install_apache/handlers |
- در مرحلهی بعد پروندهای درون پوشهی tasks و handlers ایجاد کنید.
|
1 2 3 4 5 6 7 8 |
# touch roles/install_apache/tasks/main.yaml # nano roles/install_apache/tasks/main.yaml --- - name: install apache web server yum: name=apache2 state=latest notify: - start_service |
|
1 2 3 4 5 6 |
# touch roles/install_apache/handlers/main.yaml # nano roles/install_apache/handlers/main.yaml --- - name: start_service service: name=apache2 state=stoped |
- نکته: نام main.yaml مثال بوده و باید تغییر یابد.
- نکته: انتخاب نام start_service کاملا اختیاری میباشد.
- نکته: محتویات پروندهها را عینا مطابق بالا در نظر بگیرید.
- نکته: برای مشاهده ساختار درختی پوشهها و پروندههای ایجاد شده، پیشنهاد میشود از دستور tree استفاده کنید.
|
1 2 3 4 5 6 7 8 9 |
# tree roles/ roles/ └── install_apache ├── handlers │ └── main.yaml └── tasks └── main.yaml 3 directories, 2 files |
- سپس میتوان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.
- برای این منظور :
|
1 2 3 4 5 6 7 |
touch roles.yaml nano roles.yaml --- - hosts: debian-servers roles: - install_apache |
- نکته: انتخاب نام roles.yaml فرضی بوده و میتوان هر نام دیگری نیز اختیار کرد.
- نکته: پروندهی roles.yaml خارج از پوشهی roles باید قرار گیرد.
- در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :
|
1 |
# ansible-playbook roles.yaml |
- در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجیای مشابه زیر دریافت خواهید کرد :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PLAY [debian-servers] ************************************************************************************************************************************************ TASK [Gathering Facts] *********************************************************************************************************************************************** ok: [172.16.0.247] TASK [install_apache : install apache web server] ******************************************************************************************************************** changed: [172.16.0.247] RUNNING HANDLER [install_apache : start_service] ********************************************************************************************************************* changed: [172.16.0.247] PLAY RECAP *********************************************************************************************************************************************************** 172.16.0.247 : ok=3 changed=2 unreachable=0 failed=0 |
- به عنوان مثالی دیگر فرض کنید قصد :
- نصب سرویس Apache را بر روی گروهی خاص از خادمهای تحت مدیریت دارید.
- سپس در صورتی که سرویس Apache به صورت موفقیت آمیز نصب شد، به منظور پیکربندی متوقف شود.
- سپس در مرحله آخر با استفاده از ماژول template و vars پروندهی پیکربندی از پیش آماده شده به خادمهای تحت مدیریت انتقال داده شود.
- برای این منظور کافیست در پوشهی جاری یک پوشه با نام roles ایجاد کنید :
|
1 |
# mkdir roles |
- نکته: حتما باید از نام roles استفاده شود.
- در مرحله بعد پوشهای با نام PlayBook اصلی ایجاد کنید :
|
1 |
# mkdir roles/install_apache |
- در مرحلهی بعد پوشههای tasks و handlers را درون این پوشه ایجاد کنید :
|
1 2 3 4 |
# mkdir roles/install_apache/tasks # mkdir roles/install_apache/handlers # mkdir roles/install_apache/vars # mkdir roles/install_apache/templates |
- در مرحلهی بعد پروندهای درون پوشهی tasks و handlers ایجاد کنید.
|
1 2 3 4 5 6 7 8 9 10 |
# touch roles/install_apache/tasks/main.yaml # nano roles/install_apache/tasks/main.yaml --- - name: install apache yum: name=apache2 state=latest notify: - start_service - name: apache configuration file template: src=roles/install_apache/templates/apache2.conf dest=/etc/apache2/ |
|
1 2 3 4 5 6 |
# touch roles/install_apache/handlers/main.yaml # nano roles/install_apache/handlers/main.yaml --- - name: start_service service: name=apache2 state=restarted |
- نکته: نیازی به وارد کردن آدرس کامل پروندهی j2 در پوشهی template برای پارامتر src نیست.
- در ادامه پروندهی پیکربندی مورد نظر با پسوند j2 را درون پوشهی templates قرار دهید.
|
1 |
# cp /etc/apache2/apache2.j2 /root/roles/install_apache/templates |
- نکته: مسیر etc/apache2/apache2.j2/ فرضی بوده و باید متناسب با خادمی که در اختیار دارید، آن را تغییر دهید.
- نکته: درون پروندهی j2 متغییر با نام webmaster به صورت زیر در نظر گرفته شده است :
|
1 2 3 |
... Timeout {{time}} ... |
- در مرحله بعد یک PlayBook در پوشهی vars ایجاد کنید و محتویات زیر را برای آن در نظر بگیرید :
|
1 2 |
--- time: 450 |
- نکته: انتخاب نام متغیر time فرضی بوده و باید متناسب با PlayBook شما تغییر یابد.
- نکته: برای مشاهده ساختار درختی پوشهها و پروندههای ایجاد شده، پیشنهاد میشود از دستور tree استفاده کنید.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# tree roles/ roles/ └── install_apache ├── handlers │ └── main.yaml ├── tasks │ └── main.yaml ├── templates │ └── apache2.j2 └── vars 5 directories, 3 files |
- سپس میتوان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.
- برای این منظور :
|
1 2 3 4 5 6 7 |
touch roles.yaml nano roles.yaml --- - hosts: debian-servers roles: - install_apache |
- نکته: انتخاب نام roles.yaml فرضی بوده و میتوان هر نام دیگری نیز اختیار کرد.
- نکته: پروندهی roles.yaml خارج از پوشهی roles باید قرار گیرد.
- در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :
|
1 |
# ansible-playbook roles.yaml |
- در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجیای مشابه زیر دریافت خواهید کرد :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PLAY [debian-servers] ************************************************************************************************************************************************ TASK [Gathering Facts] *********************************************************************************************************************************************** ok: [172.16.0.247] TASK [install_apache : install apache web server] ******************************************************************************************************************** changed: [172.16.0.247] TASK [install_apache : test] ***************************************************************************************************************************************** changed: [172.16.0.247] RUNNING HANDLER [install_apache : start_service] ********************************************************************************************************************* changed: [172.16.0.247] PLAY RECAP *********************************************************************************************************************************************************** 172.16.0.247 : ok=4 changed=3 unreachable=0 failed=0 |
- به عنوان مثالی دیگر، فرض کنید میخواهیم :
- سرویس polipo بر روی گروهی از خادمهای تحت مدیریت نصب شود.
- سپس پروندهی تنظیمات این سرویس از خادم مرکزی بر روی گروهی خاص از خادمهای تحت مدیریت انتقال داده شود.
- برای این منظور کافیست در پوشهی جاری یک پوشه با نام roles ایجاد کنید :
|
1 |
# mkdir roles |
- نکته: حتما باید از نام roles استفاده شود.
- در مرحله بعد پوشهای با نام PlayBook اصلی ایجاد کنید :
|
1 |
# mkdir roles/install_polipo |
- در مرحلهی بعد پوشههای tasks را درون این پوشه ایجاد کنید :
|
1 |
# mkdir roles/install_polipo/tasks |
- در مرحله بعد پروندهی main.yaml را در درون پوشههای ایجاد شده، بسازید و محتویات آن را به صورت زیر در نظر بگیرید :
|
1 2 3 4 5 6 7 8 |
# touch roles/install_polipo/tasks/main.yaml # nano roles/install_polipo/tasks/main.yaml --- - name: install polipo service using apt mudole apt: name=polipo state=latest - name: copy polipo configuration file to other servers copy: src=/etc/polipo/config dest=/etc/polipo/config |
- نکته: برای مشاهده ساختار درختی پوشهها و پروندههای ایجاد شده، پیشنهاد میشود از دستور tree استفاده کنید.
|
1 2 3 4 5 6 |
# tree install_polipo/ install_polipo/ └── tasks └── main.yaml 1 directory, 1 file |
- سپس میتوان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.
|
1 2 3 4 5 6 7 8 9 10 11 |
touch install_polipo.yaml nano install_polipo.yaml --- - hosts: debian-servers roles: - install_apache --- - hosts: debian-servers roles: - install_polipo |
- نکته: امکان اشاره به چندین role وجود دارد. به عنوان مثال در کد بالا به صورت همزمان به role های install_polipo و install_apache اشاره شده است.
- نکته: نامهای استفاده شده در مثال بالا فرضی میباشد.
- در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :
|
1 |
# ansible-playbook playbook.yaml |
- به منظور مطالعهی بیشتر لینک زیر پیشنهاد میشود :
|
1 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html |
- آزمایش شده بر روی Ansible نسخهی 2.5.1
- آزمایش شده بر روی سیستم عامل Ubuntu 18.04