昨天我們看了 Ansible 的 Ad-Hoc 模式,我們今天要來介紹 Playbook
所謂的 Ansible Playbook,是可以把數個步驟集合在一起,在部署時只需要一行指令,便會讀取設定檔裡所包含的指令,然後去執行的工具
而 Playbook 裡有個概念是 role,我們可以在 role 裡設定不同的步驟,讓 Ansible Playbook 在執行時讀取這些步驟,然後對我們的主機進行不同的操作
我們在這裡示範個簡單的 Playbook 範例,我們想要對一臺 Ubuntu 機器進行系統更新,然後安裝 nginx
我們先看資料夾架構
ansible-proxmox/ $ tree
.
├── ansible.cfg
├── inventory
├── roles
│ ├── apt_upgrade
│ │ └── tasks
│ │ └── main.yml
│ └── install_nginx
│ └── tasks
│ └── main.yml
└── webserver.yml
5 directories, 5 files
接下來看檔案內容
webserver.yml
---
- hosts: webservers
roles:
- apt_upgrade
- install_nginx
roles/apt_upgrade/tasks/main.yml
---
- name: Perform 'apt update' on target
apt:
update_cache: yes
tags:
- apt
- name: Perform 'apt upgrade' on target
apt:
package: '*'
state: latest
tags:
- apt
roles/install_nginx/tasks/main.yml
---
- name: Install nginx
apt:
package: nginx
state: present
tags:
- install_nginx
ansible.cfg
[defaults]
host_key_checking = False
我們可以看到,我們在 webserver.yml
裡定義了我們要對哪些機器進行操作,以及那些機器該具有哪些 role
我們在這裡建立了兩個 role,而 role 需要被放在 roles
的資料夾內,資料夾的名稱就是 role 的名稱
接著,每個 role 裡面可以設定多個 task,而由於我們要執行的步驟較簡易,所以我們只有 main.yml
我們在每個 role 裡記錄了我們要執行哪些步驟,在這裡使用到了 apt
模組
而我們最終執行的指令是 ansible-playbook -i inventory webserver.yml
執行結果大概如下
可以在裡面看到每個步驟執行的記錄,如果有數台主機的話,每臺主機的狀況都會跟著回報
就這樣,我們可以把很多步驟寫在一起,每次要執行的時候都只要一個步驟就能完成機器環境快速設定了
咦? 你說上面還有 ansible.cfg
沒說明?
ansible.cfg
是 Ansible 的設定檔案,每次在執行 Ansible 的時候都會讀取,而我們在裡面設定的 host_key_checking = False
是什麼呢?
還記得這個提示訊息嗎?
遇到這樣的訊息,每次都得輸入 yes
挺麻煩的對吧? 加入上面那個設定以後, Ansible 在連線時都不會確認要連上的系統的 SSH key,而直接信任對方的 key
雖然這樣很方便,但這同時也提高了安全風險,若系統的 key 被惡意篡改的話,這樣會沒辦法發現
這個選項只建議在個人測試環境啟動,在大型環境、上線環境中則不建議使用
明天我們會看 Ansible 要怎麽和 Terraform 一起使用