Playbook چیست؟

ansible playbook به صورت خلاصه مدیریت پیکربندی سرور ( در اینجا منظور خودکار سازی مدیریت IT است ) ، یک راه حل برای تبدیل مدیریت زیر ساخت به صورت بر مبنای کد “Codebase” است ، و برای انجام این کار نیاز به استقرار یک سرور برای تهیه اسکریپت هایی با قابلیت نسخه بندی و استفاده مجدد است. با این کار می توان همه زیرساخت همه سرور ها را به صورت جامع بهبود بخشید.

در این مطلب درباره نحوه خودکار سازی مدیریت سرور ها بوسیله “Ansible” صحبت می کنیم. برنامه Ansible یک یک ابزار برای خودکار سازی مدیریت پیکربندی است که چهار چوب های کامل و قابلیت تنظیمات را با هدف ساده سازی و خلاصه کردن تنظیمات در اختیار ما قرار می دهد. در این مطلب بر روی نحوه دستوری ، اصطلاحات و ویژگی های مورد نیاز برای ایجاد یک نمونه ساده روند خودکار سازی ساده و توسعه آن بر روی سرور Ubuntu 14.04 و با وب سرور “Apache” تمرکز می کنیم.

مراحل نصب playbook

در زیر لیست مراحلی که باید برای رسیدن به هدف خودکار سازی تنظیمات سرور ها را انجام دهیم آورده ایم :

  • به روز رسانی مخزن apt
  • نصب Apache
  • ساخت root directory سفارشی
  • قرار دادن index.html در root directory سفارشی
  • اعمال یک قالب برای راه اندازی یک هاست مجازی
  • راه اندازی مجدد Apache

با نگاهی به ویژگی های اصلی زبانی که برای نوشتن “Playbook” ها استفاده می شود ،کار را با بررسی اصطلاحات استفاده شده در Ansible شروع می کنیم. در انتهای این مطلب مثال های کاملی را با شما به اشتراک می گذاریم تا خودتان آن ها را امتحان کنید.

نکته : این مطلب آماده شده تا زبان Ansible و نحوه نوشتن Playbook ها برای خودکار سازی تنظیمات سرور ها را به شما معرفی کند. برای مشاهده مقدمات بیشتر درباره Ansible و مراحل مورد نیاز برای نصب و شروع کار با آن مطلب آموزش نصب و راه اندازی Ansible بر روی Ubuntu 14.04 را مطالعه کنید.

آموزش نصب paybook

قبل از شروع اصطلاحات Ansible به صورت کلی مرور می کنیم ، آشنایی با اصطلاحات و مفاهیم Ansible بسیار مهم است :

اصطلاحات Ansible

• Controller Machine : ماشین یا سروری است که Ansible بر روی آن نصب شده و مسئولیت اجرای سرویس دهی به سرور هایی است که می خواهید آن ها را مدیریت کنید. • Inventory : یک فایل INI که شامل اطلاعات سرور هایی است که می خواهید آن ها را مدیریت کنید. • Playbook : نقطه شروع تنظیمات و مقررات Ansible ، که وظایف خودکار سازی در آن با قالب بندی “YAML” تعریف شده است. • Task : یک بلاک که یک روش را برای اجرا شدن تعریف می کند ، مانند نصب یک بسته. • Module : یک ماژول معمولا وظایف یا کارهای سیستم را خلاصه می کند ، مانند برخورد با بسته ها یا ایجاد و تغییر فایل ها.

• Role : به Playbook های از پیش تعیین شده و سازماندهی شده می گویند که به راحتی به برای استفاده مجدد به اشتراک گذاشته می شوند. • Play : کارهایی که از شروع تا پایان انجام می شوند را یک “play” می گویند. • Facts : متغیرهای عمومی که شامل اطلاعات سیستم مانند رابط های شبکه یا سیستم عامل می باشند. • Handlers : برای تغییر وضعیت یک سرویس استفاده می شود مانند راه اندازی یا متوقف کردن یک سرویس می باشد. مقررات و تنظیمات Ansible با YAML که یک زبان ساده برای مرتب سازی داده ها است استفاده می شود.

وظایف - Tasks

یک وظیفه یا “Task” یک کاری را تعریف می کند که باعث اجرای یک مرحله از موارد مورد نیاز می شود. این وظایف معمولا شامل استفاده از یک ماژول یا یک دستور ساده می شود ( ماژول ها نیز دستوراتی را تولید می کنند که در انتها این دستورات اجرا می شوند). در اینجا یک وظیفه یا Task را می بینیم :

- name: This is a task apt: pkg=vim state=latest

