Using loop in ansible PlayBook


  • به طور کلی برای استفاده از حلقه در پرونده‌های PlayBook از loop و with_lookup استفاده می‌شود.
  • در حال حاضر loop و نحوه‌ی استفاده از آن در حال توسعه و رشد است لذا پیشنهاد می‌شود بیشتر از with_lookup استفاده شود.

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • با استفاده از ماژول file ، سه پرونده با نام‌های متفاوت ایجاد شود.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  • همان طور که در کد بالا مشاهده می‌کنید، با استفاده از متغیر item مشخص کردیم که سه پرونده‌ی file1 ، file2 و file3 ایجاد شوند.
  • به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :


  • به عنوان مثال کد زیر باعث می‌شود تا :
    • دو بسته‌ی httpd و elinks بر روی گروهی خاص از خادم‌های تحت مدیریت نصب و راه اندازی شوند.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :


  • به عنوان مثال کد زیر باعث می‌شود تا :
    • ابتدا محتویات پرونده‌های 01 و 02 به ترتیب درون متغیر item ریخته و نمایش داده شود.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :


  • به عنوان مثال کد زیر باعث می شود تا :
    • مقدار متغیر item زمانی چاپ شود که محتویات آن برابر با محتویات متغیر loop_1 باشد.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  • با اجرای پرونده‌ی بالا، ابتدا مقدار hello1 درون item ریخته می‌شود و چون مقدار item در این زمان برابر با مقدار متغیر loop_1 است، لذا مقدار item نمایش داده می‌شود.
  • در مرحله‌ی بعد مقدار hello2 درون item ریخته می‌شود و چون مقدار item در این زمان برابر با مقدار متغیر loop_1 نیست، لذا مقدار item نمایش داده نمی‌شود.
  • در مرحله‌ی بعد مقدار hello3 درون item ریخته می‌شود و چون مقدار item در این زمان برابر با مقدار متغیر loop_1 نیست، لذا مقدار item نمایش داده نمی‌شود.
  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :

  • در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجی‌ای مشابه زیر دریافت خواهید کرد :


  • به عنوان مثال کد زیر باعث می‌شود تا :
    • سه مقدار hello1 ، hello2 و hello3 زمانی چاپ شوند که مقدار متغیر ansible_distribution برابر با MacOSX باشد.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  • نکته: محتویات متغیر ansible_distribution از ansible_facts بدست آمده است.
  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :


  • به عنوان مثال کد زیر باعث می‌شود تا :
    • ابتدا یک گروه یا اصطلاحا یک directory از متغیرها با نام Fruits ایجاد شود.
    • سپس متغیرها یا کلیدهایی با نام Apple ، Orange و Grapes به همراه مقدارهایی برای آن‌ها در نظر گرفته شود.
    • سپس نام متغیرها یا کلیدها همراه با مقدار آن‌ها نمایش داده شود.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :

  • در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجی‌ای مشابه زیر دریافت خواهید کرد :

  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.

  • به عنوان مثال کد زیر باعث می‌شود تا :
    • مقادیر hello2 ، hello1 و hello3 به همراه شماره‌ی ترتیب آن‌ها نمایش داده شود.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  • نکته: item.0 مولفه‌ی شماره‌ی ترتیب می‌باشد در صورتی که item.1 حاوی محتویاتی که مشخص شده است، می‌باشد.
  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :

  • در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجی‌ای مشابه زیر دریافت خواهید کرد :

  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • نکته: همان طور که مشاهده می‌کنید، شروع ترتیب از عدد صفر می‌باشد. برای این که شروع از عدد یک باشد، کافیست یک واحد به آن اضافه کنیم :


  • به عنوان مثال کد زیر باعث می‌شود تا :
    • حلقه‌های تو در تو یا اصطلاحا nested با دو دسته از مقادیر شکل گیرد.
    • برای این منظور پرونده‌ی PlayBook زیر را در نظر بگیرید :

  •  به منظور اجرای پرونده‌ی PlayBook به شکل زیر عمل کنید :

  • در صورتی که کد بالا به صورت موفقیت آمیز اجرا شده باشد، خروجی‌ای مشابه زیر دریافت خواهید کرد :

  • به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
  • مشابه PlayBook بالا را می‌توان به صورت زیر در زبان Bash نظر گرفت :


  • به منظور مطالعه‌ی بیشتر لینک‌های زیر پیشنهاد می‌شود :


  • آزمایش شده بر روی Ansible نسخه‌ی 2.5.1
  • آزمایش شده بر روی سیستم عامل Ubuntu 18.04