class Chef::Knife::Cloud::ResourceListCommand
Public Class Methods
new(argv = [])
click to toggle source
Calls superclass method
# File lib/chef/knife/cloud/list_resource_command.rb, line 26 def initialize(argv = []) super argv # columns_with_info is array of hash with label, key and attribute extraction callback, ex [{:label => "Label text", :key => 'key', value_callback => callback_method to extract/format the required value}, ...] @columns_with_info = [] @sort_by_field = "id" # default sort by id end
Public Instance Methods
data_sort(resources)
click to toggle source
# File lib/chef/knife/cloud/list_resource_command.rb, line 102 def data_sort(resources) if resources.length > 0 resources[0].respond_to?(:kind) && resources[0].kind == "compute#image" ? resources : resources.sort_by { |x| x.send(@sort_by_field).downcase } else [] end end
execute_command()
click to toggle source
# File lib/chef/knife/cloud/list_resource_command.rb, line 33 def execute_command # exec the cmd resources = query_resource # handle the response list(resources) end
get_resource_col_val(resource)
click to toggle source
Derived class can override this to add more functionality.
# File lib/chef/knife/cloud/list_resource_command.rb, line 59 def get_resource_col_val(resource) resource_filtered = false list = [] @columns_with_info.each do |col_info| value = (col_info[:value_callback].nil? ? resource.send(col_info[:key]).to_s : col_info[:value_callback].call(resource.send(col_info[:key]))) unless config[:disable_filter] resource_filtered = true if is_resource_filtered?(col_info[:key], value) end list << value end return list unless resource_filtered end
is_resource_filtered?(attribute, value)
click to toggle source
# File lib/chef/knife/cloud/list_resource_command.rb, line 46 def is_resource_filtered?(attribute, value) # resource_filters is array of filters in form {:attribute => attribute-name, :regex => 'filter regex value'} return false if @resource_filters.nil? @resource_filters.each do |filter| if attribute == filter[:attribute] && value =~ filter[:regex] return true end end false end
list(resources)
click to toggle source
When @columns_with_info is nil display all
# File lib/chef/knife/cloud/list_resource_command.rb, line 73 def list(resources) if config[:format] == "summary" # display column wise only if @columns_with_info is specified, else as a json for readable display. begin resource_list = @columns_with_info.map { |col_info| ui.color(col_info[:label], :bold) } if @columns_with_info.length > 0 records = data_sort(resources) records.each do |resource| next if resource.respond_to?(:deprecated) && resource.deprecated if @columns_with_info.length > 0 list = get_resource_col_val(resource) resource_list.concat(list) unless list.nil? else puts resource.to_json puts "\n" end end rescue => e ui.fatal("Unknown resource error : #{e.message}") raise e end puts ui.list(resource_list, :uneven_columns_across, @columns_with_info.length) if @columns_with_info.length > 0 else output(format_for_display(resources)) end end
query_resource()
click to toggle source
# File lib/chef/knife/cloud/list_resource_command.rb, line 41 def query_resource # specific resource type must override this. raise Chef::Exceptions::Override, "You must override query_resource in #{self} to return resources." end