itchef/cookbooks/cpe_remote/libraries/helpers.rb (51 lines of code) (raw):
# Copyright (c) Facebook, Inc. and its affiliates.
#
# 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.
#
module CPE
module Remote
def gen_url(path, file)
http = node['cpe_remote']['http']
uri = http ? 'http' : 'https'
url = "#{uri}://#{node['cpe_remote']['base_url']}/#{path}/#{file}"
if defined?(CPE::Distro)
cdn_url = CPE::Distro.gen_url_from_api(path, file)
unless cdn_url.nil?
url = cdn_url
end
end
Chef::Log.info("Source URL: #{url}")
url
end
def valid_url?(url)
require 'chef/http/simple'
http = Chef::HTTP::Simple.new(url)
# CHEF-4762: we expect a nil return value from Chef::HTTP for a
# "200 Success" response and false for a "304 Not Modified" response
headers = auth_headers(url, 'HEAD')
http.head(url, headers)
true
rescue StandardError
Chef::Log.warn("INVALID URL GIVEN: #{url}")
false
end
def auth_headers(url, method)
if defined?(CPE::Distro)
CPE::Distro.auth_headers(url, method)
else
{}
end
rescue StandardError
Chef::Log.warn('Building auth headers failed')
{}
end
def validate_checksum(path, checksum)
# Comparing the Checksum Provided to the file downloaded
checksum_ondisk = Chef::Digester.checksum_for_file(path)
if checksum != checksum_ondisk
Chef::Log.warn(
"Path:#{path} provided checksum #{checksum} != " +
"File On Disk checksum #{checksum_ondisk}",
)
return false
end
true
rescue StandardError => e
Chef::Log.warn("cpe_remote/validate_checksum failed with:#{e.message}")
false
end
end
end