Sunday, October 17, 2021

Ansible in the house - Episode - 2

                   Control node မှာ Ansible installation လုပ်ပြီးသွားပြီဆိုရင်တော့ ကျွန်တော်တို့ ansible ကို အသုံးပြုပြီး nodes တွေကို စတင် test လုပ်ကြည့်ကျမယ်။ အရင်ဆုံး ansible ကနေ လှမ်းပြီး manage လုပ်ဖို့အတွက် သူ့မှာ inventory list ရှိရပါတယ်။

What and Where is ansible inventory?

         Inventory ဆိုတာကတော့ single node or a collection of nodes တွေ ထည့်သွင်းထားတဲ့ file တစ်ခု ဖြစ်တယ်။ Ansible ကို အသုံးပြုဖို့အတွက် ဒီ inventory file လိုအပ်တယ်။ ဒီ Inventory file ထဲမှာ ထည့်သွင်းထားတဲ့ nodes တွေကိုမှ ansible ကနေ manage လုပ်နိုင်မှာဖြစ်ပါတယ်။ Ansible Inventory file ရဲ့ default location ကတော့ "/etc/ansible" directory အောက်မှာရှိတဲ့ "hosts" file ဖြစ်ပါတယ်။  အောက်ပုံမှာဆိုရင် host file ထဲမှာ ansible ကနေ manage လုပ်မယ့် node ip address  <or> hostname ကို lable name "test" ရဲ့အောက်မှာ ထည့်သွင်းထားပါတယ်။


           အိုကေ, အခုဆိုရင် ansible အသုံးပြုဖို့အတွက် inventory list မှာလဲ node တစ်ခုထည့်သွင်းပြီးပြီ။ ဒါဆိုရင် ansible ကို စမ်းသုံးကြည့်ရအောင်။ ပထမဦးဆုံး အနေနဲ့ ansible ကို အသုံးပြုပြီး တော့ remote server ကို "ping" လုပ်ကြည့်မယ်။ ပုံမှန်ဆိုရင် server ကို ssh access ၀င်ပြီးတော့မှ ပြုလုပ်လို့ရတာတွေကို ansible ကိုအသုံးပြုပြီး control node ကနေ manage လုပ်သွားမှာဖြစ်ပါတယ်။ 
           အောက်ပုံမှာ ဆိုရင်  ansible ရဲ့ "ping module" ကိုသုံးပြီး remote server နဲ့ connection ရှိမရှိ  ping ကြည့်တာဖြစ်ပါတယ်။ အသုံးပြုသွားတဲ့ command options တွေကတော့ "test" က hosts file ထဲမှာ သတ်မှတ်ထားတဲ့ remote server ရဲ့ label name, "-m ping" ဆိုတာက ping module ကို အသုံးပြုမယ်လို့ ပြောတာဖြစ်ပြီး ဒီနေရာမှာ " -u root" ဆိုတာက ဒီ ping task ကို remote server ဖက်မှာ ဘယ် user နဲ့ execute လုပ်မလဲဆိုတာ သတ်မှတ်တာ ဖြစ်တယ်။ "-k" ဆိုတာကတော့ လောလောဆယ်မှာ ansible control node နဲ့ remote server ကြားမှာ passwordless ssh (key-based authentication) မလုပ်ရသေးတဲ့ အတွက်  ansible command ကို execute လုပ်တဲ့အခါမှာ "-k" option ကို ssh connection အတွက် ထည့်သွင်း ပေးရတာဖြစ်ပါတယ်။ 




          နောက်ထပ် Example တစ်ခုကိုတော့ remote server ရဲ့ ram utilization ကို ကြည့်ကြည့်မယ် နောက်ပြီး disk information ကို ကြည့်ကြည့်မယ်။ အောက်ပုံမှာ သုံးသွားတဲ့ command options တွေထဲက အပေါ်မှာ သုံးသွားတာနဲ့ မတူညီတာဆိုရင် "-i" ဆိုတာက inventory file location ကို ကျွန်တော်တို့က default ဖြစ်တဲ့ "/etc/ansible" အောက်မှာ မသုံးပဲနဲ့ customzie သုံးချင်ရင် "-i" ကို ထည့်ပေးရတယ်။ ပြောချင်တာက "/etc/ansible" directory အောက်မှ ဖြစ်စရာမလိုဘူးကြိုက်တဲ့ နေရာမှာ သတ်မှတ်နိုင်ပါတယ်။ နောက်တစ်ခု ဖြစ်တဲ့ "-a" ဆိုတာက "module arguments" ဖြစ်ပြီး သူ့နောက်မှာ ကိုယ်ကသုံးချင်တဲ့ commands တွေ ရိုက်ထည့်ပေးနိုင်တယ်။


          နောက်ထပ် example တစ်ခုအနေနဲ့ ကတော့ "-v [verbose]" options ကို အသုံးပြုတာဖြစ်ပါတယ်။ အကယ်၍ ansible run တဲ့အခါမှာ error တက်သွားတာပဲ ဖြစ်ဖြစ် ansible run ထဲ process ကို details ကြည့်ချင်တဲ့ အခါမှာ "-v" option ကို ထည့်သွင်း အသုံးပြုပါတယ်။ Verbose " -v " တစ်ခုထည့် ပိုပြီး အသုံးပြုရင် output details ပိုပြပေးမှာဖြစ်ပါတယ်။ အခု ကျွန်တော်တို့ လုပ်ကြည့် သွားတာတွေကို ansible မှာ "ad-hoc" command တွေလို့ ခေါ်ပါတယ်။ တစ်နည်းအားဖြင့် playbooks မတည်ဆောက်ပဲ terminal ပေါ်မှာပဲ ansible ကို တိုက်ရိုက် ခေါ်သုံးတဲ့ ပုံစံမျိုးဖြစ်ပါတယ်။ Ansible Playbooks အပိုင်းကိုတော့ နောက်ပိုင်း Episode တွေမှာ လေ့လာကြတာပေါ့။ 



  

