Ansible 101 – Reusing Ansible Tasks, Playbooks, And Roles

ကျွန်တော်တို့ 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 တွေကိုနမူနာကြည့်ပါ.

Image by Ansible Docs

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 က playbookrun ခင်အရင် 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

Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *