فایل های playbook با فرمت YAML یک یا چند play را تعریف میکنند. یک play مجموعهای از taskهای مرتب شده است که برای اتوماسیون فرآیندی مثل راهاندازی یک وبسرور یا دیپلوی یک اپلیکیشن به محیط تولید، استفاده میشود.
در فایل playbook، playها به صورت یک لیست YAML تعریف میشوند. هر play معمولا با مشخصکردن hostهایی که هدف آن setup هستند، شروع میشود. این کار با دستور hosts انجام میشود.
انتخاب all به عنوان hosts یک گزینه رایج است؛ زیرا در زمان اجرای playbook میتوانید با پارامتر -l هدف را محدود کنید. پس میتوانید همین playbook را روی سرورهای مختلف یا گروهها اجرا کنید بدون این که نیاز باشد هر بار playbook را ویرایش کنید.
ابتدا یک فولدر جدید با نام ansible-practice در home خود ایجاد کنید و وارد آن شوید:
cd ~
mkdir ansible-practice
cd ansible-practice
اگر تمام پیشنیازها را انجام دادهاید، باید یک فایل inventory آماده داشته باشید. حالا میتوانید آن فایل را به ansible-practice کپی کنید. مثلا اگر فایل test inventory را قبلا در فولدر ansible ساختهاید، با دستور زیر آن را انتقال دهید:
cp ~/ansible/inventory ~/ansible-practice/
حالا یک فایل playbook جدید بسازید:
nano playbook-01.yml
playbook زیر یک play را تعریف میکند که تمام hostهای inventory را هدف قرار میدهد و یک task برای چاپ پیام debug دارد.
- hosts: all
tasks:
- name: Print debug message
debug:
msg: Hello, this is your first Ansible playbook!
پس از افزودن محتوا، فایل را ذخیره و ببندید. اگر از nano استفاده میکنید: CTRL+X، سپس Y و ENTER بزنید.
برای اجرای playbook روی سرورهایی که در فایل inventory تعریف کردهاید، از دستور زیر استفاده کنید (نام فایل و نام کاربری خود را جایگزین کنید):
ansible-playbook -i inventory playbook-01.yml -u sammy
خروجی مشابه زیر خواهید دید:
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [your_server_ip]
TASK [Print debug message] *****************************************************
ok: [your_server_ip] => {
"msg": "Hello, this is your first Ansible playbook!"
}
PLAY RECAP *********************************************************************
your_server_ip : ok=2 changed=0 unreachable=0 failed=0
حتی اگر فقط یک task داخل playbook تعریف کرده باشید، در خروجی play، دو task نمایش داده میشود. ابتدای هر play، Ansible به طور پیشفرض یک task اضافی برای جمعآوری اطلاعات — یا همان facts — از remote nodeها اجرا میکند. این factsها میتوانند برای سفارشیسازی بهتر رفتار taskها استفاده شوند؛ بنابراین task جمعآوری facts باید پیش از هر task دیگری اجرا شود.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران