Skip to content

Commit f418739

Browse files
author
jtimberman
committed
[COOK-2904] - refactor ruby_block "update-java-alternatives"
* Move openjdk packages to an attribute * Use Opscode::OpenJDK class helper to get java location * Replace the ruby_block with a bash command * Update default spec to set the platform / version so helper library gets correct data
1 parent 30861f2 commit f418739

6 files changed

Lines changed: 31 additions & 53 deletions

File tree

attributes/default.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,28 @@
2424
default['java']['install_flavor'] = "openjdk"
2525
default['java']['jdk_version'] = '6'
2626
default['java']['arch'] = kernel['machine'] =~ /x86_64/ ? "x86_64" : "i586"
27+
default['java']['openjdk_packages'] = []
2728

2829
case node['platform_family']
2930
when "rhel", "fedora"
3031
default['java']['java_home'] = "/usr/lib/jvm/java"
32+
default['java']['openjdk_packages'] = ["java-1.#{node['java']['jdk_version']}.0-openjdk", "java-1.#{node['java']['jdk_version']}.0-openjdk-devel"]
3133
when "freebsd"
32-
default['java']['java_home'] = "/usr/local/openjdk#{java['jdk_version']}"
34+
default['java']['java_home'] = "/usr/local/openjdk#{node['java']['jdk_version']}"
35+
default['java']['openjdk_packages'] = ["openjdk#{node['java']['jdk_version']}"]
3336
when "arch"
34-
default['java']['java_home'] = "/usr/lib/jvm/java-#{java['jdk_version']}-openjdk"
37+
default['java']['java_home'] = "/usr/lib/jvm/java-#{node['java']['jdk_version']}-openjdk"
38+
default['java']['openjdk_packages'] = ["openjdk#{jdk_version}"]
3539
when "windows"
3640
default['java']['install_flavor'] = "windows"
3741
default['java']['windows']['url'] = nil
3842
default['java']['windows']['package_name'] = "Java(TM) SE Development Kit 7 (64-bit)"
43+
when "debian"
44+
default['java']['java_home'] = "/usr/lib/jvm/default-java"
45+
default['java']['openjdk_packages'] = ["openjdk-#{node['java']['jdk_version']}-jdk", "default-jre-headless"]
3946
else
4047
default['java']['java_home'] = "/usr/lib/jvm/default-java"
48+
default['java']['openjdk_packages'] = ["openjdk-#{node['java']['jdk_version']}-jdk"]
4149
end
4250

4351
if node['java']['install_flavor'] == 'ibm'

recipes/openjdk.rb

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17,61 +17,25 @@
1717
# See the License for the specific language governing permissions and
1818
# limitations under the License.
1919

20-
jdk_version = node['java']['jdk_version'].to_i
21-
java_home = node['java']['java_home']
22-
java_home_parent = ::File.dirname java_home
23-
jdk_home = ""
20+
java_location = Opscode::OpenJDK.new(node).java_location
2421

25-
pkgs = value_for_platform_family(
26-
["rhel","fedora"] => ["java-1.#{jdk_version}.0-openjdk", "java-1.#{jdk_version}.0-openjdk-devel"],
27-
"debian" => ["openjdk-#{jdk_version}-jdk", "default-jre-headless"],
28-
["arch","freebsd"] => ["openjdk#{jdk_version}"],
29-
"default" => ["openjdk-#{jdk_version}-jdk"]
30-
)
22+
include_recipe 'java::set_java_home'
3123

32-
include_recipe "java::set_java_home"
24+
if platform_family?('debian', 'rhel', 'fedora')
3325

34-
if platform_family?("debian", "rhel", "fedora")
35-
ruby_block "update-java-alternatives" do
36-
block do
37-
arch = node['kernel']['machine'] =~ /x86_64/ ? "x86_64" : "i386"
38-
arch = 'amd64' if arch == 'x86_64' && platform?("ubuntu") && node["platform_version"].to_f >= 12.04
39-
if platform_family?("debian") and jdk_version == 6
40-
java_name = if node["platform_version"].to_f >= 11.10
41-
"java-1.6.0-openjdk"
42-
else
43-
"java-6-openjdk"
44-
end
45-
java_name += "-i386" if arch == "i386" && node['platform_version'].to_f >= 12.04
46-
Mixlib::ShellOut.new("update-java-alternatives","-s", java_name, :returns => [0,2]).run_command
47-
else
48-
# have to do this on ubuntu for version 7 because Ubuntu does
49-
# not currently set jdk 7 as the default jvm on installation
50-
require "fileutils"
51-
Chef::Log.debug("glob is #{java_home_parent}/java*#{jdk_version}*openjdk*#{arch}")
52-
jdk_home = Dir.glob("#{java_home_parent}/java*#{jdk_version}*openjdk*#{arch}").first
53-
Chef::Log.debug("jdk_home is #{jdk_home}")
54-
if jdk_home
55-
FileUtils.rm_f java_home if ::File.exists? java_home
56-
FileUtils.ln_sf jdk_home, java_home
57-
end
58-
59-
cmd = Mixlib::ShellOut.new(
60-
%Q[ update-alternatives --install /usr/bin/java java #{java_home}/bin/java 1;
61-
update-alternatives --set java #{java_home}/bin/java ]
62-
).run_command
63-
unless cmd.exitstatus == 0 or cmd.exitstatus == 2
64-
Chef::Application.fatal!("Failed to update-alternatives for openjdk!")
65-
end
66-
end
67-
end
26+
bash 'update-java-alternatives' do
27+
command %Q[
28+
update-alternatives --install /usr/bin/java java #{java_location} 1061;
29+
update-alternatives--set java #{node['java']['java_home']}/bin/java
30+
]
6831
action :nothing
6932
end
33+
7034
end
7135

72-
pkgs.each do |pkg|
36+
node['java']['openjdk_packages'].each do |pkg|
7337
package pkg do
7438
action :install
75-
notifies :create, "ruby_block[update-java-alternatives]", :immediately if platform_family?("debian", "rhel", "fedora")
39+
notifies :run, 'bash[update-java-alternatives]', :immediately if platform_family?('debian', 'rhel', 'fedora')
7640
end
7741
end

spec/default_spec.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
require 'spec_helper'
22

33
describe 'java::default' do
4-
let (:chef_run) { ChefSpec::ChefRunner.new.converge('java::default') }
4+
let (:chef_run) do
5+
runner = ChefSpec::ChefRunner.new(
6+
platform: 'debian',
7+
version: '7.0'
8+
)
9+
runner.converge('java::default')
10+
end
511
it 'should include the openjdk recipe by default' do
612
chef_run.should include_recipe 'java::openjdk'
713
end

spec/libraries/helpers_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
# limitations under the License.
1616
#
1717

18-
$:.unshift(File.join(File.dirname(__FILE__), '..', '..', 'libraries'))
1918
$:.unshift(File.join(File.dirname(__FILE__), '..'))
2019
require 'spec_helper'
21-
require 'helpers'
2220

2321
describe Opscode::OpenJDK do
2422
let(:node) do

spec/openjdk_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
end
2626

2727
it 'sends notifiation to update-java-alternatives' do
28-
chef_run.package(pkg).should notify("ruby_block[update-java-alternatives]", :create)
28+
chef_run.package(pkg).should notify("bash[update-java-alternatives]", :run)
2929
end
3030
end
3131
end

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'libraries'))
2+
require 'helpers'
13
require 'chefspec'
24

35
RSpec.configure do |config|

0 commit comments

Comments
 (0)