使用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