مقدار name معمولا اختیاری است ولی برای اینکه در خروجی اجرای وظایف بتوانید نام آن را مشاهده کنید پیشنهاد می شود که از آن استفاده کنید. Apt نیز یک ماژول توکار Ansible است که ابزار مدیریت بسته در توزیع های مبتنی بر دبیان است. این وظیفه به Ansible می گوید که وضعیت بسته vim باید به latest تغییر کند، با این دستور اگر تاکنون بسته vim نصب نشده باشد آن بسته نصب و به روز می شود.

قالب بندی Playbook

Playbook ها نقطه اصلی تنظیمات Ansible می باشد. آن ها شامل اطلاعات سیستم هایی هستند که باید مدیریت شوند ، همچنین دستورالعمل ها و مراحلی که باید اجرا شوند. در زیر یک نمونه Playbook آورده شده که دو کار را انجام می دهد : به روز رسانی apt سپس نصب vim.

1. --- 2. - hosts: all 3. become: true 4. tasks: 5. - name: Update apt-cache 6. apt: update_cache=yes 7. 8. - name: Install Vim 9. apt: name=vim state=latest

در زبان YAML برای طبقه بندی داده ها از دندانه گذاری استفاده می شود و به همین دلیل موقع نوشتن Playbook ها و مخصوصا هنگام کپی کردن مثال های Playbook ها باید بسیار دقت کنید که ظاهر صحیح آن حفظ شود.

نوشتن Playbook ها

کار با متغیر ها روش های مختلفی برای تعریف متغیر در Ansible وجود دارد. ساده ترین روش استفاده از قسمت vars در playbook می باشد. در مثال زیر متغیر package تعریف شده است که قبلا در وظایف از آن استفاده کردیم :

1. --- 2. - hosts: all 3. become: true 4. vars: 5. package: vim 6. tasks: 7. - name: Install Package 8. apt: name={{ package }} state=latest متغیر package در همه سرور ها قابل دسترس است که شامل فایل ها و قالب ها است.

استفاده از Loop

حلقه ها یا “Loop” ها برای تکرار یک وظیفه یا Task با استفاده مقادیر متفاوت است. برای نمونه به جای ایجاد کردن 10 وظیفه برای نصب 10 بسته ، یک وظیفه ایجاد می کنیم و با استفاده از Loop آن وظیفه را با بسته های مورد نظرتان برای نصب تکرار می کنیم.

برای ساخت حلقه با یک وظیفه از with_items با آرایه ای از مقادیر استفاده می کنیم. برای دسترسی به محتوا نیز از طریق متغیر item به مقادیر دسترسی داشته باشد ، مانند مثال زیر :

- name: Install Packages apt: name={{ item }} state=latest with_items: - vim - git - curl

همچنین از متغیر آرایه برای تعریف مقادیر نیز می توانید استفاده کنید :

- hosts: all sudo: true vars: packages: [ 'vim', 'git', 'curl' ] tasks: - name: Install Package apt: name={{ item }} state=latest with_items: packages

استفاده از شرط ها

از شرط ها به صورت پویا و بر مبنای یک متغیر یا خروجی یک دستور ، می توانید برای اجرا شدن یا نشدن یک فرمان استفاده کنید. در مثال زیر ، یک وظیفه فقط بر روی سیستم های مبتنی بر دبیان اجرا می شود :

- name: Shutdown Debian Based Systems command: /sbin/shutdown -t now when: ansible_os_family == "Debian"

شرطر when

شرط when آرگومان اظهار شده را برای ارزیابی دریافت می کند و وظیفه فقط زمانی اجرا می شود که مقدار دریافت شده true باشد. در اینجا ما فقط بررسی می کنیم که سیستم عضو خانواده دبیان باشد. عمومی ترین استفاده از شرط ها در روند خودکار سازی، زمانی است که اجرا شدن یک وظیفه به مقدار خروجی یک دستور دیگر دارد.

راه کار اجرایی برای این کار این است که یک متغیر برای نگهداری خروجی دستور تعریف می کنیم ، سپس در وظیفه مورد نظر آن را بررسی می کنیم. برای بررسی خروجی دستور می توان وضعیت خروجی را که با موفقیت اجرا شده است یا خیر را بررسی کرد یا اینکه محتوای خروجی دستور را بررسی کنیم که در این حالت ممکن است به regex expressions یا دستورات تحلیل رشته ها نیاز داشته باشیم.

