انسیبل Conditional چیست ؟ کاربرد انسیبل Conditional چیست ؟
انسیبل چیست ؟ ساخت گروه در مخزن انسیبل چگونه انجام میشود؟ Playbook انسیبل چیست؟ انسیبل Conditional چیست؟ ما تلاش کردهایم در مطالبی که به صورت هفتگی پیرامون انسیبل برای شما منتشر میکنیم، به تمام این سوالات پاسخ دهیم.
امیدواریم که تا به این قسمت، مجموعه مقالات انسیبل برای شما جذاب و مفید بوده باشد. انسیبل از جمله مباحث مفید این روزهای دنیای IT است که توجه زیادی را به خود جلب کرده است. به همین دلیل، ما قصد کردهایم به صورت دورهای و پیشرفته، انسیبل و مباحث مختلف مربوط به آن را برای شما شرح دهیم.
اگر به یاد داشته باشید، ما در هفتهی گذشته در مورد پلی بوک انسیبل (Playbook) صحبت کردیم. در مقاله انسیبل Conditional قصد داریم، پیرو بحث هفته پیش، آموزشهای جدیدی را با یکدیگر دنبال کنیم.
مقدمهای برآنچه تاکنون گفتیم
ما قسمت اول این سری مجموعه را با بحث درباره مخزن انسیبل شروع کردیم؛ مخزن انسیبل، جایی که سرورهای هدف در آن تعریف شده و چگونگی دسته بندی و ارتباط با آنها در این قسمت تعریف میشود.
در قسمت بعدی، به شما ابزار های انسیبل را معرفی کرده و به اصطلاح با ماژولهای پرکاربرد و قابل استفاده انسیبل آشنا شدیم. شما آموختید که با استفاده از این ماژولها، میتوانید اعمال مختلفی را در سرورهای هدف انجام دهید.
در قسمت پیش، از استفاده روزانه انسیبل فراتر رفته و استفاده از این ابزار قدرتمند، به عنوان یک ابزار اتومیشن را آموختیم. پس از آن، با یکدیگر بحث کردیم که چگونه میتوانیم با استفاده از پلیبوکها، اقدامات روزانه یا دورهای که در تمامی سرورهای مورد هدف خود باید انجام شوند را به صورت اتومات انجام دهیم.
حال در این مقاله، قصد داریم تا دربارهی روشهای نوشتن پلیبوک و انسیبل Conditional با هم بحث کرده و موارد مختلف موجود این مسئله را باهم بررسی کنیم.
انسیبل Conditional چیست ؟
بگذارید اتفاقی که در این قسمت قرار است از آن حرف بزنیم را با یک مثال توضیح دهیم. فرض کنید ماشینهای مورد نظر شما در انسیبل پلی بوک، از دو سیستم عامل 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”
انسیبل Conditional و استفاده از آن در لوپهای انسیبل:
حال در نظر داشته باشید که بتوانید از این قسمت در چرخه یا 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 در آمده بود از این پکیج استفاده کن و این پکیج را نصب کن، در غیر این صورت نیازی به این اتفاق نیست.
انسیبل Conditional و استفاده از آن در رجیستری انسیبل:
در این قسمت میخواهیم موضوع دیگری را در هنگام استفاده از شرط ها (Conditional) نشان دهیم. به طور مثال فکر کنید میخواهیم به طور مداوم در تعداد زیادی سرور چک کنیم که آیا سرویس 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
در این قسمت نتیجه تسک بالا توسط ماژول رجیستری ذخیره شده و در قسمت پایین گفته شده که در صورت داون بودن سرویس ایمیل فرستاده شود.
ما در مقالهی بعدی تلاش میکنیم تا این موضوع را بایکدیگر پیش ببریم. امیدواریم که تا به این مرحله، آموزش انسیبل برای شما مفید بوده و استفاده از انسیبل پلیبوک را به خوبی یادگرفته باشید. در هفتههای بعدی بیشتر دربارهی پلیبوک با هم بحثکرده و یادمیگیریم.
در صورتی که انتقاد یا پیشنهادی درباره این مقاله دارید، میتوانید با تیم آراز در میان بگذارید، تا سوالات شما حل شده یا در مقالات بعدی تصحیح شود. ما در مقالهی بعدی تلاش میکنیم تا شما را با مفهوم انسیبل loop آشنا کنیم. پیشنهاد میکنیم فرصت مطالعهی این مقاله را از دست ندهید.