Vagrant Ansible&;流浪者:使用相同的剧本在本地和生产环境中部署

Vagrant Ansible&;流浪者:使用相同的剧本在本地和生产环境中部署,vagrant,ansible,Vagrant,Ansible,我最近一直在做一个“流浪者+虚拟盒子+ansible”的食谱。我现在有一些问题,我想重用配方的代码,以便不仅能够提供本地,而且能够提供登台和生产环境。我的剧本是: - hosts: all sudo: true pre_tasks: roles: - common - webserver - database - php post_tasks: 还有我的流浪汉档案 # -*- mode: ruby -*- # vi: set ft=ruby :

我最近一直在做一个“流浪者+虚拟盒子+ansible”的食谱。我现在有一些问题,我想重用配方的代码,以便不仅能够提供本地,而且能够提供登台和生产环境。我的剧本是:

- hosts: all
  sudo: true
  pre_tasks:
  roles:
    - common
    - webserver
    - database
    - php
  post_tasks:
还有我的流浪汉档案

# -*- 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
(如果生产是ovh上具有远程ip的库存组)

它失败了,因为剧本需要

user:root
参数,但如果我将此参数放在playbook上,则在运行时失败

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

有什么想法吗

谢谢

看一下

尝试使用
-u root

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

您可以使用组变量自定义清单中每个主机的ssh用户:

在组\变量/本地:

ansible_ssh_user: vagrant
在组_vars/生产中:

ansible_ssh_user: root
还考虑使用独立的库存文件来进行流浪和生产。它不允许您同时在两个环境上运行东西,但这几乎不是常见的用例,而且更安全。

没有全部阅读(将阅读),但通常建议在开发环境中使用Vagrant。