78 lines
2.9 KiB
Ruby
78 lines
2.9 KiB
Ruby
#
|
|
# Cookbook:: omnibus_updater
|
|
# Recipe:: downloader
|
|
#
|
|
# Copyright:: 2014-2017, Heavy Water Ops, LLC
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
# NOTE: This recipe is here for others that just want the
|
|
# package, not the actual installation (lxc for example)
|
|
|
|
if node['omnibus_updater']['direct_url']
|
|
remote_path = node['omnibus_updater']['direct_url']
|
|
else
|
|
version = node['omnibus_updater']['version'] || ''
|
|
remote_path = OmnibusTrucker.url(
|
|
OmnibusTrucker.build_url(node,
|
|
version: node['omnibus_updater']['force_latest'] ? nil : version.sub(/\-.+$/, ''),
|
|
prerelease: node['omnibus_updater']['preview']
|
|
), node
|
|
)
|
|
raise 'Could not construct URL for chef-download' if remote_path.nil?
|
|
end
|
|
|
|
if remote_path
|
|
node.normal['omnibus_updater']['full_url'] = remote_path
|
|
|
|
directory node['omnibus_updater']['cache_dir'] do
|
|
recursive true
|
|
end
|
|
|
|
remote_file "omnibus_remote[#{File.basename(remote_path)}]" do
|
|
path File.join(node['omnibus_updater']['cache_dir'], File.basename(remote_path))
|
|
source remote_path
|
|
backup false
|
|
checksum node['omnibus_updater']['checksum'] if node['omnibus_updater']['checksum']
|
|
action :create_if_missing
|
|
only_if do
|
|
unless (version = node['omnibus_updater']['version'])
|
|
version = case node['platform_family']
|
|
when 'windows'
|
|
node['omnibus_updater']['full_url'].scan(/chef-windows|client-(\d+\.\d+.\d+)/).flatten.first
|
|
else
|
|
node['omnibus_updater']['full_url'].scan(/chef[_-](\d+\.\d+.\d+)/).flatten.first
|
|
end
|
|
end
|
|
if node['omnibus_updater']['always_download']
|
|
# warn if there may be unexpected behavior
|
|
node['omnibus_updater']['prevent_downgrade'] &&
|
|
Chef::Log.warn('omnibus_updater: prevent_downgrade is ignored when always_download is true')
|
|
Chef::Log.debug "Omnibus Updater remote path: #{remote_path}"
|
|
true
|
|
elsif node['omnibus_updater']['prevent_downgrade']
|
|
# Return true if the found/specified version is newer
|
|
Gem::Version.new(version.to_s.sub(/\-.+$/, '')) > Gem::Version.new(Chef::VERSION)
|
|
else
|
|
# default is to install if the versions don't match
|
|
Chef::VERSION != version.to_s.sub(/\-.+$/, '')
|
|
end
|
|
end
|
|
end
|
|
else
|
|
Chef::Log.warn 'Failed to retrieve omnibus download URL'
|
|
end
|
|
|
|
include_recipe 'omnibus_updater::old_package_cleaner'
|