در مثال زیر دو وظیفه آورده شده است که برای اجرا شدن به خروجی دستور php -v نیاز دارند. همانطور که می دانید اگر PHP بر روی سرور نصب نباشد اجرای این دستور با خطا مواجه خواهد شد ، پس برای بررسی شرط خروجی این دستور ، وضعیت اجرای دستور را بررسی می کنیم. قسمت ignore_errors بخش مهمی از یک وظیفه است و برای ادامه فعالیت یک وظیفه نسبت به خروجی دستور نقش مهمی را دارد.

- name: Check if PHP is installed register: php_installed command: php -v ignore_errors: true

- name: This task is only executed if PHP is installed debug: var=php_install when: php_installed|success

- name: This task is only executed if PHP is NOT installed debug: msg='PHP is NOT installed' when: php_installed|failed

ماژول Debug که در اینجا استفاده کردیم یکی ماژول بسیار کاربردی برای نمایش مقدار متغیر ها و تحلیل پیام هاست. این ماژول می تواند یک رشته را چاپ کند ( زمانی که از آرگومان msg استفاده شود ) یا اینکه محتوای یک متغیر را چاپ کنید ( زمانی که از آرگومان var استفاده شود ).

کار با قالب ها

قالب ها معمولا برای فایل های تنظیمات پیکربندی استفاده می شوند که با استفاده از متغیر ها یا ویژگی های مورد نظرمان می توانیم از این فایل ها برای مقاصد دیگر نیز استفاده کنیم. Ansible از قالب موتور Jinja2 استفاده می کند. در مثال زیر یک قالب برای تنظیم یک هاست Apache آورده شده است که از یک متغیر برای تعیین مسیر ریشه هاست استفاده می کنیم :

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot {{ doc_root }}

<Directory {{ doc_root }}> AllowOverride All Require all granted </Directory> </VirtualHost>

ماژول توکار template برای اعمال قالب می باشد که به صورت یک وظیفه عمل می کند. اگر نام قالب که در بالا تعریف کردیم را vhost.tpl گذاشته باشید و در همان مسیری باشد که Playbook شما قرار داشته باشد ، با صورتی که در زیر آورده شده می توانید قالب را با قالب پیش فرض تعیین هاست Apache جایگزین و اعمال کنید :

- name: Change default Apache virtual host template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf

تعریف و راه اندازی کنترل کننده ها - Handlers

از کنترل کننده ها یا همان “Handler” ها به عنوان تغییر دهنده وضعیت یک سرویس ، مانند متوقف کردن یا راه اندازی مجدد استفاده می شود. کنترل کننده ها رفتاری شبیه به وظیفه ها دارند و دستور تعریف شده را اجرا می کنند ، با این تفاوت که برای اجرا باید notify در آن وظیفه تعریف شده باشد. کنترل کننده ها معمولا از قبل در یک آرایه در قسمت handlers از playbook تعریف شده اند.

برای نمونه نگاهی به مثال قبل که از یک قالب نمونه برای ایجاد هاست مجازی Apache استفاده کردیم می اندازیم. اگر بخواهیم که Apache بعد از تغییرات هاست مجازی مجددا راه اندازی شود ، باید یک کنترل کننده برای سرویس Apache بنویسم. به صورت زیر یک کنترل کننده یا Handler برای Playbook می نویسیم :

handlers: - name: restart apache service: name=apache2 state=restarted

- name: other handler service: name=other state=restarted

اهمیت name

در اینجا قسمت name بسیار مهم است ، زیرا تعیین کننده یک نام واحد و Unique برای کنترل کننده یا Hnadler است. برای اجرا شدن این کنترل کننده در یک وظیفه باید از گزینه notify استفاده کنید :

- name: Change default Apache virtual host template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf notify: restart apache

یک نمونه Playbook

اکنون به Playbook ای که در این مطلب برای خودکار سازی نصب Apache بر روی سرور Ubuntu 14.04 نوشتیم ، نگاه دقیق تری می کنیم. این یک مثال کامل است که شامل قالب و راه اندازی Apache و یک فایل HTML است که توسط وب سرور نمایش داده می شود که از اینجا می توانید این فایل را بدست آورید.

همچنین این پوشه حاوی Vagrantfile است که از آن برای بررسی و تست ساده Playbook با ماشین مجازی مدیریت شده با Vagrant مدیریت می شود ، می توانید استفاده کنید. در زیر Playbook به صورت کامل آورده شده :

playbook.yml --- - hosts: all become: true vars: doc_root: /var/www/example tasks: - name: Update apt apt: update_cache=yes

- name: Install Apache apt: name=apache2 state=latest

- name: Create custom document root file: path={{ doc_root }} state=directory owner=www-data group=www-data

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

- name: Set up Apache virtual host file template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf notify: restart apache handlers: - name: restart apache service: name=apache2 state=restarted

توضیحات Playbook

hosts: all

