起手式:用 Ansible 設定虛擬機組態 (15:54)
任何主機(不管是實體機、本地虛擬機、雲端主機),只要有提供 SSH 登入的途徑,也有預載 Python 2.x 版,就能被視為 managed node,就能被 Ansible 系統管理。
這一課,我們先以本機端的虛擬機為例,示範如何用 Ansible 來設定它的組態。了解 Ansible 的 control machine 及 managed node 的運作邏輯之後,下一課再將經驗套用到雲端主機身上。
這一課會以 Vagrant + VirtualBox 作為虛擬機的實習環境。如果你還不熟悉 Vagrant,請先看看姐妹課程《研發者的虛擬機寶盒》,頭幾篇單元可以免費預覽,不到兩個小時,就能學會必要的部份。
「Ansible → Vagrant」操作動線
以 Ansible 角度來說,要對任何主機(不管是實體機、本地虛擬機、雲端主機)做組態設定,要先備妥兩項資訊:
- inventory:主機列表、主機清冊。
- playbook:劇本。
此例中,為了要告訴 Ansible 說,有哪些 Vagrant 虛擬機要被它處理,我們先用以下指令,查詢 Vagrant 虛擬機的登入資訊:
vagrant ssh-config
一旦知道了這台機器的登入資訊(位址、ssh port、登入帳號及 private key 等),就可以將這些資訊寫進一個 inventory 檔案:
127.0.0.1 ansible_port=2222 ansible_user=vagrant
有了 inventory 檔案,就可以叫 Ansible 將劇本套用在虛擬機身上:
ansible-playbook \ --inventory-file=inventory \ --private-key=.vagrant/machines/default/virtualbox/private_key \ playbook.yml
如果操控對象是本地端的虛擬機,為了方便起見,我們可設定 ANSIBLE_HOST_KEY_CHECKING
環境變數,叫 Ansible 暫時忽略 host key checking 步驟:
ANSIBLE_HOST_KEY_CHECKING=false \ ansible-playbook \ --inventory-file=inventory \ --private-key=.vagrant/machines/default/virtualbox/private_key \ playbook.yml
以上示範的是最正統的「Ansible → Vagrant」操作動線。
以 Vagrant 為中心的操作動線
Vagrant 提供另一種包裝,讓我們不必切換到「Ansible → Vagrant」的操作動線,直接以 Vagrant 指令來驅動 Ansible,達到一樣的效果。
從現實層面考量,透過 Vagrant 的 provisioning 功能來驅動 Ansible,可以省下許多瑣事:① 手工填寫 inventory 檔案,② 在 ansible-playbook
命令列後面加一堆參數,③ 暫時關閉 host key checking。這些瑣事,Vagrant 都幫你處理掉了。
使用方法很簡單,只要在 Vagrantfile
裡面的 provision
區塊,指定想要載入的 Ansible 劇本檔:
config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" #ansible.sudo = true #ansible.verbose = "vvv" end
其他更多 Ansible provisioning 的細節,請見 Vagrant 官方文件。
實作範例
以下是教學影片中所用的檔案,包括:
- 虛擬機定義檔 Vagrantfile
- Ansible 運作要素之一/inventory - 主機列表、主機清冊。
- Ansible 運作要素之二/playbook - 劇本檔。
請照著影片所述步驟,反覆練習,以確定你完全理解 Ansible 的運作邏輯。
0 comments