ကျွန်တော်တို့ ansible roles, playbooks တွေကို အခြား roles, playbook တွေမှာ ပြန်ခေါ်သုံးလို့ရပါတယ်.
ကျွန်တော်တို့ playbook တစ်ခုရေးထားပြီး, playbook ထဲက tasks, variables တွေကို အခြား playbook တွေမှာပြန်သုံးလို့ရပါတယ်.
playbook တစ်ခုထဲမှာ tasks, variables တွေကိုစုရေးတာတော့ မကောင်းပါဘူး, manage လုပ်ရတာခက်ပါတယ်.
playbook တွေကို သက်ဆိုင်ရာ tasks, variables တွေပေါ်မူတည်ပြီး files တွေခွဲပြီး သတ်မှတ်တာပိုကောင်းပါတယ်. ကိုယ် automate လုပ်ချင်တဲ့ resources တွေရဲ category ( cloud, storage, network, virtualization, security ) အလိုက် files ခွဲပြီးသတ်မှတ်တာလဲကောင်းပါတယ်.
ansible မှာ variables files, task files, playbooks, and roles တွေက ပြန်သုံးလို့ရပါတယ်.
- variables files မှာ variables တွေကိုသတ်မှတ်ထားပါတယ်.
- task files မှာ automate လုပ်ချင်တဲ့ tasks တွေကိုသတ်မှတ်ထားပါတယ်.
- playbook မှာ play, variables, tasks တွေကိုသတ်မှတ်ထားပါတယ်.
- roles ထဲမှာ tasks, variables,defaults,handlers,modules, plugins တွေကိုသတ်မှတ်ထားပါတယ်. ansible roles ကို ansible galaxy ကိုသုံးပြီး sharing လုပ်လို့ရပါတယ်. variables, task, playbook တို့က ansible galaxy ကိုသုံးပြီး sharing လုပ်လို့မရပါဘူး.
ansible galaxy နဲ့ပါတ်သက်ပြီး ကျွန်တော် sharing လုပ်ထားတာရှိပါတယ်.
re-using playbooks
ကျွန်တော်တို့ playbooks တွေကိုသက်ဆိုင်ရာ tasks အလိုက် files ခွဲသတ်မှတ်ပြီး main playbook မှာပြန်သုံးလို့ရပါတယ်.
တကယ်လို့ကျွန်တော်တို့က LAMP stack server တစ်ခုကို configuration management လုပ်ချင်ရင် playbook တစ်ခုထဲမှာ tasks တွေအကုန်သတ်မှတ်တာထက် သက်ဆိုင်ရာ အပိုင်းလိုက်ခွဲပြီးသတ်မှတ််တာပိုကောင်းပါတယ်.
Linux, Apache, MySQL, PHP တို့အတွက် playbook တစ်ခုစီခွဲပြီးသတ်မှတ်တာပိုကောင်းပါတယ်.
ပြီးမှကိုလိုချင်တဲ့ tasks တွေကို main playbook မှာ import လုပ်ပြီးသုံးလို့ရပါတယ်.

LAMP stack မှာသုံးတဲ့ playbooks တွေထဲက tasks တွေကို အခြား playbook တွေမှာသုံးချင်ရင် ” import_playbook ” ကိုသုံးပြီး ခေါ်လို့ရပါတယ်.
- import_playbook: apache.yml
ကျွန်တော်တို့ import_playbook ကိုသုံးပြီး tasks တွေကို playbook မှာပြန်သုံးတာကိုနမူနာကြည့်ပါ. import လုပ်မဲ့ playbook မှာ hosts and tasks တွေကိုသတ်မှတ်ထားရမှာပါ.
cat lamp/apache.yml
---
- name: install apache2
hosts: dev
tasks:
- name: install apache
apt:
name: apache2
state: latest
main.yml file မှာ apache playbook ကိုပြန်သုံးတာကိုကြည့်ပါ.
vim main.yml
import_playbook ကို playbook ရဲ့ top level မှာဘဲသုံးလို့ရပါတယ်.
play level မှာသုံးလို့မရပါဘူး.
---
- name: install apache server
import_playbook: lamp/apache.yml
ansible-playbook --syntax-check main.yml
ansible-playbook main.yml

