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

pit*_*408 3 ruby java linux ubuntu chef-infra

我有语法错误,我不确定如何解决它们.在角色文件中,我定义了以下内容:

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

我尝试在下面使用java home,但它无法运行

execute "update_alt_java" do
  command "update-alternatives --install "/usr/bin/java" "java" "#{node['java']['home']}/bin/java" 1"
  action :creates
end
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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...
Run Code Online (Sandbox Code Playgroud)

Mar*_*nor 6

你在使用社区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
Run Code Online (Sandbox Code Playgroud)

更新:"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
Run Code Online (Sandbox Code Playgroud)

在运行厨师之后,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)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 这本食谱依赖于重写属性.这可以从厨师环境或角色轻松完成.

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"
Run Code Online (Sandbox Code Playgroud)

属性/ java.rb

normal['java']['jdk_version'] = '8'
normal['java']['install_flavor'] = 'oracle'
normal['java']['oracle']['accept_oracle_download_terms'] = true
Run Code Online (Sandbox Code Playgroud)

笔记:

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

食谱/ default.rb

include_recipe "apt"
include_recipe "java"
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 显然,"apt"食谱仅适用于基于Debian的linux.这个配方也需要进行微调,以便在redhat上工作.