فایل Playbook با اظهار اینکه تنظیمات باید به تمامی هاست ها ( host: all ) اعمال شوند ، شروع می شود. این مقدار می تواند به هاست های بخصوص یا گروهی از هاست ها تغییر کند.

become: true

این قسمت به Ansible می گوید که از افزایش دسترسی (sudo) برای اجرای تمامی دستورات استفاده کند. این گزینه می تواند برای هر وظیفه ای و بازنویسی شود.

vars

تعریف متغیر doc_root ، که قبلا در وظیفه Task از آن استفاده کردیم. در این قسمت می توان متغیر های متفاوت دیگری را نیز تعریف کرد.

tasks

در این قسمت خود وظیفه یا Task تعریف می شود. ابتدا بسته apt را به روز می کند و در وظیفه بعدی بسته apache2 را نصب می کند.

وظیفه سوم از ماژول file برای ساخت دایرکتوری در مسیر ریشه ای که برای سرویس دهی استفاده می کنیم ، ایجاد می کند. از این ماژول برای مدیریت فایل و دایرکتوری استفاده می شود.

چهارمین وظیفه از ماژول copy برای کپی کردن فایل سیستم محلی به سرور استفاده می کند. یک فایل HTML ساده را برای سرویس دهی وب Apache کپی می کنیم.

handlers

در انتهای نیز قسمت handlers را داریم که سرویس ها در آن معرفی شدند. یک کنترل کننده restart apache تعریف کردیم تا تغییرات Apache اعمال شوند.

  • با خدمات ابری پارس آشنا شوید

    اولین ارائه‌دهنده خدمات رایانش ابری در ایران هستیم

    ابر سرور

    ابر سرور

    با ابرسرورها می‌توانید سرور با سیستم‌عامل دلخواه خود را در چند دقیقه انتخاب و نصب نموده و آزادانه منابع سخت‌افزاری که در نظر دارید را، در زمان دلخواه به سرور خود بیافزایید و تنها برای منابع مورد نیاز سرور، هزینه پرداخت نمایید.

    هایبرید سرور

    هایبرید سرور

    هایبرید سرورها نسل جدید و پیشرفته سرورهای اختصاصی هستند که با پنل قدرتمند ابری ارائه می‌شوند. در هایبرید سرورها علاوه بر ارائه سخت‌افزار مستقل، امکانات سخت‌افزاری ویژه‌ای نیز در نظر گرفته شده است.

    ماکرو سرور

    ماکرو سرور

    ماکرو سرور محصولی ویژه است که برای دریافت بالاترین کیفیت سخت‌افزاری طراحی شده است. در شرایطی که نیازمند سخت‌افزاری قدرتمند برای سرور خود هستید، ماکرو سرورها منابع سخت‌افزاری مورد نیاز را برای شما فراهم می‌کنند.

    هاست ابری

    هاست ابری

    در هاست ابری برخلاف یک هاست اشتراکی، سایت‌های پر بازدید نیز بسادگی می‌توانند از خدمات میزبانی استفاده کنند، بدون آنکه درگیر دغدغه‌های مدیریت سرور شوند. همواره تنها برای آن میزان از منابع سخت‌افزاری که نیاز دارید هزینه می‌پردازید و دیگر نیازی به پرداخت هزینه‌های غیر موجه، در ابتدای فعالیت وب سایت خود، نخواهید داشت.

    هاست دانلود

    هاست دانلود

    سیاری از مدیران سایت‌های دانلود و یا سایت‌هایی که با ترافیک بالایی برای به اشتراک‌گذاری فایل‌های خود روبرو هستند، عمدتا با مشکلاتی مانند هزینه‌های گزاف زیرساختی و یا مصرف بالای منابع سخت‌افزاری روبرو می‌شوند. از همین رو پارس‌پک با معرفی فضای هاست دانلود برای این دسته از کاربران، محصول مناسبی را پیش‌بینی نموده است.

    مطالعه این مطالب نیز پیشنهاد می‌شود

    مقالات و نظرات اعضای تیم ما درباره تکنولوژی، روزهای کاری و چیزای دیگر…

    تفاوت هاست لینوکس و ویندوز

    یکی از چالش‌های مهم مدیران وب‌سایت‌ها، در هنگام خرید هاست و راه‌اندازی وب‌سایت، انتخاب نوع سیستم‌ عامل هاست است. ارائه‌دهندگان خدمات میزبانی وب و هاست...

  • کلیه حقوق برای شرکت دانش بنیان پارس پک محفوظ می باشد.

    Copyright © 2019 Pars Parva System Ltd. ParsPack Cloud Computing Technology ® , All Rights Reserved.