将环境变量传递给Vagrant

时间:2016-06-15 17:52:53

标签: vagrant ansible

我正在使用Ansible(本地)配置器进行我的Vagrant设置。是否有推荐的方法将环境变量传递给配置程序?

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

我尝试使用extra_vars取自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

但是,当我运行env(甚至没有使用Ansible中的$ 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

删除double修复了此错误,但后来我无法实现我想要的目标。

3 个答案:

答案 0 :(得分:2)

要访问development环境变量,请使用:ENV['development']语法。

您还可以将其分配给文件开头的变量:

development = ENV['development']

并使用变量代替:

ansible.extra_vars = {
  env: development
}

以下面的Vagrantfile为例。

答案 1 :(得分:2)

您需要为Vagrant安装插件:

vagrant plugin install vagrant-env

我希望我的代码段对您有所帮助:

config.vm.define "k8s-master" do |master|
    master.vm.box = IMAGE_NAME
    master.env.enable # Enable vagrant-env(.env)
    master.vm.network "private_network", ip: "192.168.50.10"
    master.vm.hostname = "k8s-master"
    master.vm.provision "ansible" do |ansible|
        ansible.playbook = "./playbooks/master.yml"
        ansible.compatibility_mode = "2.0"
        ansible.extra_vars = {
            env: development,
        }
    end
end

只要您运行Vagrant命令,便会添加config.env.enable,它将.env加载到ENV中,从而可以进行自定义。 而且您可以在内部剧本中将其用作{{ variable_name }}

答案 2 :(得分:0)

需要设置环境变量的是什么?

如果可能,我会尽量使用不同的方法。如果您希望在ansible中对环境变量执行操作,则可以在库存group_vars文件中设置该值,该文件仅对本地配置流浪者有效。其他环境可以通过更新相应的库存group_vars文件为同一变量使用不同的值。