第 1 章:開始撰寫 Playbook
第一個 playbook 範例
先創建一個 playbook 檔案,將其命名為 playbook.yml
並置於工作目錄下 (e.g. workspace/playbook.yml
)
playbook.yml
---
- hosts: server
tasks:
# task 1
- name: test connection
ping:
register: message
# task 2
- name: print debug message
debug:
msg: "{{ message }}"
在這份 playbook 中定義了任務清單 tasks
以及部署對象 hosts: server
。這也是為什麼在之前的章節中我們提到了最好把每一個虛擬主機都做命名。
主機命名後,我們可以直接透過主機的名稱直接進行操作。可以透過 name
這個標籤替任務清單中的每個 task 分別命名。在接下來運行 playbook 的過程中若發生錯誤,我們也會比較清楚是在哪一個環節上出了問題。
定義了兩個 task:
- test connection
呼叫了 Ansible 內建測試模組 (module) - ping。是用來測試 control machine 是否可以正確地與 managed node 進行溝通,如果連線正常,遙控節點就會回傳一個 pong
的訊息給控制主機。
接著透過 Ansible 內建模組 register 把 managed node 回傳訊息儲存在 message
這個變數中
注意:此處的 ping 並非建立在 ICMP 協定下的 ping 指令,只是純 Ansible 開發的一個簡單測試模組
- print debug message
利用 debug 這個模組把儲存的訊息輸出到我們的終端機上。周圍的兩個大括號是 Ansible 基於 Jinja2 系統下使用變數的方式。若變數是在描敘句的開頭,則還需要再加上兩個引號 (quote)。
[ Optional ] 利用 Ansible-lint 來檢查 playbook
只要在終端機中利用 ansible-lint
輸入需要檢查的檔案 (e.g. playbook.yml
) 即可:
ansible-lint playbook.yml
如果沒有看到任何輸出就表示你的 playbook 完全沒有問題,假設在程式碼其中一行存有空白
- name: test connection
~
接著,重新輸入剛剛的指令:
ansible-lint playbook.yml
[ANSIBLE0002] Trailing whitespace
playbook.yml:5
- name: test connection
可以清楚地看到 Ansible-lint 告訴我們在 playbook.yml:5
第五行的地方有個後綴空白 (trailing whitespace),為了保持程式碼的簡潔,我們可以將其刪除
[ Optional ] Sublime 插件 - Syntax highlighting for Ansible files
如果使用的編輯器是 Sublime Text,推薦一個不錯的語法高亮器 (Syntax Highlighting) 。因為在 Sublime 中,語法高亮並沒有原生支援 Ansible 的語法,所以我們只能預設使用 YAML 來加亮語法。Syntax highlighting for Ansible files 這套插件補強了 Ansible 在 Sublime 上的顯示效果,非常推薦使用 Sublime 的讀者安裝這套插件
[ Optional ] Atom 插件 - language-ansible + linter-ansible-linting
若使用 Atom 作為開發編輯器,也可以考慮安裝 language-ansible
與 linter-ansible-linting
來作為語法高亮以及即時 linter 作為輔助。除此之外,Atom 上還提供了相當多強大的插件例如 autocomplete-ansible