可以使用java cookbook来安装oracle java的本地副本吗?

我最近一直在努力学习厨师,因为我计划用它来部署服务器配置和服务器应用软件。 我在理解如何使用其他人的食谱时遇到了问题。 例如,我想部署JDK8u31。 我无法弄清楚如何实现这本食谱。 https://supermarket.chef.io/cookbooks/java

我阅读说明书,并看到以下内容

只需在您希望安装Java的地方包含java配方,例如运行列表(recipe [java])或cookbook(include_recipe’java’)

我尝试过了

include_recipe 'java' 

在我的食谱里面叫common_java_server

然后

 directory '/usr/lib/jvm/' do owner 'root' group 'root' mode '0644' end java_ark "jdk" do url 'http://download.oracle.com/otn-pub/java/jdk/8u31/jdk-8u31-linux-x64.bin' checksum 'a8603fa62045ce2164b26f7c04859cd548ffe0e33bfc979d9fa73df42e3b3365' app_home '/usr/lib/jvm/' bin_cmds ["java", "javac"] action :install end # set alternatives for java and javac commands java_alternatives "set java alternatives" do java_location '/usr/local/java' bin_cmds ["java", "javac"] action :set end 

这是我得到的错误

 Recipe Compile Error in /etc/chef/src/cookbooks/common/recipes/java_dev_server.rb ==== 

java cookbook旨在支持不同Java变体的安装。 它的行为由节点属性控制。 默认值在cookbook中 ,将安装OpenJDK。

因此,要安装oracle JDK,您需要指定替代覆盖,这些将在README中讨论

你怎么做到这一点? 在厨师中,您至少有两种选择:

  1. 包装食谱
  2. 角色

有关包装食谱的示例,我建议您回答我的另一个问题。

  • 如何使用execute更新java的替代品?

有关示例角色,请尝试以下操作

 { "name": "java", "description": "Oracle java role", "override_attributes": { "java": { "jdk_version": 8, "install_flavor": "oracle", "oracle": { "accept_oracle_download_terms": true } } }, "run_list": [ "recipe[apt]", "recipe[java]" ] } 

将此角色添加到节点的运行列表中,将安装OracleJDK。


Test Kitchen项目,用于测试OracleJDK的安装

以下是测试厨房示例,它将安装和测试针对ubuntu和centos的“java”角色

 ├── Berksfile ├── .kitchen.yml ├── roles │  └── java.json └── test └── integration └── default └── serverspec └── java_spec.rb 

安装chefDK,vagrant并运行以下命令

 kitchen test 

笔记:

  • 让测试厨房运行的最简单方法是安装vagrant和chefdk

Berksfile

 source "https://supermarket.chef.io" cookbook "apt" cookbook "java" 

.kitchen.yml

 --- driver: name: vagrant provisioner: name: chef_zero require_chef_omnibus: 12.0.3 client_rb: "Ohai::Config[:disabled_plugins] = [:GCE] #": platforms: - name: ubuntu-12.04 - name: centos-6.4 suites: - name: default run_list: - role[java] 

笔记:

  • 特殊角色“java”被添加到节点运行列表中。
  • 此示例禁用“gce”插件。 见问题624 。

角色/ java.json

往上看

测试/集成/默认/ serverspec / java_spec.rb

 require 'serverspec' # Required by serverspec set :backend, :exec describe file('/usr/lib/jvm/java-8-oracle-amd64/release'), :if => os[:family] == "ubuntu" do it { should contain 'JAVA_VERSION="1.8.0_31"' } end describe file('/usr/lib/jvm/java/release'), :if => os[:family] == "redhat" do it { should contain 'JAVA_VERSION="1.8.0_31"' } end