使用Vagrant和Ansible ========================= .. _vagrant_intro: 简介 ```````````` Vargrant是一个管理虚拟机环境的工具,允许你在不同的虚拟化和云平台 配置和使用可再生的工作环境.它也集成了Ansible作为对虚拟机的服务提供者,而且这两个工具配合的很好. 这个指南会叙述如何同时配合使用Vagrant和Ansible. 如果你对Vagrant还不了解,你应该看看这个文档 `the documentation `_. 假设你已经安装了Ansible,在Git上检测,运行的也很好,查看下面的:doc:`intro_installation` 获取更多的信息. .. _vagrant_setup: 配置Vagrant ```````````````` 第一步安装了Vagrant之后,创建一个 ``Vagrantfile`` ,修改它来适应你的需要.Vagrant文档里面已经包含了很多细节了,这里仅仅给出一个快速的参考实例 .. code-block:: bash $ mkdir vagrant-test $ cd vagrant-test $ vagrant init precise32 http://files.vagrantup.com/precise32.box 这会创建名称为 Vagrantfile 的文件,你可以编辑它适应你的需要.默认的Vagrantfile有很多注释.这里是一个简化的例子包括了一个使用ansible提供服务的部分. .. code-block:: ruby #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) .. code-block:: bash $ vagrant up 这将会启动VM和运行提供的playbook文件. 在你的Vagrantfile里面,有许多Ansible选项可以配置.有用的选项有 ``ansible.extra_vars``, ``ansible.sudo`` 和 ``ansible.sudo_user`` , 和可以避免SSH对新的虚拟机的连接问题的 ``ansible.host_key_checking`` 查看 `Ansible Provisioner documentation `_ 获取更多信息 重新运行一个在已存在的VM上的playbook,运行 .. code-block:: bash $ vagrant provision 这将会重新运行playbook .. _running_ansible: 手动运行Ansible ```````````````````````` 有时你想手动运行Ansible,而不是机器.这相对来说很简单. Vargrant自动的为Vagrant机器创建清单文件,存在相同的目录下面 ``.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory``.它根据Vagrant自动创建的SSH管道配置清单文件,执行``ansible-playbook`` 使用正确的用户名和SSH密钥选项来访问.一个典型的自动创建清单文件的例子看起来就像下面这样. .. code-block:: none # Generated by Vagrant machine ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 如果你想运行Ansible手动的,你会想确保是否传递给``ansible`` 或者 ``ansible-playbook`` 命令正确的参数,和自动生成了清单文件. 这是一个例子 .. code-block:: bash $ 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.`` .. seealso:: `Vagrant Home `_ The Vagrant homepage with downloads `Vagrant Documentation `_ Vagrant Documentation `Ansible Provisioner `_ The Vagrant documentation for the Ansible provisioner :doc:`playbooks` An introduction to playbooks