انسیبل loop چیست؟ چگونه با انسیبل loop کار کنیم؟
منظور از انسیبل چیست ؟ ساخت گروه در مخزن انسیبل چگونه انجام میشود؟ پلی بوک انسیبل (Playbook) ] چه معنایی دارد؟ ما در مقالات قبلی تلاش کردیم تا به تمامی این سوالات پاسخ دهیم. حال قصد داریم تا به شما توضیح دهیم که انسیبل loop به چه معناست؟
امیدواریم که تا به این قسمت، مجموعه مقالات انسیبل برای شما جذاب و مفید بوده باشد. انسیبل از جمله مباحث مفید این روزهای دنیای IT است که توجه زیادی را به خود جلب کرده است. به همین دلیل، ما قصد کردهایم به صورت دورهای و پیشرفته، انسیبل و مباحث مختلف مربوط به آن را برای شما شرح دهیم.
خلاصهای از آنچه تاکنون گفتیم
در قسمت اول این سری مجموعه، بحث درباره مخزن انسیبل شروع شد؛ جایی که سرورهای هدف در آن تعریف شده و چگونگی دسته بندی و ارتباط با آنها در این قسمت تعریف میشود.
در قسمت دوم بر آن شدیم تا دید کلیای درباره دستورات اولیه استفاده از انسیبل ببینیم و این موضوعات را مرور کنیم. استفاده از انسیبل در این قسمت در حد ابتدایی برای ما میسر شد. علاوه بر آن، ماژولها و ابزارهای پرکاربرد انسیبل را به شما معرفی کردیم. شما با استفاده از این ماژولها میتوانستید اعمال مختلفی را در سرورهای هدف انجام دهید.
در قسمت بعد، از استفاده روزانهی انسیبل فراتر رفته و استفاده از این ابزار قدرتمند به عنوان یک ابزار اتومیشن را فراگرفتیم. پس از آن، با یکدیگر بحث کردیم که چگونه میتوانیم با استفاده از پلیبوکها اقدامات روزانه یا دورهای که در تمامی سرورهای مورد هدف خود باید انجام دهیم را به صورت اتومات انجام دهیم.
در قسمت قبل اما با انسیبلهای مشروط یا انسیبل Conditional آشنا شده و گفتیم که در چه حالاتی میتوانیم شرطهایی برای انجام یا عدم انجام یک تسک در یک پلی بوک تعریف کنیم. حال در مقالهی انسیبل loop ، میخواهیم دربارهی روشهای نوشتن پلیبوک بیشتر صحبت کنیم.
این که چگونه میتوانیم از لوپها و چرخههای انسیبل استفاده کنیم و برای انجام کارها به جای این که یک مورد را چند بار تعریف کنیم یک بار تعریف کرده و با استفاده از انسیبل loop این کار را راحتتر انجام دهیم.
چگونه با ( انسیبل loop ) حلقههای انسیبل کار کنیم؟
بنا به سنت همیشگی در این سری از آموزشهای انسیبل میخواهیم انسیبل loop را نیز با یک مثال توضیح دهیم. در نظر داشته باشید که میخواهیم یک تعداد یوزر یا کاربر در سرورهای هدف بسازیم. برای این مهم میتوانیم از ماژول user استفاده کنیم.
برای این که تعدادی یوزر بسازیم میتوانیم این ماژول یا تسک را به اندازه مورد نیاز خود تکرار کنیم. با این کار، بعد از هر اجرای این تسک، یوزر تعریف شده در همین تسک ساخته میشود. اما راه دوم این است که یک وریابل یا متغیر تعریف کنیم که در آن تمامی یوزرهای مورد نظر ما برای ساخت تعریف شده باشد و با استفاده از یک انسیبل loop (حلقه انسیبل) این کار را انجام دهیم.
انسیبل loop ساخته شده تا در صورتی که نیاز داریم یک تسک به تعداد زیاد و هر بار با استفاده از یک مقدار انجام شود، این کار را برای ما انجام دهد تا مجبور نباشیم تعداد زیادی تسک همسان برای انجام یک کار تکراری بسازیم.
به طور مثال:
--- - name: Create users hosts: localhost tasks: - user: name=’{{ item }}’ state=present loop: - joe - george - ravi - mani - kiran
در پلی بوک بالا یک لوپ با تعداد مورد نظری آیتم معرفی شده و در قسمت تسک به جای این که متغیر مورد نظر وارد شود قسمت item نوشته شده که اشاره به این دارد تا این قسمت از لیستی که در انسیبل loop وجود دارد استفاده کند.
این روش بسیار کار را سازماندهی شدهتر میکند و به ما کمک میکند در هنگام استفاده بهتر از ماژولها استفاده کرده و توسعه راحتتری داشته باشیم.
- به طور کلی برای این که قسمتهای مختلف انسیبل loop (حلقه انسیبل) را در متغییرهای یک ماژول استفاده کنیم باید از حالت item استفاده کرده و در صورتی که نیاز داریم تا از یک وریابل این موضوعات را بخوانیم آن وریابل را به لوپ معرفی کنیم که این موضوع در ادامه مطرح خواهد شد.
استفاده از انسیبل loop در متغیرهای چند جزئی:
به طور کلی در صورتی که نیاز داشته باشید یک سری متغیرها برای هر آیتم تعریف کنید میتوانید از دیکشنریهای yml استفاده کنید. به طور مثال اگر نیاز داشته باشیم که هر کدام از یوزرها در سرویس با یک uid ساخته شوند، میتوانیم آیتمهای موجود در لوپ را بدین صورت تعریف کنیم.
--- - name: Create users hosts: localhost tasks: - user: name=’{{ item.name }}’ state=present uid=’{{ item.uid }}’ loop: - name: joe uid: 1010 - name :george uid: 1011 - name: ravi uid: 1012 - name: mani uid: 1013 - name: kiran uid: 1014
در حالت کلی، برای این که قسمت مشخصی از دیکشنری به متغیر مورد نظر ما وارد شود میتوانیم از حالت item.partofdictionary استفاده کنیم. مثلا در صورتی که نیاز داشته باشیم از یکی از اجزا دیکشنری یک آیتم به نام uid خروجی داشته باشیمT میتوانیم این موضوع را به صورت item.uid بنویسیم. پس از آن، دیکشنری مورد نظر ما کاملا در قسمت مورد نظر قرار گرفته و تسک به موفقیت انجام میشود.
سخن پایانی
در نظر داشته باشید که دایرکتوری loop به تازگی در انسیبل اضافه شده و قبلا از این ابزار با عنوان with_ یاد میشد. به طور مثال وقتی برای مثال بالا میخواستند تعدادی item معرفی کنند، از آپشن with_items استفاده میکردند و این قسمت را به جای loop میگذاشتند.
این موضوع تا جایی ادامه مییافت که برای هر نوع دیتا مثلا file و url ابزاری به اسم with_file و with_url قرار داده میشد. البته تمامی این موارد در حال حاضر با loop قابل انجام میباشند. ما در مقالهی بعدی این سری مجموعه دربارهی انسیبل رول (role) یا نقش انسیبل توضیح میدهیم؛ با ما همراه باشید.
امیدواریم از بحث امروز لذت برده و استفاده از انسیبل پلیبوک و انسیبل loop را به خوبی یادگرفته باشید. تلاش میکنیم در هفتههای بعد بیشتر دربارهی پلیبوک با هم صحبت کنیم. در صورتی که انتقاد یا پیشنهادی درباره این مقاله داریدُ میتوانید با ما در میان بگذارید، تا سوالات شما حل شده یا در مقالات بعدی تصحیح شود.