انسیبل چیست؟

با سلام خدمت شما همراهان گرامی.بعد از سری ۹ قسمتی چطور با داکر کار کنیم ایندفعه به یکی دیگر از سری توانایی‌های یک مهندس دواپس می‌پردازیم.تصور کنید که سرویس بسیار بزرگی متشکل از چندین ماشین مجازی در اختیار دارید و نیاز است در هر کدام از ماشین‌ها یک دستور اجرا کنید،‌ یک خط از یک فایل را تغییر دهید یا حتی یک فایل را بر روی هر کدام اجرا کنید و…اصولا این عمل اتفاق زمان گیر و فرسایشی‌ای خواهد بود و ممکن است در انجام این کارها اشتباهات مختلفی صورت بگیرد؛ همچنین در صورتی نیاز باشد تا یک زنجیره از اتفاقات داخل هر کدام از سرور ها اجرا شود این مشکلات چند برابر می‌شود و همینطور زمان انجام نیز بسیار بیشتر می‌شود.یکی از ابزارهایی که مهندسان دواپس برای فرار از این مشکل از آن استفاده می‌کنند انسیبل است.انسیبل ساخته شده تا اتفاقاتی که نیاز داریم در چندين سرور یا ماشین مجازی به صورت دسته بندی و هدفمند برای رسیدن به یک مقصود داریم را از داخل یک سرور انجام دهد.انسیبل چطور کار می‌کند؟انسیبل از داخل یک سرور یا ماشین مجازی به بقیه ماشین‌های مجازی از طریق پلتفرم های ssh و winrm وصل شده و اتفاقاتی که ما به او دستور می‌دهیم را در داخل آن سرور ها انجام داده و نتیجه را به ما اعمال می‌کند.سروری که اجرا کننده انسیبل است به نام سرور مدیر شناخته شده و می‌تواند به هر تعداد از سرور‌هایی که نیاز داشته باشیم دستورات و اتفاقات مورد نیاز ما را اعلام کند.دستورات در انسیبل چطور وارد می‌شوند؟در مفهوم انسیبل برای اجرا و انجام یک اتفاق از یک سری ابزار به اسم ماژول‌ها استفاده می‌کنیم.مثلا در نظر داشته باشید در هنگام تعمیر ماشین خود به یک پیش بر می‌خورید؛ اصولا اولین کاری که می‌کنید آن است که ابزار مورد نظر برای انجام آن کار را برداشته و با آن ابزار فعالیت مورد نظر خود را انجام می‌دهید.در انسیبل هم همین موضوع صادق است و برای هر کدام از فعالیت های مورد نیاز خودمان از یک ابزار استفاده می‌کنیم.مثلا برای اجرای یک اسکریپت در داخل سرور های هدف از ماژول script و برای اجرای یک دستور در شل از ماژول shell استفاده می‌کنیم.به طور کلی الگوی کلی وارد کردن دستور در انسیبل به شکل زیر می‌باشد:ansible TARGET -i INVENTORY -m MODULE -a ‘ARGUMENTS’در سطر بالا در قسمت TARGET قسمتی از اینونتوری و یا مخزن مورد انتخاب ما در انسیبل انتخاب می‌شود.در قسمت INVENTORY فایل مخزن مورد نظر که دستور مورد نظر ما در آن اجرا می‌شود قرار خواهد گرفت.در قسمت MODULE ماژول یا ابزار مورد نظر ما از انسیبل که قرار است از آن استفاده کنیم وارد می‌شود.در قسمت ARGUMENTS آرگومانت ها یا اجزای اجرایی و دستورات نوع استفاده از ابزار مورد نظر خود را وارد می‌کنیم.تنظیمات اولیه برای شروع کار با انسیبل چیست؟برای شروع کار با انسیبل ابتدا نیاز است تا کلید rsa سرور هاست بر روی تمامی نود ها گذاشته شود تا انسیبل بدون نیاز به وارد کردن رمز عبور بتواند به سرور وارد شود (هر چند در صورت نیاز می‌توانیم رمز عبور ssh را به انسیبل در قسمت مخزن انسیبل تعریف کنیم تا با آن رمز عبور وارد شود.) سپس باید کاربری که به عنوان کاربر انسیبل تعیین می‌شود را در گروه کسانی قرار دهیم که دسترسی root دارند و همچنین اتصال و انجام دستور روت برای این یوزر را بدون استفاده از پسورد فراهم آوریم تا انسیبل بدون مشکل دستورات و اتفاقات مورد نظر خود را انجام دهد و بتوانیم از همه ابزار در آن استفاده کنیم.اینونتوری یا مخزن در انسیبل چیست؟اولین موضوعی که بعد از شروع به یادگیری از انسیبل به آن بر می‌خوریم مخزن انسیبل است.این فایل بدان صورت ساخته می‌شود که در آن سرور های تحت ارتباط با انسیبل تعریف شده و گروه بندی می‌شوند همچنین نوع ارتباط روش ارتباط نوع سیستم عامل و تمامی عنوانین تاثیر گذار در اتصال انسیبل به سرور ها در این قسمت گذاشته شده و به انسیبل فهمانده می‌شود.این فایل بدین صورت ساخته می‌شود که ابتدا در آن سرور ها و نود های هدف را به تفکیک تعیین و تشریح می‌کنیم و سپس در قسمت‌های دیگر این فایل می‌توانیم هاست‌های تعریف‌ شده را گروه بندی کرده و حتی بعد از آن می‌توانیم گروه‌هایی بزرگ تر از گروه‌های کوچکی که در مرحله قبل ساخته‌ایم بسازیم.ابتدا در مرحله اول نوع تعریف هاست و یک سری از قسمت‌های مورد نظر برای اتصال به هاست را مورد بررسی قرار می‌دهیم:در ابتدایی‌ترین قسمت این فایل نام هاست مورد نظر را در ابتدای کار وارد می‌کنیم بدین صورت که مثلا هاست اول را با نام host-1 در ابتدای خط به روش زیر می‌نویسیم:host-1در قسمت بعدی آیپی و یا آدرس این هاست را با فاصله نسبت به این قسمت با الگور ansible_host=IP (IP نمایانگر آدرس آیپی سرور می‌باشد) وارد می‌کنیم، به صورت زیر:host-1 ansible_host=10.0.0.5در قسمت بعد می‌توانیم نوع ارتباط خودمان با هاست مورد نظر را تعیین کنیم مثلا در صورتی که سرور مقصد از سیستم عامل لینوکس استفاده می‌کند ارتباط ما با این سرور از طریق ssh و در صورتی که سرور مقصد از سیستم عامل ویندوز استفاده می‌کند از طریق راه ارتباطی winrm استفاده می‌کنیم. تعریف این قسمت به روش زیر می‌باشد:host-1 ansible_host=10.0.0.5 ansible_connection=sshدر قسمت بعد یوزر یا نام کاربری که انسیبل از آن استفاده می‌کند تا اتفاقات مورد نظر خود در سرور هاست انجام دهد را وارد می‌کنیم مثلا در مثال مطرح شده از کاربر root استفاده می‌کنیم و قسمت مورد نظری که باید در آن تعریف شود به نام ansible_user را به شرح زیر پر می‌نماییم:host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=rootجز ۵ مورد بالا قسمت های بسیار زیادی قابل تعیین در قسمت تعریف هاست ها می‌باشد اما در نظر داشته باشید که تنها این ۴ مورد ابزار کافی برای ساخت فایل انسیبل را در اختیار ما قرار می‌دهد از جایی که این مقاله برای آشنایی بیشتر با انسیبل ساخته شده است از توضیحات بیشتر سر باز زده و به ادامه توضیحات کلی درباره انسیبل می‌پردازیم.در قسمت دیگری از فایل مخزن یا اینونتوری می‌توانیم هاست های تعریف شده را در دسته بندی های مختلف قرار دهیم و در هنگام استفاده از دستور انسیبل می‌توانیم نام گروه را معرفی کرده و اتفاق مورد نظر خود را بر روی گروهی از سرور ها انجام دهیم.به طور مثال فکر کنید چند هاست با الگوی زیر در یک فایل مخزن گزارش شده اند:host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=roothost-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=roothost-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=roothost-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=rootحال یک گروه از این هاست ها بر روی خود وب سرور داشته و گروه دیگری از این هاست ها بر روی خود دیتا بیس دارند و گروهی نیز اپلیکیشن را بر عهده دارند.مثلا سرور دیتابیس در هاست ۱ و ۳ قرار داشته و سرور اپلیکیشن در هاست ۲ و سرور وب سرور در هاست ۴ قرار داشته باشد.در حالت زیر می‌توانیم یگ گروه از هاست های بالا را تعریف کنیم که هر دو دیتا بیس باشند.به صورت زیر می‌توان یک گروه در مخزن انسیبل ایجاد کرد:[database]host1host3و فایل کلی اینونطوری ما با توجه به توضیح بالا می‌تواند به حالت زیر ساخته شود:host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=roothost-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=roothost-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=roothost-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=root[database]host1host3[webserver]host4[app]host2(در نظر داشته باشید که گروه ها می‌توانند تنها یک عضو داشته باشند و این موضوع هیچ اشکالی ندارد حتی اگر برای تغییر نام یک هاست باشد.)نوع دیگر از گروه ها آن است که گروهی ساخته شود و زیر شاخه هایش گروه های دیگری باشند.در این صورت برای تعریف این گروه ها از عبارتی همچون عبارت زیر استفاده می‌کنیم:[GROUP:children]به این صورت که ابتدا داخل کروشه عبارت گروه خود را تایپ کرده و سپس : گذاشته و در نهایت عبارت children را استفاده می‌کنیم تا اجازه داشته باشیم در این گروه از گروه های دیگر نیز استفاده کنیم.به طور مثال برای این که گروهی به اسم all متشکل از تمامی هاست های مثال قبل را داشته باشیم بدین صورت این گروه را معرفی می‌کنیم:[all:children]databasewebserverappدر نتیجه فایل نهایی مخزن ما به صورت زیر خواهد بود:host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=roothost-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=roothost-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=roothost-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=root[database]host1host3[webserver]host4[app]host2[all:children]databasewebserverappاین بود از اولین سری از قسمت‌های سریالی آموزش کاربردی انسیبل که قصد داریم به صورت هفتگی این سری را با همدیگر جلو ببریم.امیدوارم توضیحات من برای شما در یادگیری انسیبل کاربردی باشد.در صورتی که انتقاد یا پیشنهادی درباره این مقاله دارید می‌توانید با بنده در میان گذاشته تا سوالات شما حل شده یا در مقالات بعدی تصحیح شود.با تشکر از تیم ابرآراز که فرصت ارائه این مقاله را در اختیار من گذاشت.تا هفته بعد...