如何在Vagrant文件中使用chef.json访问node.override? p>
例如,使用vagrant-berkshelf
,我正在尝试根据Vagrantfile
中的自定义JSON数据安装特定的Maven版本:
chef.json = {
'maven' => {
'version' => '3.0.5'
}
}
食谱\ maven_custom \属性\ default.rb
default['maven']['version'] = "3.2.1"
食谱\ maven_custom \食谱\ 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
JSON值为“3.0.5”?
答案 0 :(得分:1)
不完全清楚问题是什么,但我会假设您正在尝试编写一个包装器,以安装更现代版本的Maven。
诀窍是在包装器食谱中设置“普通”属性,该属性将覆盖maven cookbook的“默认”属性。有关厨师attribute precedence
的详细信息,请参阅这比提供运行时参数更好,原因如下:
希望这有帮助。
├── attributes
│ └── maven.rb
├── Berksfile
├── Berksfile.lock
├── metadata.rb
├── recipes
│ └── default.rb
└── Vagrantfile
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"
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'
#
# Cookbook Name:: maven_custom
# Recipe:: default
#
include_recipe "apt"
include_recipe "maven"