# # Author:: Adam Jacob () # Copyright:: Copyright (c) 2009 Opscode, Inc. # License:: Apache License, Version 2.0 # # 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. # require 'chef/knife' require 'chef/data_bag_item' class Chef class Knife class Search < Knife banner "Sub-Command: search INDEX QUERY (options)" option :sort, :short => "-o SORT", :long => "--sort SORT", :description => "The order to sort the results in", :default => nil option :start, :short => "-b ROW", :long => "--start ROW", :description => "The row to start returning results at", :default => 0, :proc => lambda { |i| i.to_i } option :rows, :short => "-R INT", :long => "--rows INT", :description => "The number of rows to return", :default => 20, :proc => lambda { |i| i.to_i } option :attribute, :short => "-a [ATTR]", :long => "--attribute [ATTR]", :description => "Show only one attribute" option :run_list, :short => "-r", :long => "--run-list", :description => "Show only the run list" option :id_only, :short => "-i", :long => "--id-only", :description => "Show only the ID of matching objects" def run q = Chef::Search::Query.new display = { :total => 0, :start => config[:start] ? config[:start] : 0, :rows => [ ] } q.search(@name_args[0], @name_args[1], config[:sort], config[:start] ? config[:start] : 0, config[:rows] ? config[:rows] : 20) do |item| formatted_item = format_for_display(item) if formatted_item.respond_to?(:has_key?) && !formatted_item.has_key?('id') formatted_item['id'] = item.has_key?('id') ? item['id'] : item.name end display[:rows] << formatted_item display[:total] += 1 end if config[:id_only] if config[:attribute] display[:rows].each do |row| puts row[config[:attribute]] if row.has_key?(config[:attribute]) && !row[config[:attribute]].nil? end else puts display[:rows].join("\n") end else json_pretty_print(display) end end end end end