Ansible& Vagrant:使用相同的剧本在本地和制作中部署

时间:2014-12-16 10:42:35

标签: vagrant ansible

我最近一直在为vagrant + virtualbox + ansible工作。我现在有一些问题我想重用配方代码,不仅可以配置本地,还可以配置登台和生产环境。我的剧本是:

- hosts: all
  sudo: true
  pre_tasks:
  roles:
    - common
    - webserver
    - database
    - php
  post_tasks:

和我的Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/precise64"
  config.vm.network "private_network", ip: "10.10.10.101"
  config.vm.synced_folder ".", "/vagrant", type: "nfs"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.customize ["modifyvm", :id, "--memory", "512"]
    vb.name = "testing"
  end

  config.vm.provision :ansible do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.limit    = "local"
        ansible.inventory_path = "./inventory"
  end
end

那会发生什么?如果我跑

$ vagrant up

一切正常但如果我跑

$ ansible-playbook -i inventory playbook.yml --limit production

(生产是库存中具有远程ip on ovh的组)

它失败了,因为剧本需要

user:root

参数,但如果我将此参数放在playbook上,那么当我运行

时它会失败
$ vagrant provision

我知道为本地和远程制作一些yml会完成这个问题,但我更喜欢更优雅的解决方案。

有什么想法吗?

感谢

2 个答案:

答案 0 :(得分:2)

您可以使用group vars自定义清单中每个主机的ssh用户:

in group_vars / local:

ansible_ssh_user: vagrant

in group_vars / production:

ansible_ssh_user: root

还考虑使用单独的库存文件进行流浪和生产。它不允许你同时在两个环境中运行东西,但这不是一个常见的用例,而且它更安全。

答案 1 :(得分:0)

查看offical document: Using Vagrant and Ansible

尝试使用-u root

$ ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml