diff options
author | Tim Smith <tsmith@chef.io> | 2018-07-13 13:12:25 -0700 |
---|---|---|
committer | Tim Smith <tsmith@chef.io> | 2018-07-13 19:07:05 -0700 |
commit | 5b90d09398021b0c6f6dac2081c1d884c8270f51 (patch) | |
tree | 2ddb48f23f330cb969afe5f9ebae3c6d4e9822f8 /lib/chef/knife/cookbook_site_download.rb | |
parent | bb0dd117d50dd5b175387b753ce54b3ef6421017 (diff) | |
download | chef-5b90d09398021b0c6f6dac2081c1d884c8270f51.tar.gz |
Move all plugin logic into knife supermarketknife_supermarket
We want to deprecate knife cookbook site. This moves all the logic into
the knife supermarket plugins and has the legacy knife cookbook site
plugins inherit from that.
Signed-off-by: Tim Smith <tsmith@chef.io>
Diffstat (limited to 'lib/chef/knife/cookbook_site_download.rb')
-rw-r--r-- | lib/chef/knife/cookbook_site_download.rb | 98 |
1 files changed, 5 insertions, 93 deletions
diff --git a/lib/chef/knife/cookbook_site_download.rb b/lib/chef/knife/cookbook_site_download.rb index ad4a2a83a2..8e9022ce53 100644 --- a/lib/chef/knife/cookbook_site_download.rb +++ b/lib/chef/knife/cookbook_site_download.rb @@ -17,106 +17,18 @@ # require "chef/knife" +require "chef/knife/supermarket_download" class Chef class Knife - class CookbookSiteDownload < Knife + class CookbookSiteDownload < Knife::SupermarketDownload - deps do - require "fileutils" - end + # Handle the subclassing (knife doesn't do this :() + dependency_loaders.concat(superclass.dependency_loaders) + options.merge!(superclass.options) banner "knife cookbook site download COOKBOOK [VERSION] (options)" category "cookbook site" - - option :file, - short: "-f FILE", - long: "--file FILE", - description: "The filename to write to" - - option :force, - long: "--force", - description: "Force download deprecated version" - - option :supermarket_site, - short: "-m SUPERMARKET_SITE", - long: "--supermarket-site SUPERMARKET_SITE", - description: "Supermarket Site", - default: "https://supermarket.chef.io", - proc: Proc.new { |supermarket| Chef::Config[:knife][:supermarket_site] = supermarket } - - def run - if current_cookbook_deprecated? - message = "DEPRECATION: This cookbook has been deprecated. " - replacement = replacement_cookbook - if !replacement.to_s.strip.empty? - message << "It has been replaced by #{replacement}." - else - message << "No replacement has been defined." - end - ui.warn message - - unless config[:force] - ui.warn "Use --force to force download deprecated cookbook." - return - end - end - - download_cookbook - end - - def version - @version = desired_cookbook_data["version"] - end - - private - - def cookbooks_api_url - "#{config[:supermarket_site]}/api/v1/cookbooks" - end - - def current_cookbook_data - @current_cookbook_data ||= begin - noauth_rest.get "#{cookbooks_api_url}/#{@name_args[0]}" - end - end - - def current_cookbook_deprecated? - current_cookbook_data["deprecated"] == true - end - - def desired_cookbook_data - @desired_cookbook_data ||= begin - uri = if @name_args.length == 1 - current_cookbook_data["latest_version"] - else - specific_cookbook_version_url - end - - noauth_rest.get uri - end - end - - def download_cookbook - ui.info "Downloading #{@name_args[0]} from Supermarket at version #{version} to #{download_location}" - tf = noauth_rest.streaming_request(desired_cookbook_data["file"]) - - ::FileUtils.cp tf.path, download_location - ui.info "Cookbook saved: #{download_location}" - end - - def download_location - config[:file] ||= File.join Dir.pwd, "#{@name_args[0]}-#{version}.tar.gz" - config[:file] - end - - def replacement_cookbook - File.basename(current_cookbook_data["replacement"] || "") - end - - def specific_cookbook_version_url - "#{cookbooks_api_url}/#{@name_args[0]}/versions/#{@name_args[1].tr('.', '_')}" - end end end end |