محمد جوادی - SMJ
محمد جوادی - SMJ
خواندن ۴ دقیقه·۳ سال پیش

اتفاقات مشروط در انسیبل

سلام و خسته نباشید عرض می‌کنم خدمت همه شما دنبال‌کنندگان هفتگی سری مقالات آموزش انسیبل

در هفته‌ای که پیش رو داریم پیرو بحث هفته پیش که همان پلی بوک‌های انسیبل بود قرار است آموزش‌های جدیدی را با یکدیگر ببینیم.


در قسمت اولی این سری مجموعه بحث درباره مخزن انسیبل شروع شد؛ جایی که سرور‌های هدف در آن تعریف شده و چگونگی دسته بندی و ارتباط با آن‌ها در این قسمت تعریف می‌شود.

در قسمت دوم بر آن شدیم تا دید کلی‌ای درباره دستورات اولیه استفاده از انسیبل ببینیم و این موضوعات را مرور کنیم. استفاده از انسیبل در این قسمت در حد ابتدایی برای ما میسر شد.

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

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

امروز درباره روش‌های نوشتن پلی‌بوک بیشتر‌ با هم بحث کرده و موارد مختلفی در این‌باره را در این مقاله و مقاله هفته آینده با یک‌دیگر مرور خواهیم کرد.

اتفاقات مشروط در انسیبل:

بگذارید اتفاقی که در این قسمت قرار است از آن حرف بزنیم را با یک مثال توضیح دهم.

فرض کنید ماشین‌های مورد نظر شما در انسیبل پلی بوک از دو سیستم عامل centOS و Ubuntu استفاده می‌کنند که هر کدام پکیج منیجر مورد نظر خود یعنی yum و apt را در اختیار دارند.

حال می‌خواهیم یک سرویس انجین‌ایکس را بر روی دو دستگاه نصب کنیم.

پلی‌بوک مورد نظر ما در این تسک باید از کدام پکیج منیجر برای این عمل استفاده کند؟

برای انجام این اتفاق ما از شرط when در پلی بوک خود استفاده می‌کنیم.

بدین صورت که در انتهای تسک مورد نظر یک خط با توجه به مثال زیر اضافه می‌کنیم؛ وقتی شرایط داخل این قسمت به حالت صحیح درآید این تسک اجرا خواهد شد.

--- - name: Install NGINX hosts: all tasks: - name: Install NGINX on Ubuntu apt: name: nginx state: present when: ansible_os_family == “Debian” - name: Install NGINX on Ubuntu apt: name: nginx state: present when: ansible_os_family == “RedHat”

در این قسمت در قسمت when تعریف کردیم که در صورتی که از نظر انسیبل سیستم‌عامل مورد نظر از خانواده دبیان بود از تسک بالا و در صورتی که از خانواده RedHat بود از تسک پایین استفاده شود.

  • برای چک شدن این اتفاق مطمئن باشید که از == استفاده کرده‌اید و یک مساوی خالی نگذاشته‌اید.
  • توجه داشته باشید در صورتی که نیاز داشته باشید تا دو قانون تعریف کنید و در صورت تصدیق هر کدام از این دو شرط تسک اجرا شود می‌توانیم از اپراتور or استفاده کنیم.

بدین صورت که:

name: Install NGINX on Ubuntu yum: name: nginx state: present when: ansible_os_family == “RedHat” or ansible_os_family == “SUSE”
  • در صورتی که نیاز داشته باشید تا دو شرط همزمان چک شده و در صورت وجود هر دو تسک انجام شود نیز می‌توانید از اپراتور and استفاده کنید.

بدین صورت که:

name: Install NGINX on Ubuntu apt: name: nginx state: present when: ansible_os_family == “Debian” and Ansible_destribution_version == “16.04”

شرط‌گذاری و استفاده از آن در لوپ‌های انسیبل:

حال در نظر داشته باشید که بتوانید از این قسمت در چرخه یا loop های انسیبل پلی‌بوک استفاده کنید.

به طور مثال:

---

- name: Install Softwares hosts: all vars: packages: - name: nginx required: True - name: mysql required: True - name: apache required: Flase tasks: - name: Install “{{ item.name }}” on Debian apt: name: “{{ item.name }}” state: present when item.required == True loop: “{{ packages }}”

در مثال بالا در صورتی که می‌خواستیم بر روی هر هاست nginx و mysql را نصب کنیم باید یک انسیبل پلی بوک برای هر کدام می‌نوشتیم یا هر کدام از تسک‌های موجود را با استفاده از apt یک بار بازنویسی می‌کردیم.

ولی در حالتی که دیده شد می‌توانیم یک سری vars معرفی کرده و در قسمت متغییر‌هایی که تعریف کردیم به هر متغیر دو ویژگی نام و required یا مورد نیاز بودن را اضافه کنیم.

در نظر داشته باشید که در قسمت دوم این لوپ نوشته شده و استفاده شده در تسک نصب برنامه در دبیان می‌توانید مشاهده کنید که در قسمت شرط نوشته شده که در صورتی که پکیج مورد نیاز بود یا required به حالت True در آمده بود از این پکیج استفاده کن و این پکیج را نصب کن، در غیر این صورت نیازی به این اتفاق نیست.

شرط‌گذاری و استفاده از آن در رجیستری انسیبل:

در این قسمت می‌خواهیم موضوع دیگری را در هنگام استفاده از شرط ها نشان دهیم.

به طور مثال فکر کنید می‌خواهیم به طور مداوم در تعداد زیادی سرور چک کنیم که آیا سرویس httpd داون شده یا خیر و در صورت داون شدن یک ایمیل ارسال کنید.

برای این امر می‌توانیم از پلی بوک زیر استفاده کنیم.

--- - name: Check status of a service and email if its down hosts: localhost tasks: - command: service httpd status register: result - mail: to: admin@arazcloud.com Subject: Service Alert body: Httpd Service is down when: result.stdout.find(‘down’) != -1

در این قسمت نتیجه تسک بالا توسط ماژول رجیستری ذخیره شده و در قسمت پایین گفته شده که در صورت داون بودن سرویس ایمیل فرستاده شود.

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

در هفته‌های بعد بیشتر درباره‌ی پلی‌بوک با هم بحث‌کرده و یاد‌می‌گیریم.

امیدوارم توضیحات من برای شما در یادگیری انسیبل کاربردی باشد.

در صورتی که انتقاد یا پیشنهادی درباره این مقاله دارید می‌توانید با بنده در میان گذاشته تا سوالات شما حل شده یا در مقالات بعدی تصحیح شود.

با تشکر از تیم ابرآراز که فرصت ارائه این مقاله را در اختیار من گذاشت.

تا هفته بعد...

انسیبللینوکسدواپساوبونتوانسیبل شرطی
شاید از این پست‌ها خوشتان بیاید