使用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.sudo
和 ansible.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