re-using files and roles
ansible မှာ files and roles တွေကို playbook မှာပြန်သုံးလို့ရတဲ့နည်းနှစ်မျိုးရှိပါတယ်, dynamic and static re-use.
dynamic re-use ကိုသုံးဖို့ ansible playbook ရဲ့ play မှာ ” include_*” tasks ကိုထည့်ပေးရပါတယ်.
dynamic re-use မှာသုံးတဲ့ include_* tasks တွေကိုကြည့်ပါ.
- include_role
- include_tasks
- include_vars
static re-use ကိုသုံးဖို့ ansible playbook ရဲ့ play မှာ “import_*” tasks ကိုထည့်ပေးရပါတယ်.
static re-reuse မှာသုံးတဲ့ import_* tasks တွေကိုကြည့်ပါ.
- import_role
- import_tasks
ansible role ကို playbook မှာ role keyword ကို play level မှာသတ်မှတ်ပြီးသုံးလဲရပါတယ်.
ansible role နဲ့ပါတ်သတ်ပြီး ကျွန်တော်အရင်က sharing လုပ်ထားတာရှိပါတယ်.
difference between static and dynamic
static re-use ( import_* ) ကိုသုံးတဲ့အခါမှာ ansible ကပြန်သုံးချင်တဲ့ tasks တွေကို playbook ထဲကို ကြိုပြီးတော့ ထည့်သွင်းထားပါတယ်.
dynamic re-use ( include_* ) ကိုသုံးတဲ့အခါမှာ ansible ကပြန်သုံးချင်တဲ့ tasks တွေကို playbook ကို run တဲ့အချိန် ( runtime ) မှ ထည့်သွင်းပြီးသုံးပါတယ်.
static and dynamic re-use ကို playbook တစ်ခုထဲမှာအတူတွဲသုံးလို့ရပါတယ်, ဒါပေမဲ့ တစ်ခုဘဲသုံးတာကောင်းပါတယ်.
playbook မှာ static re-use ကိုသုံးမယ်ဆိုရင် static ကိုသုံးတာကောင်းပါတယ်, တကယ်လို့ playbook မှာ errors ဖြစ်ရင် ရှင်းရတာလွယ်အောင်ပါ.
static and dynamic re-use ရဲ့ differences တွေကိုနမူနာကြည့်ပါ.

dynamic re-use ( include_* )
dynamic re-use ( include_*) မှာ roles, tasks, playbooks တွေကို ပြန်သုံးမဲ့ playbooks ထဲကို ansible က playbook run မှ process လုပ်ပါတယ်.
roles, tasks, variables တွေကို playbook ထဲမှာ dynamically ပြန်သုံးချင်ရင် include_* ကိုသုံးလို့ရပါတယ်.
include_* နဲ့ခေါ်သုံးတဲ့ roles, tasks, variables တွေကို top-level playbook မှာသတ်မှတ်ထားတဲ့ tasks တွေရဲ့ results ကသက်ရောက်မူရှိပါတယ်.
include_* နဲ့ခေါ်သုံးတဲ့ roles, tasks, variables တွေက ansible handlers နဲ့ခေါ်သုံးသလိုပါဘဲ.
include_* က ansible loops နဲ့သုံးရတာအဆင်ပြေပါတယ်.
include_* ကို handlers နဲ့ ansible playbook မှာသုံးတာကိုကြည့်ပါ.
ansible handlers နဲ့ပါတ်သက်ပြီး ကျွန်တော်အရင်က sharing လုပ်ထားတာရှိပါတယ်.
vim include.yml
---
- name: testing include
hosts: dev
tasks:
- name: use command module
command: "true"
notify: restart service
handlers:
- name: restart service
include_tasks: restart.yml
restart.yml file ထဲက tasks ကို include_* ကိုသုံးပြီး include.yml မှာပြန်သုံးထားပါတယ်.
vim restart.yml
---
- name: restart apache webserver
service:
name: apache2
state: restarted
include.yml playbook ကို run ကြည့်ရအောင်.
ansible-playbook --syntax-check include.yml
ansible-playbook include.yml

include_* ကို handlers နဲ့မသုံးဘဲ ရိုးရိုး tasks မှာလဲသုံးလို့ရပါတယ်.
static re-use ( import_*)
static re-use ( import_*) မှာ roles, tasks, playbooks တွေကို ပြန်သုံးမဲ့ playbooks ထဲကို ansible က playbook မ run ခင်အရင် process လုပ်ပါတယ်.
import လုပ်ထားတဲ့ roles, tasks, playbooks တွေက playbook ရဲ့ top-level မှာရှိတဲ့ tasks တွေရဲ့ results အပေါ်မမူတည်ပါဘူး.
ကျွန်တော်တို့ variables တွေကိုလဲ import လုပ်လို့ရပါတယ်.
static re-use ( import_* ) ကို playbook မှာသုံးတာကိုနမူနာကြည့်ပါ.
vim import.yml
---
- name: using static re-use
hosts: dev
tasks:
- import_tasks: package.yml
- import_tasks: restart.yml
vars:
server: apache2
package.yml and restart.yml ကို static re-use ( import_*) သုံးပြီး playbook မှာပြန်သုံးထားပါတယ်.
restart.yml မှာ variables ကိုလဲ import လုပ်ထားပါတယ်.
vim package.yml
---
- name: install package
apt:
name: htop
state: latest
vim restart.yml
---
- name: restart apache webserver
service:
name: "{{ server }}"
state: restarted
playbook ကို run ကြည့်ရအောင်.
ansible-playbook --syntax-check import.yml
ansible-playbook import.yml

ansible ကိုဆက်လေ့လာလိုလျှင်.
https://www.ansiblefordevops.com/
https://www.jeffgeerling.com/blog/2020/ansible-101-jeff-geerling-youtube-streaming-series