Chef infra 安装Java8

Chef infra 安装Java8,chef-infra,berkshelf,Chef Infra,Berkshelf,我的文件夹结构如下所示: │ Berksfile │ Berksfile.lock │ chefignore │ knife.rb │ living.pem │ metadata.rb ├───recipes │ default.rb │ elasticsearch.rb │ java.rb 每个配方.rb的内容如下: default.rb内容文件: include_recipe 'berk::java' include_recipe

我的文件夹结构如下所示:

│   Berksfile
│   Berksfile.lock
│   chefignore
│   knife.rb
│   living.pem
│   metadata.rb
├───recipes
│       default.rb
│       elasticsearch.rb
│       java.rb
每个
配方.rb的内容如下:

default.rb
内容文件:

include_recipe 'berk::java'
include_recipe 'berk::elasticsearch'
include_recipe 'java'
include_recipe 'elasticsearch'

elasticsearch_user 'elasticsearch' do
  username 'elasticsearch'
  groupname 'elasticsearch'
  shell '/bin/bash'
  comment 'Elasticsearch User'

  action :create
end

elasticsearch_install 'my_es_installation' do
  type 'package' # type of install
  version '5.2.0'
  action :install # could be :remove as well
end

...
java.rb
内容文件:

include_recipe 'berk::java'
include_recipe 'berk::elasticsearch'
include_recipe 'java'
include_recipe 'elasticsearch'

elasticsearch_user 'elasticsearch' do
  username 'elasticsearch'
  groupname 'elasticsearch'
  shell '/bin/bash'
  comment 'Elasticsearch User'

  action :create
end

elasticsearch_install 'my_es_installation' do
  type 'package' # type of install
  version '5.2.0'
  action :install # could be :remove as well
end

...
elasticsearch.rb
内容文件:

include_recipe 'berk::java'
include_recipe 'berk::elasticsearch'
include_recipe 'java'
include_recipe 'elasticsearch'

elasticsearch_user 'elasticsearch' do
  username 'elasticsearch'
  groupname 'elasticsearch'
  shell '/bin/bash'
  comment 'Elasticsearch User'

  action :create
end

elasticsearch_install 'my_es_installation' do
  type 'package' # type of install
  version '5.2.0'
  action :install # could be :remove as well
end

...
为了使用oracle的Java8,我想更改java设置。我知道这似乎是一个非常直截了当的问题,然而,我一直坚持这个问题

我试图在
java.rb
中添加这些行:

node.default['java']['install_flavor'] = 'oracle'
node.default['java']['jdk_version'] = '8'
node.default['java']['oracle']['accept_oracle_download_terms'] = true
我也试过:

node.override['java']['install_flavor'] = 'oracle'
node.override['java']['jdk_version'] = '8'
node.override['java']['oracle']['accept_oracle_download_terms'] = true
尽管如此,还是安装了Java 6:

==> default:   * log[jdk-version-changed] action nothing (skipped due to action :nothing)
==> default: Recipe: java::openjdk
==> default:   * yum_package[java-1.6.0-openjdk] action install
==> default: [2017-02-21T15:10:33+00:00] INFO: yum_package[java-1.6.0-openjdk] installing java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el7_3 from updates repository
有什么想法吗


谢谢。

不要覆盖配方中的属性(在特定情况下),使用
属性/default.rb
文件在默认级别定义这些属性就足够了,一切都会正常

您可能在包含java recipe后重写了属性,因此您的问题是,在编译任何配方之前都会读取属性文件,如果java.rb文件看起来像:

include_recipe 'java'

node.default['java']['install_flavor'] = 'oracle'
node.default['java']['jdk_version'] = '8'
node.default['java']['oracle']['accept_oracle_download_terms'] = true
java配方的资源将在属性更新之前编译

因此,创建一个
attributes
目录和一个文件
default.rb

default['java']['install_flavor'] = 'oracle'
default['java']['jdk_version'] = '8'
default['java']['oracle']['accept_oracle_download_terms'] = true
您已经安装了Java8

attributes目录中的文件以字母数字顺序加载(如果两个文件为同一属性设置了不同的值,则很重要),您可以随意命名它们,如果您还希望分离每个配方的属性,可以使用
java.rb
elasticsearch.rb