در این آموزش از Ansible Tower نسخه ی 3.2.1 استفاده شده است.
بعد از نصب ansible tower و برطرف کردن مشکل لایسنس به مسیر زیر در سرور ansible tower بروید:
/var/lib/awx/projects
به طور پیش فرض پروژه های انسیبل در این مسیر ساخته خواهند شد. این مسیر قابل تغییر است.
ساخت پروژه Hello World
در مسیر بالا به ازای هر پروژه باید یک پوشه ساخته شود. در این مثال یک پوشه با نام helloworld ایجاد می کنیم:
/var/lib/awx/projects# mkdir helloworld
فایل playbook را در پوشه ی helloworld با نام helloworld-patch.yml ایجاد می کنیم:
/var/lib/awx/projects/helloworld# vi helloworld-patch.yml
می توانید در همین فایل تسک ها را تعریف کنید:
- name: hello World Sample hosts: all tasks: - name: Hello Message debug: msg: "Hello World!"
و یا از roles برای این کار استفاده کنید:
- hosts: - all roles: - role: './roles/helloworld'
که در این صورت باید تسک های خود را در پوشه ی roles قرار دهید. بدین منظور ساختار پوشه ایی زیر را در پوشه ی helloworld ایجاد کنید:
roles -> helloworld -> tasks
فایل main.yml را با محتویات زیر در پوشه ی tasks ایجاد نمایید:
- name: Hello Message debug: msg: "Hello World!"
مفاهیم اصلی Ansible Tower
قبل از ادامه ی کار با ansible tower، نیاز به آشنایی با مفاهیم زیر داریم:
برای اتصال به سیستم ها روش های متفاوتی وجود دارد، tower تعدادی type به صورت built in دارد: ،aws MS Azure، Machine(SSH) و ... . برای ایجاد type های بیشتر از بخش Credential Type استفاده می شود.
بخش معرفی نحوه ی Authentication روی هاست ها می باشد.
پروژه ی انسیبل ایجاد شده، در این بخش به سیستم معرفی می شود.
یک Node نهایی است که دستورات انسیبل روی آن اجرا می شود و می توان برای هر هاست متغیر های اختصاصی تعریف نمود.
چندین هاست می توانند در یک گروه قرار بگیرند. هاست ها ممکن است متغیر های مشترک داشته باشند که در group vars ها تعریف می شوند.
شامل ساختاری سلسله مراتبی از گروه ها و هاست ها به همراه متغیرهای مورد نیاز می باشد.
یک Template متشکل از ساختاری از اطلاعات فوق برای اجرای انسیبل است، در این ساختار، Project Inventory و Credential ها در یک قالب قرار میگیرند تا در نهایت بتوان پروژه را اجرا نمود. چیزی شبیه به دستور ansible-playbook می باشد (البته با قابلیت های بیشتری مثل تعریف نوتیفیکیشن و پرمیژن و ...).
مفاهیم دیگری مانند Organization، User، Team و ... وجود دارد که برای تست اولیه نیازی به این تعاریف نخواهیم داشت.
ایجاد موارد فوق
در مثال پیش رو فرض بر این است که دو هاست با IP های 100 و 124 داریم که قرار است دستورات انسیبل توسط SSH روی آن ها اجرا شود.
همچنین فرض میکنیم که هاست ها، پسورد های متفاوتی برای لاگین دارند. در صورتی که پسورد هاست ها یکسان بود و یا فقط یک هاست داشتیم، می توانستیم بدون تعریف Credential Type، از نوع Machine برای ایجاد یک Credential استفاده کنیم و همان Credential را در Template معرفی نماییم. اما در صورتی که (مانند مثال ما)، بیش از یک هاست داریم و پسورد هاست ها متفاوت است باید به ازای هر هاست یک Credential Type و سپس به ازای هر Type یک Credential تعریف کنیم تا بتوانیم در Template از چندین Credential استفاده کنیم. (در هر Template فقط می توان یک Credential از هر نوع انتخاب کرد.)
تعریف Credential Type ها
در ansible tower به بخش زیر بروید:
SETTINGS / CREDENTIAL TYPES
روی دکمه ی Add کلیک کنید:
فیلد Name: یک نام برای این نوع قرار دهید.
بخش Input Configuration: مشخص میکنیم که Credential از چه فیلد هایی تشکیل شده است و کدام فیلد ها اجباری می باشد:
fields: - type: string id: custom_user label: Username - secret: true type: string id: custom_pass label: Password required: - custom_user - custom_pass
در این مثال ما دو فیلد داریم با نام های Username و Password، که پسورد از نوع secret می باشد.
بخش Injector Configuration: نحوه ی انتقال مقادیر فیلدها به inventory ها و job ها در این بخش مشخص می شود:
extra_vars: pass_124: '{{custom_pass}}' user_124: '{{custom_user}}'
در این مثال دو متغیر ایجاد کرده ایم که در هاست 124 از آن استفاده خواهیم کرد.
از دکمه ی Save برای ذخیره ی Credential Type استفاده نمایید.
مانند مراحل بالا یک Credential Type دیگر برای استفاده در هاست 100 ایجاد خواهیم کرد:
بخش Input Configuration مانند مراحل قبل است، اما در بخش Injector Configuration نام متغیرها تغییر کرده است چون این نام ها باید در کل محیط Ansible Tower منحصر به فرد باشد.
ایجاد Credential
در ansible tower به بخش زیر بروید:
SETTINGS / CREDENTIAL
روی دکمه ی Add کلیک کنید:
همانطور که در تصویر مشخص است برای هاست 100 یک Credential تعریف شده است که نوع آن همان Credential Type تعریف شده در مرحله ی قبل است. در ورودی های Username و Password، نام کاربری و رمز ورود برای اتصال SSH به سرور 100 را وارد نموده ایم.
برای هاست 124 مشابه با تصویر فوق یک Credential البته از نوع 238.124 ایجاد کنید.
با توجه به این که در Template، انتخاب یک Credential از نوع Machine اجباری هست، یک Credential با نام SSH خواهیم ساخت که Credential Type در آن Machine انتخاب شده است. مابقی فیلد ها را خالی می گذاریم:
ایجاد Project
از منوی بالای Ansible Tower بخش Projects را انتخاب کنید و سپس دکمه ی Add را بزنید:
همانند تصویر یک نام برای پروژه قرار دهید. از آنجایی که قرار نیست سورس پروژه از Source Control گرفته شود، Manual را در بخش SCM Type انتخاب نمایید و سپس نام پوشه ایی که در مسیر /var/lib/awx/projects ساخته اید را در فیلد Playbook Directory انتخاب نمایید(در این مثال helloworld).
ایجاد Inventory
از منوی بالای Ansible Tower بخش Inventoiesرا انتخاب کنید و سپس دکمه ی Add را بزنید و Inventory را انتخاب کنید:
یک نام برای آن انتخاب کنید و دکمه ی Save را بزنید. سپس به تب Groups بروید و دکمه ی Add Group را بزنید:
یک نام برای آن وارد کنید و گروه را Save کنید، سپس از تب Hosts روی دکمه ی Add کلیک کنید و New Host را انتخاب کنید:
مانند تصویر در بخش Host Name آدرس IP هاست را به طور کامل وارد نمایید. در بخش Variables نیز مقادیر زیر را وارد کنید:
ansible_ssh_user: '{{ user_100 }}' ansible_ssh_pass: '{{ pass_100 }}'
این متغیر ها از Credential های تعریف شده مقدار میگیرند و برای لاگین ssh استفاده می شوند.
هاست را ذخیره کنید و برای هاست 124 مراحل فوق را مجددا انجام دهید:
متغیر های هاست 124:
ansible_ssh_user: '{{ user_124 }}' ansible_ssh_pass: '{{ pass_124 }}'
ایجاد Template
از منوی بالای صفحه ی Ansible Tower بخش Templates را انتخاب و سپس دکمه ی Add را بزنید و Job Template را انتخاب کنید:
فیلد Name: یک نام برای Template وارد کنید.
فیلد Inventory: Inventory که در مرحله ی قبل ایجاد کردید را انتخاب نمایید.
فیلد Project: پروژه را در این فیلد انتخاب نمایید.
فیلد Playbook: در این فیلد می توانید فایل های playbook که در پوشه ی helloworld ایجاد نمودید را انتخاب نمایید.
فیلد Credential: در این فایل علاوه بر SSH، دو Credential ساخته شده برای هاست ها را انتخاب نمایید.
فرم Template را ذخیره کنید و سپس در لیست Template ها روی آیکون launch کلیک کنید تا یک job را شروع نمایید:
در صورتی که با چنین خطایی روبرو شدید:
به مسیر زیر بروید:
SETTINGS / EDIT CONFIGURATION
تب Jobs را انتخاب کنید و Enable job isolation را فعال و Save کنید. مجددا از Templates دکمه ی launch را بزنید: