Ansible roles


  • برای نگارش پرونده‌های yaml نیازی نیست تا تمام دستورالعمل‌ها اعم از Task ، handlers ، Template و … را در درون یک پرونده ایجاد کرد.
  • این کار خطایابی را با مشکل روبه‌رو می‌کند.
  • راه‌کار دیگر استفاده از مفهوم roles می‌باشد.
  • این راه‌کار اجازه می‌دهد تا تمام مواردی که قرار است در درون پرونده‌ی PlayBook استفاده شود، در درون پوشه‌ها و پرونده‌هایی جدا از هم نگارش شود.

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

  • نکته: حتما باید از نام roles استفاده شود.
  • در مرحله بعد پوشه‌ای با نام PlayBook اصلی ایجاد کنید :

  • نکته: نام install_apache فرضی بوده و باید تغییر یابد.
  • در مرحله‌ی بعد پوشه‌های tasks و handlers را درون این پوشه ایجاد کنید :

  • در مرحله‌ی بعد پرونده‌ای درون پوشه‌ی tasks و handlers ایجاد کنید.

  • نکته: نام main.yaml مثال بوده و باید تغییر یابد.
  • نکته: انتخاب نام start_service کاملا اختیاری می‌باشد.
  • نکته: محتویات پرونده‌ها را عینا مطابق بالا در نظر بگیرید.
  • نکته: برای مشاهده ساختار درختی پوشه‌ها و پرونده‌های ایجاد شده، پیشنهاد می‌شود از دستور tree استفاده کنید.

  • سپس می‌توان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.
  • برای این منظور :

  • نکته: انتخاب نام roles.yaml فرضی بوده و می‌توان هر نام دیگری نیز اختیار کرد.
  • نکته: پرونده‌ی roles.yaml خارج از پوشه‌ی roles باید قرار گیرد.
  • در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :

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


  • به عنوان مثالی دیگر فرض کنید قصد :
    • نصب سرویس Apache را بر روی گروهی خاص از خادم‌های تحت مدیریت دارید.
    • سپس در صورتی که سرویس Apache به صورت موفقیت آمیز نصب شد، به منظور پیکربندی متوقف شود.
    • سپس در مرحله آخر با استفاده از ماژول template و vars پرونده‌ی پیکربندی از پیش آماده شده به خادم‌های تحت مدیریت انتقال داده شود.
  • برای این منظور کافیست در پوشه‌ی جاری یک پوشه با نام roles ایجاد کنید :

  • نکته: حتما باید از نام roles استفاده شود.
  • در مرحله بعد پوشه‌ای با نام PlayBook اصلی ایجاد کنید :

  • در مرحله‌ی بعد پوشه‌های tasks و handlers را درون این پوشه ایجاد کنید :

  • در مرحله‌ی بعد پرونده‌ای درون پوشه‌ی tasks و handlers ایجاد کنید.

  • نکته: نیازی به وارد کردن آدرس کامل پرونده‌ی j2 در پوشه‌ی template برای پارامتر src نیست.
  • در ادامه پرونده‌ی پیکربندی مورد نظر با پسوند j2 را درون پوشه‌ی templates قرار دهید.

  • نکته: مسیر etc/apache2/apache2.j2/ فرضی بوده و باید متناسب با خادمی که در اختیار دارید، آن را تغییر دهید.
  • نکته: درون پرونده‌ی j2 متغییر با نام webmaster به صورت زیر در نظر گرفته شده است :

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

  • نکته: انتخاب نام متغیر time فرضی بوده و باید متناسب با PlayBook شما تغییر یابد.
  • نکته: برای مشاهده ساختار درختی پوشه‌ها و پرونده‌های ایجاد شده، پیشنهاد می‌شود از دستور tree استفاده کنید.

  • سپس می‌توان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.
  • برای این منظور :

  • نکته: انتخاب نام roles.yaml فرضی بوده و می‌توان هر نام دیگری نیز اختیار کرد.
  • نکته: پرونده‌ی roles.yaml خارج از پوشه‌ی roles باید قرار گیرد.
  • در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :

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


  • به عنوان مثالی دیگر، فرض کنید می‌خواهیم :
    • سرویس polipo بر روی گروهی از خادم‌های تحت مدیریت نصب شود.
    • سپس پرونده‌ی تنظیمات این سرویس از خادم مرکزی بر روی گروهی خاص از خادم‌های تحت مدیریت انتقال داده شود.
  • برای این منظور کافیست در پوشه‌ی جاری یک پوشه با نام roles ایجاد کنید :

  • نکته: حتما باید از نام roles استفاده شود.
  • در مرحله بعد پوشه‌ای با نام PlayBook اصلی ایجاد کنید :

  • در مرحله‌ی بعد پوشه‌های tasks را درون این پوشه ایجاد کنید :

  • در مرحله بعد پرونده‌ی main.yaml را در درون پوشه‌های ایجاد شده، بسازید و محتویات آن را به صورت زیر در نظر بگیرید :

  • نکته: برای مشاهده ساختار درختی پوشه‌ها و پرونده‌های ایجاد شده، پیشنهاد می‌شود از دستور tree استفاده کنید.

  • سپس می‌توان PlayBook اصلی را ایجاد کرد و درون آن به PlayBook هایی که قبلا ایجاد کردیم، اشاره نمود.

  • نکته: امکان اشاره به چندین role وجود دارد. به عنوان مثال در کد بالا به صورت هم‌زمان به role های install_polipo و install_apache اشاره شده است.
  • نکته: نام‌های استفاده شده در مثال بالا فرضی می‌باشد.
  • در نهایت کافیست PlayBook اصلی را به شکل زیر اجرا کنید :


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


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