起手式:用 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 的運作邏輯。

Complete and Continue  
Discussion

0 comments