使用Vagrant和Ansible

簡介

Vargrant是一個管理虛擬機器環境的工具,允許你在不同的虛擬化和雲平臺 配置和使用可再生的工作環境.它也集成了Ansible作為對虛擬機器的服務提供者,而且這兩個工具配合的很好.

這個指南會敘述如何同時配合使用Vagrant和Ansible.

如果你對Vagrant還不瞭解,你應該看看這個文件 the documentation.

假設你已經安裝了Ansible,在Git上檢測,執行的也很好,檢視下面的:doc:intro_installation 獲取更多的資訊.

配置Vagrant

第一步安裝了Vagrant之後,建立一個 Vagrantfile ,修改它來適應你的需要.Vagrant文件裡面已經包含了很多細節了,這裡僅僅給出一個快速的參考例項

$ mkdir vagrant-test
$ cd vagrant-test
$ vagrant init precise32 http://files.vagrantup.com/precise32.box

這會建立名稱為 Vagrantfile 的檔案,你可以編輯它適應你的需要.預設的Vagrantfile有很多註釋.這裡是一個簡化的例子包括了一個使用ansible提供服務的部分.

#Vagrant API/syntax 版本.不要修改它除非你知道你自己在做什麼.

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "precise32"
    config.vm.box_url = "http://files.vagrantup.com/precise32.box"

    config.vm.network :public_network

    config.vm.provision "ansible" do |ansible|
        ansible.playbook = "playbook.yml"
    end
end

Vagrantfile 有很多選項,但這些是最重要的.注意 config.vm.provision``部分,引用了叫做``playbook.yml 的 Ansible playbook,它與Vagrantfile的在同樣的目錄裡面.Vagrant 一旦虛擬機器啟動和已經準備好了ssh訪問的時候.執行這個提供的服務(prvisoner)

$ vagrant up

這將會啟動VM和執行提供的playbook檔案.

在你的Vagrantfile裡面,有許多Ansible選項可以配置.有用的選項有 ansible.extra_vars, ansible.sudoansible.sudo_user , 和可以避免SSH對新的虛擬機器的連線問題的 ansible.host_key_checking

檢視 Ansible Provisioner documentation 獲取更多資訊

重新執行一個在已存在的VM上的playbook,執行

$ vagrant provision

這將會重新執行playbook

手動執行Ansible

有時你想手動執行Ansible,而不是機器.這相對來說很簡單.

Vargrant自動的為Vagrant機器建立清單檔案,存在相同的目錄下面 .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.它根據Vagrant自動建立的SSH管道配置清單檔案,執行``ansible-playbook`` 使用正確的使用者名稱和SSH金鑰選項來訪問.一個典型的自動建立清單檔案的例子看起來就像下面這樣.

# Generated by Vagrant

machine ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

如果你想執行Ansible手動的,你會想確保是否傳遞給``ansible`` 或者 ansible-playbook 命令正確的參數,和自動生成了清單檔案.

這是一個例子

$ ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=.vagrant/machines/default/virtualbox/private_key -u vagrant playbook.yml

注意:Vagrant地域1.7.0的版本會使用私鑰位於``~/.vagrant.d/insecure_private_key.``

See also

Vagrant Home
The Vagrant homepage with downloads
Vagrant Documentation
Vagrant Documentation
Ansible Provisioner
The Vagrant documentation for the Ansible provisioner
Playbooks
An introduction to playbooks