3

如何在 Vagrant 文件中使用 chef.json 访问 node.override?

例如,使用vagrant-berkshelf,我正在尝试安装基于自定义 JSON 数据的特定 Maven 版本Vagrantfile

  chef.json = {
  'maven' => {
    'version' => '3.0.5'    
    }
  }

食谱\maven_custom\attributes\default.rb

default['maven']['version'] = "3.2.1" 

食谱\maven_custom\recipes\default.rb

Chef::Log.info(node['maven']['version'])

当我运行vagrant provision时,会打印出以下内容:

3.2.1

此外,我试过vagrant reload --provision了,但仍然看到“3.2.1”打印出来。

我已经预料到3.0.5了,因为我(我认为)在我的Vagrantfile.

如何正确提取Vagrantfile's“3.0.5”的 JSON 值?

4

1 回答 1

1

不完全清楚问题是什么,但我假设您正在尝试编写一个安装更现代版本的 Maven 的包装食谱。

诀窍是在包装食谱中设置“正常”属性,这将覆盖 Maven 食谱的“默认”属性。有关更多详细信息,请阅读厨师的属性优先级

这比提供运行时参数要好,原因如下:

  1. 您正在编写包装食谱,因此属性文件将是设置值的自然位置
  2. “maven”说明书需要设置4 个属性来指定新的 Maven 版本。

希望这可以帮助。

例子

├── attributes
│   └── maven.rb
├── Berksfile
├── Berksfile.lock
├── metadata.rb
├── recipes
│   └── default.rb
└── Vagrantfile

元数据.rb

name             'maven_custom'
maintainer       'YOUR_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures maven_custom'
long_description 'Installs/Configures maven_custom'
version          '0.1.0'

depends "apt"
depends "maven"

属性/maven.rb

normal['maven']['version'] = 3
normal['maven']['3']['version'] = '3.2.1'
normal['maven']['3']['url'] = 'http://www.eu.apache.org/dist/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz'
normal['maven']['3']['checksum'] = 'cdee2fd50b2b4e34e2d67d01ab2018b051542ee759c07354dd7aed6f4f71675c'

食谱/default.rb

#
# Cookbook Name:: maven_custom
# Recipe:: default
#
include_recipe "apt"
include_recipe "maven"
于 2014-04-21T23:21:13.090 回答