DevOps課程-Configuration Management with Ansible 7

Introduction To Playbooks

ZONGRU Li
Mar 31, 2022

前面只是單純用"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檔:

從名稱droplet改為webserver

並在my-playbook.yaml撰寫安裝,執行nginxtasks

我自己找到的apt module相關doc:

有些類似的範例:

link

此時該專案目錄內也可以撰寫前面有提過的 →ansible.cfg

接著我透過FileZilla把這整個目錄搬上去主控機:

裝tree可以看到如圖

在主控機的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的安裝檔的版本號

link

其中就抓這個版號來用:

程式碼就調整為以下:

一樣FZ上傳到控制機(過程略)

#再次執行playbook指令:
ansible-playbook -i hosts my-playbook.yaml

那是因為之前latest的nginx版本就是我剛剛改的這個版本了

我們甚至可以將版號用成wildcard形式:

Ansible Idempotency(冪等性):

  • 如上面的圖,都是只有ok=3,沒有changed
  • 因為Ansible也會查看機台的current state
  • 所以也有desired statecurrent state的狀態比較
  • 如上nginx安裝的版本確認

Idempotency(冪等性)於此的意思:

  • 就是我如上目前的playbookCode內容執行N百次
  • 也會得到一樣結果!

用一樣的module執行nginx的解安裝:

將Code改為如下:

一樣傳上掌控機

#再次執行playbook指令:
ansible-playbook -i hosts my-playbook.yaml

如果又再一次執行:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet