Vendor the external cookbooks
Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
This commit is contained in:
89
cookbooks/java/resources/alternatives.rb
Normal file
89
cookbooks/java/resources/alternatives.rb
Normal file
@@ -0,0 +1,89 @@
|
||||
#
|
||||
# Cookbook:: java
|
||||
# Provider:: alternatives
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
property :java_location, String
|
||||
property :bin_cmds, Array
|
||||
property :default, [true, false], default: true
|
||||
property :priority, Integer, default: 1061
|
||||
property :reset_alternatives, [true, false], default: true
|
||||
|
||||
action :set do
|
||||
if new_resource.bin_cmds
|
||||
new_resource.bin_cmds.each do |cmd|
|
||||
bin_path = "/usr/bin/#{cmd}"
|
||||
alt_path = "#{new_resource.java_location}/bin/#{cmd}"
|
||||
priority = new_resource.priority
|
||||
|
||||
unless ::File.exist?(alt_path)
|
||||
Chef::Log.debug "Skipping setting alternative for #{cmd}. Command #{alt_path} does not exist."
|
||||
next
|
||||
end
|
||||
|
||||
alternative_exists_same_priority = shell_out("#{alternatives_cmd} --display #{cmd} | grep #{alt_path} | grep 'priority #{priority}$'").exitstatus == 0
|
||||
alternative_exists = shell_out("#{alternatives_cmd} --display #{cmd} | grep #{alt_path}").exitstatus == 0
|
||||
# remove alternative if priority is changed and install it with new priority
|
||||
if alternative_exists && !alternative_exists_same_priority
|
||||
converge_by("Removing alternative for #{cmd} with old priority") do
|
||||
Chef::Log.debug "Removing alternative for #{cmd} with old priority"
|
||||
remove_cmd = shell_out("#{alternatives_cmd} --remove #{cmd} #{alt_path}")
|
||||
alternative_exists = false
|
||||
unless remove_cmd.exitstatus == 0
|
||||
Chef::Application.fatal!(%( remove alternative failed ))
|
||||
end
|
||||
end
|
||||
end
|
||||
# install the alternative if needed
|
||||
unless alternative_exists
|
||||
converge_by("Add alternative for #{cmd}") do
|
||||
Chef::Log.debug "Adding alternative for #{cmd}"
|
||||
if new_resource.reset_alternatives
|
||||
shell_out("rm /var/lib/alternatives/#{cmd}")
|
||||
end
|
||||
install_cmd = shell_out("#{alternatives_cmd} --install #{bin_path} #{cmd} #{alt_path} #{priority}")
|
||||
unless install_cmd.exitstatus == 0
|
||||
Chef::Application.fatal!(%( install alternative failed ))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# set the alternative if default
|
||||
next unless new_resource.default
|
||||
alternative_is_set = shell_out("#{alternatives_cmd} --display #{cmd} | grep \"link currently points to #{alt_path}\"").exitstatus == 0
|
||||
next if alternative_is_set
|
||||
converge_by("Set alternative for #{cmd}") do
|
||||
Chef::Log.debug "Setting alternative for #{cmd}"
|
||||
set_cmd = shell_out("#{alternatives_cmd} --set #{cmd} #{alt_path}")
|
||||
unless set_cmd.exitstatus == 0
|
||||
Chef::Application.fatal!(%( set alternative failed ))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action :unset do
|
||||
new_resource.bin_cmds.each do |cmd|
|
||||
converge_by("Remove alternative for #{cmd}") do
|
||||
shell_out("#{alternatives_cmd} --remove #{cmd} #{new_resource.java_location}/bin/#{cmd}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action_class do
|
||||
def alternatives_cmd
|
||||
platform_family?('rhel', 'fedora', 'amazon') ? 'alternatives' : 'update-alternatives'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user