Let's set up ssh key-based authentication 


           အခု အပေါ်မှာ တောက်လျှောက် စမ်းလာခဲ့သမျှ ssh passworkd အတွက် "-k" ကို သုံးလာခဲ့တယ်။ အခု ssh key based ကို အသုံးပြုလိုက်မယ်ဆိုရင် ansible run တဲ့အခါမှာ password less method နဲ့ run သွားမှာဖြစ်ပါတယ်။ အောက်ပုံမှာဆိုရင် ssh-keygen ဖြင့် control node မှာ key generate လုပ်စေပြီး တစ်ဖက် remote server ထဲသို့ ssh-copy-id command ဖြင့် authorization input သွားထည့်ပေးတာဖြစ်ပါတယ်။ ဒါဆိုရင် ansible ကို run ကြည့်ရင် ssh connection အတွက် option "-k" ထည့်စရာမလိုတော့ပဲ run သွားမှာဖြစ်ပါတယ်။





Let's play some more on ansible ad-hoc

Install "httpd" package with ansible

          Ansible ad-hoc command ဖြင့် http package install လုပ်ကြည့်မယ်။ Package install ပြုလုပ်ဖို့ အတွက် အသုံးပြုရမယ့် module က "yum" module ဖြစ်ပါတယ်။ သုံးထားတဲ့ options တွေကတော့ "name=httpd" install လုပ်မယ့် package name ကိုသတ်မှတ်တာဖြစ်ပြီး "state=present" ကတော့ http package သည် system ပေါ်မှာ တစ်ကယ် ရှိမရှိ စစ်ပေးတာဖြစ်ပါတယ်။ "state=absent" ကိုတော့ package remove လုပ်ရာမှာ သတ်မှတ်ပေးရပါတယ်။ "state:latest" ဆိုရင်တော့ package install လုပ်ရမှာ latest version ကို ရွေးပြီး install ပြုလုပ်မှာဖြစ်ပါတယ်။





                နောက်ထပ်တစ်ခေါက် ထပ် run တဲ့ အခါမှာ remote server မှာ "http" package installed ပြီးသွား ပြီမို့လို့ ansible အနေနဲ ဘာမှ ထပ်မလုပ်တော့ပဲ output မှာ "http already installed" ဆိုပြီး ပြပေးတာဖြစ်ပါတယ်။



Start "httpd" service with ansible ad-hoc


                Package install လုပ်ပြီး သွားပြီးနောက် service ကို start လုပ်ကြည့်မယ်။ အသုံးပြုသွားတဲ့ options တွေက တော့ "name=httpd" httpd service ကို "state=started" start လုပ်မယ် ပြီးရင် reboot ချခဲ့ရင်လဲ persistent ဖြစ်အောင် "enabled=yes" လုပ်မယ်လို့ အသုံးပြုသွားတာဖြစ်ပါတယ်။ အခုလို ပုံစံမျိုးကိုပဲ "state=stopped/restarted" လဲ အသုံးပြုလို့ရပါတယ်။




