class KnifeTopo::TopoSearch

knife topo search

Public Instance Methods

combine(query, group_query, constraint) click to toggle source
# File lib/chef/knife/topo_search.rb, line 84
def combine(query, group_query, constraint)
  find_in_topo = config[:topo] || config[:no_topo].nil?
  if find_in_topo
    query ? "#{constraint} AND #{group_query}" : constraint
  else
    query ? "#{group_query} NOT #{constraint}" : "NOT #{constraint}"
  end
end
constrain_query(query, topo_name) click to toggle source
# File lib/chef/knife/topo_search.rb, line 72
def constrain_query(query, topo_name)
  # group existing query workaround for strange behavior with
  # NOTs and invalid query if put brackets round them
  group_query = query && !query.start_with?('NOT') ? "(#{query})" : query

  # search specific topologies or all/none
  constraint = topo_name ? 'topo_name:' + topo_name : 'topo_name:*'

  # combine the grouped query and constraint
  combine(query, group_query, constraint)
end
run() click to toggle source
Calls superclass method
# File lib/chef/knife/topo_search.rb, line 48
def run
  setup_query
  super
rescue StandardError => e
  raise if Chef::Config[:verbosity] == 2
  ui.error "Topology search for \"#{@query}\" exited with error"
  humanize_exception(e)
end
setup_query() click to toggle source
# File lib/chef/knife/topo_search.rb, line 57
def setup_query
  query_str = @name_args[0] || config[:query]
  topo_query = constrain_query(query_str, config[:topo])

  # force a node search
  @name_args[0] = 'node'

  # override any query
  if config[:query]
    config[:query] = topo_query
  else
    @name_args[1] = topo_query
  end
end