mirror of
https://github.com/inspec/inspec
synced 2024-11-23 13:13:22 +00:00
Merge pull request #1334 from chef/vj/compliance-upload-vendor
Vendor profile when uploading to chef-compliance
This commit is contained in:
commit
861027a140
3 changed files with 33 additions and 29 deletions
|
@ -128,6 +128,8 @@ module Compliance
|
||||||
exit 1
|
exit 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
vendor_deps(path, options) if File.directory?(path)
|
||||||
|
|
||||||
o = options.dup
|
o = options.dup
|
||||||
configure_logger(o)
|
configure_logger(o)
|
||||||
# check the profile, we only allow to upload valid profiles
|
# check the profile, we only allow to upload valid profiles
|
||||||
|
@ -172,7 +174,6 @@ module Compliance
|
||||||
# if it is a directory, tar it to tmp directory
|
# if it is a directory, tar it to tmp directory
|
||||||
if File.directory?(path)
|
if File.directory?(path)
|
||||||
archive_path = Dir::Tmpname.create([profile_name, '.tar.gz']) {}
|
archive_path = Dir::Tmpname.create([profile_name, '.tar.gz']) {}
|
||||||
# archive_path = file.path
|
|
||||||
puts "Generate temporary profile archive at #{archive_path}"
|
puts "Generate temporary profile archive at #{archive_path}"
|
||||||
profile.archive({ output: archive_path, ignore_errors: false, overwrite: true })
|
profile.archive({ output: archive_path, ignore_errors: false, overwrite: true })
|
||||||
else
|
else
|
||||||
|
|
|
@ -146,6 +146,35 @@ module Inspec
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def vendor_deps(path, opts)
|
||||||
|
path.nil? ? path = Pathname.new(Dir.pwd) : path = Pathname.new(path)
|
||||||
|
cache_path = path.join('vendor')
|
||||||
|
inspec_lock = path.join('inspec.lock')
|
||||||
|
|
||||||
|
if (cache_path.exist? || inspec_lock.exist?) && !opts[:overwrite]
|
||||||
|
puts 'Profile is already vendored. Use --overwrite.'
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
# remove existing
|
||||||
|
FileUtils.rm_rf(cache_path) if cache_path.exist?
|
||||||
|
File.delete(inspec_lock) if inspec_lock.exist?
|
||||||
|
|
||||||
|
puts "Vendor dependencies of #{path} into #{cache_path}"
|
||||||
|
opts[:logger] = Logger.new(STDOUT)
|
||||||
|
opts[:logger].level = get_log_level(opts.log_level)
|
||||||
|
opts[:cache] = Inspec::Cache.new(cache_path.to_s)
|
||||||
|
opts[:backend] = Inspec::Backend.create(target: 'mock://')
|
||||||
|
configure_logger(opts)
|
||||||
|
|
||||||
|
# vendor dependencies and generate lockfile
|
||||||
|
profile = Inspec::Profile.for_target(path.to_s, opts)
|
||||||
|
lockfile = profile.generate_lockfile
|
||||||
|
File.write(inspec_lock, lockfile.to_yaml)
|
||||||
|
rescue StandardError => e
|
||||||
|
pretty_handle_exception(e)
|
||||||
|
end
|
||||||
|
|
||||||
def configure_logger(o)
|
def configure_logger(o)
|
||||||
#
|
#
|
||||||
# TODO(ssd): This is a big gross, but this configures the
|
# TODO(ssd): This is a big gross, but this configures the
|
||||||
|
|
|
@ -109,35 +109,9 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
||||||
desc 'vendor PATH', 'Download all dependencies and generate a lockfile in a `vendor` directory'
|
desc 'vendor PATH', 'Download all dependencies and generate a lockfile in a `vendor` directory'
|
||||||
option :overwrite, type: :boolean, default: false,
|
option :overwrite, type: :boolean, default: false,
|
||||||
desc: 'Overwrite existing vendored dependencies and lockfile.'
|
desc: 'Overwrite existing vendored dependencies and lockfile.'
|
||||||
def vendor(path = nil) # rubocop:disable Metrics/AbcSize
|
def vendor(path = nil)
|
||||||
o = opts.dup
|
o = opts.dup
|
||||||
|
vendor_deps(path, o)
|
||||||
path.nil? ? path = Pathname.new(Dir.pwd) : path = Pathname.new(path)
|
|
||||||
cache_path = path.join('vendor')
|
|
||||||
inspec_lock = path.join('inspec.lock')
|
|
||||||
|
|
||||||
if (cache_path.exist? || inspec_lock.exist?) && !opts[:overwrite]
|
|
||||||
puts 'Profile is already vendored. Use --overwrite.'
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
# remove existing
|
|
||||||
FileUtils.rm_rf(cache_path) if cache_path.exist?
|
|
||||||
File.delete(inspec_lock) if inspec_lock.exist?
|
|
||||||
|
|
||||||
puts "Vendor dependencies of #{path} into #{cache_path}"
|
|
||||||
o[:logger] = Logger.new(STDOUT)
|
|
||||||
o[:logger].level = get_log_level(o.log_level)
|
|
||||||
o[:cache] = Inspec::Cache.new(cache_path.to_s)
|
|
||||||
o[:backend] = Inspec::Backend.create(target: 'mock://')
|
|
||||||
configure_logger(o)
|
|
||||||
|
|
||||||
# vendor dependencies and generate lockfile
|
|
||||||
profile = Inspec::Profile.for_target(path.to_s, o)
|
|
||||||
lockfile = profile.generate_lockfile
|
|
||||||
File.write(inspec_lock, lockfile.to_yaml)
|
|
||||||
rescue StandardError => e
|
|
||||||
pretty_handle_exception(e)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'archive PATH', 'archive a profile to tar.gz (default) or zip'
|
desc 'archive PATH', 'archive a profile to tar.gz (default) or zip'
|
||||||
|
|
Loading…
Reference in a new issue