2016-06-15 61 views
0

我正在使用Ansible(本地)供应商进行我的Vagrant设置。是否有推荐的方式将环境变量传递给供应商?将环境变量传递给Vagrant供应商

例如,我想运行ENV=development vagrant up并让流浪汉将环境变量ENV传递给Ansible。

我试着用extra_vars,从Vagrant documentation采取:

Vagrant.configure(2) do |vagrant| 
    # other configuration 
    vagrant.vm.provision :ansible_local do |ansible| 
     ansible.playbook = "ansible/server.yml" 
     ansible.extra_vars = { 
      env: ENV.fetch("ENV", "development") 
      } 
    end 
end 

然而,当我运行vagrant provision(甚至没有使用Ansible的env变量),我得到如下:

$ vagrant provision 
==> default: Running provisioner: ansible_local... 
    default: Running ansible-playbook... 
ERROR: Expecting property name: line 1 column 2 (char 1) 
Ansible failed to complete successfully. Any error output should be 
visible above. Please fix these errors and try again. 

删除ansible.extra_vars修复此错误,但后来我无法完成我想要的。

+0

看起来它应该可以工作,但我想知道是否有一个名为'ENV'的环境变量与Ruby或其他地方的某些东西可怕地发生了冲突。如果你尝试使用'ENV.fetch(“foobar”,“development”)',然后用'export foobar =“notdevelopment”''尝试它,会发生什么? – ydaetskcoR

+0

@ydaetskcoR事情是,如果我只是做'env:“开发” - 这不会导致同样的错误 - 不知道为什么。 –

+0

啊,我们走了,这将是Ansible中的'env'变量名称冲突。尝试调用它别的 – ydaetskcoR

回答

0

这是什么要求设置环境变量?

如果可能,我会尝试使用不同的方法。如果您希望以合理的方式对环境变量采取行动,则可以在库存group_vars文件中设置该值,该值只对本地供应流浪者有效。其他环境可以通过更新相应的库存group_vars文件为同一变量使用不同的值。

+0

使用环境变量可以让我更改使用哪种环境的简单方式 - 当然,仍然可以使用基于文件的配置,但大多数其他生产系统(例如使用CI)将使用相同的环境变量用例。 –

+0

同意。正如你所说,许多技术可以通过环境变量进行定制。基于技术的基于文件的配置不是互相排斥的。如果你愿意的话,我可以举一个更具体的例子。 – tphummel

相关问题