Vagrant https://www.vagrantup.com/
是一個輕量化簡單建置與管理VM的工具
不同於VirtualBox,Vagrant沒有圖形介面
一切都是文字(console)
這也剛好可以用它來開多個不同vm
來模擬多個環境下的Ansible play script
為什麼不用docker呢?
docker 跟實體的VM其實還有一段小小的差距
像是我的playbook第一步驟是設定時區
結果docker下的centos不能設定時區
雖然可以跳過這一步驟
但這就失去了測試的意義
所以最後決定還是回到VM的懷抱
首先可以到 vagrant cloud搜尋想安裝的VM
這裡以CentOS/7為例
首先建立一個資料夾放 vagrant file
然後用網站上的 init 指令初始化
最後下 up 啟動VM
mkdir centos7
cd centos7
vagrant init centos/7
vagrant up
如果你有多個VM
勢必要修改每個VM ssh 連線時的port
在init完成之後資料夾底下會多一個Vagrantfile
用編輯器打開它
並加入
config.vm.network :forward_port, ghost:22, host: 2223, id: "ssh", auto_correct:true
在 host: 後面的數字就是要對應的port
修改之後用 vagrant reload即可
設定好之後查看ssh設定
vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2223
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/herb/Desktop/Projects/vagrant/ansible_practice/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
重要的幾個參數是
HostName
User
Port
IdentityFile
這時候就可以在 Ansible 的 Inventory file裡這樣設定
[web-server]
127.0.0.1 ansible_port=2223 ansible_user=vagrant ansible_ssh_private_key_file=/Users/herb/Desktop/Projects/vagrant/ansible_practice/.vagrant/machines/default/virtualbox/private_key
ansbile_port 對應到 Port
ansible_user 對應到 User
ansible_ssh_private_key_file 對應到 IdentityFile
最後再測試一下看成不成功
ansible all -i hosts -m ping
有回應 pong 的話就是了
127.0.0.1 ' SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}