如何使用厨师更新java的替代品使用执行?

我有语法错误,我不确定如何解决它们。 在angular色文件中,我已经定义了下面的内容:

default_attributes( 'jdk' => { 'version' => '1.8.0_31' }, 'java' => { 'home' => '/usr/lib/jvm/jdk1.8.0_31' }, ) 

我尝试在下面使用java家,但它运行失败

 execute "update_alt_java" do command "update-alternatives --install "/usr/bin/java" "java" "#{node['java']['home']}/bin/java" 1" action :creates end 

我得到以下错误

 SyntaxError ----------- /etc/chef/src/cookbooks/jdk/recipes/default.rb:50: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' ...tives --install "/usr/bin/java" "java" "#{node['java']['home... ... ^ /etc/chef/src/cookbooks/jdk/recipes/default.rb:50: syntax error, unexpected tIDENTIFIER, expecting keyword_end ...--install "/usr/bin/java" "java" "#{node['java']['home']}/bi... 

Solutions Collecting From Web of "如何使用厨师更新java的替代品使用执行?"

你在使用社区java食谱吗?

它包含一个LWRP用于此目的:

 # 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 

更新:“my_java”包装食谱示例

以下是一个名为“my_java”的示例菜谱,旨在在Ubuntu上安装Oracle JDK:

 ├── attributes │  └── java.rb <-- Used for java cookbook attribute overrides ├── Berksfile ├── Berksfile.lock ├── metadata.rb ├── README.md └── recipes └── default.rb 

在运行大厨之后,Oracle JDK被安装

 $ java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit server VM (build 25.31-b07, mixed mode) 

笔记:

  • 这本食谱依赖于压倒一切的属性。 这可以从厨师环境或角色轻松完成。

metadata.rb

 name 'my_java' maintainer 'Mark O''Connor' maintainer_email 'XXXXXXXXXXXXXXX' license 'All rights reserved' description 'Installs/Configures my_java' long_description 'Installs/Configures my_java' version '0.1.0' depends "apt" depends "java" 

属性/ java.rb

 normal['java']['jdk_version'] = '8' normal['java']['install_flavor'] = 'oracle' normal['java']['oracle']['accept_oracle_download_terms'] = true 

笔记:

  • 默认情况下,java将安装openJDK。 这些覆盖指定OracleJDK的v8

食谱/ default.rb

 include_recipe "apt" include_recipe "java" 

笔记:

  • 很明显,“apt”食谱只适用于基于Debian的Linux。 这个配方也需要稍微调整才能使用redhat。

您应该在命令字符串中转义所有双引号,因为它以双引号开头和结尾。

没有行动:为执行资源创建。 该行动应该是:运行。

 execute "update_alt_java" do command "update-alternatives --install \"/usr/bin/java\" \"java\" \"#{node['java']['home']}/bin/java\" 1" action :run end 

但是你不想在每个主厨上运行这个资源,所以你应该想出什么样的条件,什么时候应该运行(使用only_if,not_if语句)。