diff options
Diffstat (limited to 'lib/chef/knife/cookbook_site_list.rb')
-rw-r--r-- | lib/chef/knife/cookbook_site_list.rb | 42 |
1 files changed, 6 insertions, 36 deletions
diff --git a/lib/chef/knife/cookbook_site_list.rb b/lib/chef/knife/cookbook_site_list.rb index 3b0b20a4df..b0ec22ac1e 100644 --- a/lib/chef/knife/cookbook_site_list.rb +++ b/lib/chef/knife/cookbook_site_list.rb @@ -17,49 +17,19 @@ # require "chef/knife" +require "chef/knife/supermarket_list" class Chef class Knife - class CookbookSiteList < Knife + class CookbookSiteList < Knife::SupermarketList + + # Handle the subclassing (knife doesn't do this :() + dependency_loaders.concat(superclass.dependency_loaders) + options.merge!(superclass.options) banner "knife cookbook site list (options)" category "cookbook site" - option :with_uri, - short: "-w", - long: "--with-uri", - description: "Show corresponding URIs" - - 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 config[:with_uri] - cookbooks = Hash.new - get_cookbook_list.each { |k, v| cookbooks[k] = v["cookbook"] } - ui.output(format_for_display(cookbooks)) - else - ui.msg(ui.list(get_cookbook_list.keys.sort, :columns_down)) - end - end - - def get_cookbook_list(items = 10, start = 0, cookbook_collection = {}) - cookbooks_url = "#{config[:supermarket_site]}/api/v1/cookbooks?items=#{items}&start=#{start}" - cr = noauth_rest.get(cookbooks_url) - cr["items"].each do |cookbook| - cookbook_collection[cookbook["cookbook_name"]] = cookbook - end - new_start = start + cr["items"].length - if new_start < cr["total"] - get_cookbook_list(items, new_start, cookbook_collection) - else - cookbook_collection - end - end end end end |