summaryrefslogtreecommitdiff
path: root/lib/chef/knife/cookbook_site_download.rb
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2018-07-13 13:12:25 -0700
committerTim Smith <tsmith@chef.io>2018-07-13 19:07:05 -0700
commit5b90d09398021b0c6f6dac2081c1d884c8270f51 (patch)
tree2ddb48f23f330cb969afe5f9ebae3c6d4e9822f8 /lib/chef/knife/cookbook_site_download.rb
parentbb0dd117d50dd5b175387b753ce54b3ef6421017 (diff)
downloadchef-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.rb98
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