Ansible 101 – Ansible Tags

ကျွန်တော်တို့ ansible မှာ playbook တွေကိုရေးတဲ့အခါမှာ tags keyword ကိုထည့်သုံးလို့ရပါတယ်.

ansible playbook မှာ tags keyword ကို tasks, play, role, block တွေမှာထည့်ရေးချင်ဖြင့် ansible playbook ကို run တဲ့အချိန်မှာကျွန်တော်တို့ run ချင်တဲ့ tasks တွေကို ရွေးပြီး run လို့ရပါတယ်.

ansible tags ကို playbook မှာထည့်ရေးဖို့ကျွန်တော်တို့ “tags:” format ကိုသုံးပါတယ်.

ansible tags ကိုကျွန်တော်တို့ ansible role and playbook မှာသုံးကြည့်ရအောင်.

ကျွန်တော်တို့ ansible tags ကို ansible roles မှာသုံးတာကိုနမူနာကြည့်ပါ. ကျွန်တော် အရင်က ansible roles and collections အကြောင်းကို sharing လုပ်တုံကရေးထားတဲ့ webservers role ကိုသုံးထားပါတယ်.

 vim roles/webservers/tasks/main.yml
---
- name: install the correct web server for rhel
  import_tasks: redhat.yml
  when: ansible_facts['os_family'] | lower == 'redhat'
  notify:
    - restart webserver
  tags:
  - redhat
  - webservers

- name: install the correct web server for debian
  import_tasks: debian.yml
  when: ansible_facts['os_family'] | lower == 'debian'
  notify:
    - restart webserver
  tags:
  - debian
  - webservers

roles မှာသုံးထာတဲ့ playbook တွေရဲ့ code ကိုနမူနာကြည့်ပါ.

ansible tags ကို webservers role ရဲ့ playbook တွေမှာသတ်မှတ်ထားပါတယ်.

ansible tags ကို တစ်ခုထက်ပိုပြီးသတ်မှတ်လို့ရပါတယ်.

  tags:
  - debian
  - webservers

ansible roles မှာသတ်မှတ်ထားတဲ့ tags ကို ansible playbook မှာသုံးကြည့်ရအောင်.

vim ansible_tags.yml
---

- name: install webserver
  hosts: dev
  roles:
    - webservers
  tags:
   - webservers

ansible playbook မှာ tags: webservers ဆိုပြီးသတ်မှတ်ထားပါတယ်.

ansible playbook ကို run တဲ့အချိန်မှာ effect ဖြစ်မဲ့ tags တွေကို ” –list-tags “ option ကိုသုံးပြီး check လုပ်လို့ရပါတယ်.

ansible-playbook ansible_tags.yml --list-tags

ကျွန်တော်တို့ ansible_tags.yaml playbook မှာ webservers tags ကိုသတ်မှတ်ထားပါတယ်.

webservers roles ထဲမှာ webservers ဆိုပြီး tags သတ်မှတ်ထားတဲ့ playbook, tasks တွေက ကျွန်တော်တို့ playbook ကို run တဲ့အချိန်မှာ effect ဖြစ်မှာပါ.

တကယ်လို့ playbook run တဲ့အချိန်မှာ ကိုယ်မ run စေချင်တဲ့ play, tasks တွေကို skip ဖြစ်စေချင်ရင် ” –skip-tags “ option ကိုသုံးပြီး skip လုပ်လို့ရပါတယ်.

ansible-playbook ansible_tags --skip-tags "webservers"

webservers ဆိုတဲ့ tags သတ်မှတ်ထားတဲ့ playbook, tasks တွေကို ကျွန်တော်တို့ playbook ကို run တဲ့ အချိန်မှာ skip လုပ်မှာပါ.

special tags

ansible tags name မှာ special tags name ( ” always and never ” ) နှစ်ခုကို reserve လုပ်ထားပါတယ်.

ကျွန်တော်တို့ always tag ကို ansible play or tasks မှာသတ်မှတ်ထားရင်, ansible က always သတ်မှတ်ထားတဲ့ play or tasks တွေကို playbook run တိုင်မှာ အမြဲ run မှာပါ.

never tag ကိုသတ်မှတ်ထားရင်တော့ ansible က playbook ကို run တဲ့အခါမှာ never tag သတ်မှတ်ထားတဲ့ play or tasks ကို ထည့်မ run ပါဘူး.

always and never tags ကို playbook မှာသုံးတာကိုနမူနာကြည့်ပါ.

vim always_never_tags.yaml
---
- name: test ansible tags
  hosts: dev
  tasks:
    - name: print  a message
      debug:
        msg: "always run"
      tags:
      - always
    
    - name: print  a message
      debug:
        msg: "never run"
      tags:
      - never

ansible playbook ကို run ကြည့်ရအောင်.

 ansible-playbook --syntax-check always_never_tags.yaml 
 ansible-playbook always_never_tags.yaml 

never tag သတ်မှတ်ထားတဲ့ play or tasks တွေကို run ချင်ရင် ” -t “ option ကိုသုံးပြီး run လို့ရပါတယ်.

” -t “ option ကို ကိုယ်လိုချင်တဲ့ tags တွေကို ရွေပြီး run တဲ့နေရာမှာသုံးပါတယ်.

ကျွန်တော်တို့ never tag ကို ရွေပြီး run ကြည့်ရအောင်.

 ansible-playbook always_never_tags.yaml -t "never"

ansible tags ရဲ့ docs ကို အောက်ပါ links မှာကြည့်ပါ.

https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html

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 *