撰寫第一個 Ansible Playbook
什麼是 Ansible Playbook?
我的第一個 playbook
以下先用一個非常簡單的範例來介紹 playbook 的運作方式。我們先創建一個 playbook 檔案,將其命名為 並置於工作目錄下 (e.g. workspace/playbook.yml
)。接著,開啟檔案並輸入以下內容:
相信大家就算從來沒有寫過 Ansible 的 playbook,應該還是不難猜出這份 playbook 在做些什麼。簡單來說,我們在這份 playbook 中定義了任務清單 tasks
以及部署對象 hosts: server
。這也是為什麼在之前的章節中我們提到了最好把每一個虛擬主機都做命名。主機命名後,我們可以直接透過主機的名稱直接進行操作(我們會在接下來的章節中提到若不透過 Vagrant 要如何命名主機)。除此之外,我們可以透過 這個標籤替任務清單中的每個 task 分別命名。在接下來運行 playbook 的過程中若發生錯誤,我們也會比較清楚是在哪一個環節上出了問題。
在這個 playbook 中,我們定義了兩個 task:
print debug message
在上一個 task 中,我們已經把 ping 後的結果存在
{{ message }}
這個變數中了。我們可以利用 這個模組把儲存的訊息輸出到我們的終端機上。周圍的兩個大括號是 Ansible 基於 Jinja2 系統下使用變數的方式。若變數是在描敘句的開頭,則還需要再。
在定義好了我們的第一個 playbook 後,接下來就是如何運行我們寫好的 playbook 啦!
[Optional] 利用 Ansible-lint 來檢查 playbook
如果沒有看到任何輸出就表示你的 playbook 完全沒有問題!不過為了展示 Ansible-lint 的提示效果,我在 playbook 的第五行句尾加上一個空白:
接著,重新輸入剛剛的指令:
我們可以清楚地看到 Ansible-lint 告訴我們在 playbook.yml:5
第五行的地方有個後綴空白 (trailing whitespace),為了保持程式碼的簡潔,我們可以將其刪除。
[Optional] Sublime 插件 - Syntax highlighting for Ansible files
如果讀者使用的編輯器是 Sublime Text,在這裡推薦一個不錯的語法高亮器 (Syntax Highlighting) 給大家。因為在 Sublime 中,語法高亮並沒有原生支援 Ansible 的語法,所以我們只能預設使用 YAML 來加亮語法。 這套插件補強了 Ansible 在 Sublime 上的顯示效果,非常推薦使用 Sublime 的讀者安裝這套插件。
[Optional] Atom 插件 - language-ansible + linter-ansible-linting
與上述 Sublime 插件相當類似,若讀者使用 Atom 作為開發編輯器,也可以考慮安裝 language-ansible
與 linter-ansible-linting
來作為語法高亮以及即時 linter 作為輔助。除此之外,Atom 上還提供了相當多強大的插件例如 等等,讀者可以根據需求自行安裝。