Vagrant-env 插件抛出错误 - 行"VAR_NAME=var_value"与格式不匹配



我在Ubuntu上安装了带有Vagrant 1.7 的ruby 2.1.5

我跑了:

~$ vagrant plugin install vagrant-env

如gosuri/流浪者env中所述。

我还应该提到,现在只有当我添加时,这才有效

require 'dotenv'
Dotenv.load

文档(README)没有指定将其实现到Vagrantfile中。如果我忽略了这一点,那么我会得到一个错误,说这行带有:

config.env.enable

是未知的配置节。

我的.env文件与Vagrantfile位于同一目录中。无论我在文件中有什么,它都会在第一行出错。我可以把它留空或做一个评论,它仍然会说第一行的格式不正确。

我想使用它,因为这是我能找到的唯一解决方案,它将允许我将ENV变量传递到Vagrant文件以及清单文件Puppet。

这是我的流浪文件的一个片段

# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'dotenv'
Dotenv.load
Vagrant.configure("2") do |config|
  config.env.enable
  #config.dotenv.enabled = true
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", "#{ENV['MEMORY_ALLOCATION']}"]
  end
  config.vm.network "public_network", ip: ENV['PUBLIC_IP']
end
Vagrant::Config.run do |config|
  ...
  config.vm.define "devboxserver" do |app|
    ...
    app.vm.provision :puppet do |puppet|
      puppet.facter = {
        "env" => ENV
      }
      puppet.module_path = "puppet/modules"
      puppet.manifests_path = "puppet/manifests"
      puppet.manifest_file = "site.pp"
      puppet.options="--verbose --debug"
    end
  end
end

正如你所看到的,我也尝试了流浪的dotenv(你看到它被注释掉了),但这也给我带来了问题,因为它甚至在加载Vagrantfile之前就试图调用配置变量。但我想这是另一个问题。我不得不把那颗宝石从流浪汉目录中删除。

但回到流浪者的env问题,我写了我的.env文件,就像我可以从github插件网站和引用的文章中看到的一样

USER_NAME=jason
PUBLIC_IP=192.168.1.00
MEMORY_ALLOCATION=1024
GITREPO_ACCOUNT_URL=https://github.com/me
GITREPO_URL=https://github.com/me/my_app
POSTGRES_PASSWORD=secret-pass
DEV_DB_NAME=my_app_development
PROD_DB_NAME=my_app_production
TEST_DB_NAME=my_app_test

我得到的错误是:

jason@host:~/folder/vagrant$ vagrant up
There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience:
Line "USER_NAME=jason" doesn't match format

由于目标是在我流浪的执行过程中创建环境变量,并与Puppet共享,我做了任何理智的程序员(或程序员)都会做的事情。我通过抓取.env变量并将其转换为哈希创建了自己的简单破解。

我把这个破解添加到我的流浪者文件的顶部:

# -*- mode: ruby -*-
# vi: set ft=ruby :
env = {}
File.read(".env").split("n").each do |ef|
  env[ef.split("=")[0]] = ef.split("=")[1]
end
Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, "--memory", env['MEMORY_ALLOCATION']]
  end
  config.vm.network "public_network", ip: env['PUBLIC_IP']
end
...

然而,由于Puppet文件并不是真正的ruby文件,使用Puppet.facter抓取并将"env"变量($env)设置为哈希是不起作用的,因为我们谈论的是两种不同的语言结构。

相反,我只是扩展了puppet.facter列表,现在我为所有.env变量设置了一个puppet.acter变量集,而不是一个$env散列。

...
app.vm.provision :puppet do |puppet|
  puppet.facter = {
    "fqdn"                => "#{env['BOX_NAME']}.local",
    "user_name"           => env['USER_NAME'],
    "box_name"            => env['BOX_NAME'],
    "gitrepo_account_url" => env['GITREPO_ACCOUNT_URL'],
    "gitrepo_url"         => env['GITREPO_URL'],
    "postgres_password"   => env['POSTGRES_PASSWORD'],
    "dev_db_name"         => env['DEV_DB_NAME'],
    "prod_db_name"        => env['PROD_DB_NAME'],
    "test_db_name"        => env['TEST_DB_NAME'],
    "my_email"            => env['MY_EMAIL']
  }
  puppet.module_path = "puppet/modules"
  puppet.manifests_path = "puppet/manifests"
  puppet.manifest_file = "site.pp"
  puppet.options="--verbose --debug"
end
...

在我的木偶脚本中,我只是像正常情况一样调用变量。例如:$user_name、$dev_db_name等

然后我删除了流浪env,因为它不再需要了。

相关内容

  • 没有找到相关文章

最新更新