Vagrantfile可以使用.kitchen.yml中设置的属性吗?

时间:2016-06-24 09:59:18

标签: vagrant chef vagrantfile test-kitchen

我正在用厨房来测试我的厨师食谱。 在.kitchen.yml我用

driver:
  name: vagrant
  vagrantfile_erb: Vagrantfile.rb

然后在套房属性中我有

attributes: {
  "myattribute" : true,
 ...

我可以在Vagrantfile.rb中使用此属性值吗? 我需要使用Kitchen和Vagrant直接运行Vagrantfile,所以我需要一种方法来区分这两种方法。我想像这样在厨房中设置一个布尔属性,但它不起作用

Vagrant.configure('2') do |config|
  myattribute = "<%= node['myattribute'] %>
  ...
end

我收到了消息

Message: Failed to complete #create action: [undefined local variable or method `node' for #<Kitchen::Driver::Vagrant:0x007febf431d138>]

当然一个简单的解决方案是创建2个不同的vagrantfile,我只是想避免那个

2 个答案:

答案 0 :(得分:0)

根据according README section of kitchen-vagrant,您应该能够通过以下方式访问属性:

instance.provisioner[:attributes]

所以我希望您可以使用

访问myattribute
Vagrant.configure('2') do |config|
  myattribute = instance.provisioner[:attributes][:myattribute]
  ...
end

但是,在新问题中解释整体计划可能会为您的实际问题提供更好的解决方案。

答案 1 :(得分:-1)

我尚未与chef合作。但是,您可以在.yml

中加载Vagrantfile这样的内容
require 'yaml'
set = YAML.load_file(ENV['DEVOPS_HOME'] + '/vagrant/server/settings.yml')

然后你可以加载变量:

  ..
  vagrant.vm.define "dev.database", autostart: false do |dev|
    database = set['dev']['server']['database']
    vm = set['dev']['vm']
    dev.vm.box = vm['box']
    ..