Let's copy a index.html to remote server


                အခုဆို remote server ဖက်ခြမ်းမှာ web services install လုပ်ပြီးပြီ service လဲ start ဖြစ်နေပြီ။ ဒါဆို နောက်တစ်ဆင့် အနေနဲ့  ansible ရဲ့ "copy" module ကို အသုံးပြုပြီး remote server ရဲ့ "/var/www/html" directory အောက်မှာ "index.html" file ကို control node ကနေ copy ကူးပြီး သွားထားပေးမယ့် ပုံစံဖြစ်ပါတယ်။ဒီနေရာမှာ အသုံးပြုထားတဲ့ ansible options တွေကတော့ " -m copy" copy module ကို အသုံးပြုမယ် "src=/root/index.html" source location က file ကို သတ်မှတ်ထားတယ် "dest=/var/www/html" remote server ဖက်ခြမ်းရဲ့ /var/www/html အောက်မှာ သွားထားပေးမယ်။ copy ကူးပြီးသွားရင် "httpd" service ကို restart ချဖို့ အတွက် "state=restarted" option ကို အသုံးပြုရပါမယ်။ 



    
                Service restart ချပြီးရင်တော့ remote server ရဲ့ website ကို လှမ်းခေါ်ဖို့ အတွက် firewall မှာ http port ဖွင့်ပေးရပါမယ်။ လိုအပ်တဲ့ port တွေ ဖွင့် ဖို့ အတွက် ansible ရဲ့ firewalld module ကို အသုံးပြုရပါမယ်။ အောက်ပုံမှာ firewalld module ရဲ့ options တွေကတော့ "service=http" allow လုပ်မယ့် service name သတ်မှတ်တယ် "permanent=yes" permanent rule ဖြစ်မယ် "state=enabled" state ကတော့ ဒီ allow rule ကို active ဖြစ်မယ်လို့ သတ်မှတ်တာဖြစ်ပါတယ်။ အကယ်၍ firewall rule ကို remove ပြန်လုပ်ချင်ရင်တော့ "state=disabled" ဆိုပြီး သတ်မှတ်ပေးရမှာဖြစ်ပါတယ်။ Firewall rule သတ်မှတ် ပေးပြီးတဲ့နောက် "shell" module ကို အသုံးပြုပြီး "firewall-cmd --reload" command ဖြင့် allow rule effect ဖြစ်အောင် လုပ်မယ်။ ဒါဆိုရင်တော့ curl ဖြင့်  ခေါ်ကြည့်လျှင် remote server ရဲ့ website ကျလာပြီ ဖြစ်ပါတယ်။



Let's create users and groups with ansible ad-hoc


                နောက်ထပ်တစ်ခုအနေနဲ့ ansible ad-hoc command ဖြင့် users/groups တွေ create လုပ်ကြည့်မယ်။ အသုံးပြုမယ့် module တွေကတော့ "user" module နဲ့ "group" module ဖြစ်ပါတယ်။ အောက်ပုံမှာဆိုရင် group တစ်ခု အရင်ဖွဲ့တယ် ပြီးတော့ user account တစ်ခုဖွဲ့ပြီး အဲ့ဒီ user account ထဲကို groups တွေပါ ထပ်ပေါင်းထည့်ဖို့အတွက် "groups=[groupname]" and "append=yes" ဆိုပြီ သတ်မှတ်ရပါတယ်။ "append=yes" မသုံးရင် existing group ကို overwrite လုပ်သွားမှာ ဖြစ်ပါတယ်။



                
                ဒါကတော့ Ansible in the house episode-2 ဖြစ်ပါတယ်။ ဒီ Episode -2 မှာတော့ ansible ad-hoc commands ဖြင့် package installed, service start/stop, firewall rules တွေ users/groups creating တွေကို အသုံးပြုသွားပါတယ်။ 

That's it!
Thanks and Enjoy Reading!!! :) 
Follow and Like Root Of Info Page and Root Of Info Youtube Channel.


Share:

0 comments:

Post a Comment