Ansible 與 Vagrant 結合練習多環境狀況

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"
}

 

看更多