DevOps課程-Configuration Management with Ansible 7
前面只是單純用"ping"這項任務作業
但是我們實際應該是要拿來做機台的一些設置(Configuration)
將Ansible發揮其"InfraStructure as Code"工具的能力
理所當然地將Ansible作為:
- Ansible設置檔案當作一般程式碼
- 建置Ansible程式專案並撰寫程式碼
- 保存整個專案於SCM如Git
因為我是遠端Ansible機
所以可能寫完一定程度才會用FileZilla從遠端拉下來推到Github
先建立專案目錄:
然後再該專案目錄裡面建置第一個檔 →hosts
把前面專案寫的hosts內容填進去:
不過這邊就先把後來建的最後一台Droplet移除,DigitalOcean那邊也做移除
接著同樣於ansible專案目錄內建立playbook →my-playbook.yaml
(後面可能用VScode打一打在貼到機台上)
- 而playbook可以有多個plays
- play代表著一組(多個)的任務
這邊先修改一下裡面的hosts檔:
並在my-playbook.yaml撰寫安裝,執行nginx的tasks
我自己找到的apt module相關doc:
有些類似的範例:
此時該專案目錄內也可以撰寫前面有提過的 →ansible.cfg檔
接著我透過FileZilla把這整個目錄搬上去主控機:
在主控機的ansible那層可以執行playbook指令
#執行playbook操控指令:
ansible-playbook -i {一樣指定的hosts} {寫好的playbook檔}
#也就是如下:
ansible-playbook -i hosts my-playbook.yaml
然後會看到"三個"PLAY:
接著理當可以ssh到其中一台確認是否真的安裝了nginx了:
#執行指令確認機台nginx運行狀況及版本:
ssh root@{其中一台IP}
ps aux|grep nginx
安裝指定的nginx版本:
可以透過playbook方式指定要安裝的nginx版本
這邊要先查看到Ubuntu的安裝檔的版本號
其中就抓這個版號來用:
程式碼就調整為以下:
一樣FZ上傳到控制機(過程略)
#再次執行playbook指令:
ansible-playbook -i hosts my-playbook.yaml
那是因為之前latest的nginx版本就是我剛剛改的這個版本了
我們甚至可以將版號用成wildcard形式:
Ansible Idempotency(冪等性):
- 如上面的圖,都是只有ok=3,沒有changed
- 因為Ansible也會查看機台的current state
- 所以也有desired state與current state的狀態比較
- 如上nginx安裝的版本確認
Idempotency(冪等性)於此的意思:
- 就是我如上目前的playbook的Code內容執行N百次
- 也會得到一樣結果!
用一樣的module執行nginx的解安裝:
將Code改為如下:
一樣傳上掌控機
#再次執行playbook指令:
ansible-playbook -i hosts my-playbook.yaml
如果又再一次執行: