lib/chef/knife/status.rb in knife-18.2.7 vs lib/chef/knife/status.rb in knife-18.3.0

- old
+ new

@@ -1,95 +1,95 @@ -# -# Author:: Ian Meyer (<ianmmeyer@gmail.com>) -# Copyright:: Copyright 2010-2020, Ian Meyer -# 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_relative "../knife" -require_relative "core/status_presenter" -require_relative "core/formatting_options" -require "chef-utils/dist" unless defined?(ChefUtils::Dist) - -class Chef - class Knife - class Status < Knife - include Knife::Core::FormattingOptions - - deps do - require "chef/search/query" unless defined?(Chef::Search::Query) - end - - banner "knife status QUERY (options)" - - option :run_list, - short: "-r", - long: "--run-list", - description: "Show the run list" - - option :sort_reverse, - short: "-s", - long: "--sort-reverse", - description: "Sort the status list by last run time descending" - - option :hide_by_mins, - long: "--hide-by-mins MINS", - description: "Hide nodes that have run #{ChefUtils::Dist::Infra::CLIENT} in the last MINS minutes" - - def append_to_query(term) - @query << " AND " unless @query.empty? - @query << term - end - - def run - ui.use_presenter Knife::Core::StatusPresenter - - if config[:long_output] - opts = {} - else - opts = { filter_result: - { name: ["name"], ipaddress: ["ipaddress"], ohai_time: ["ohai_time"], - cloud: ["cloud"], run_list: ["run_list"], platform: ["platform"], - platform_version: ["platform_version"], chef_environment: ["chef_environment"] } } - end - - @query ||= "" - append_to_query(@name_args[0]) if @name_args[0] - append_to_query("chef_environment:#{config[:environment]}") if config[:environment] - - if config[:hide_by_mins] - hide_by_mins = config[:hide_by_mins].to_i - time = Time.now.to_i - # AND NOT is not valid lucene syntax, so don't use append_to_query - @query << " " unless @query.empty? - @query << "NOT ohai_time:[#{(time - hide_by_mins * 60)} TO #{time}]" - end - - @query = @query.empty? ? "*:*" : @query - - all_nodes = [] - q = Chef::Search::Query.new - Chef::Log.info("Sending query: #{@query}") - q.search(:node, @query, opts) do |node| - all_nodes << node - end - - all_nodes.sort_by! { |n| n["ohai_time"] || 0 } - all_nodes.reverse! if config[:sort_reverse] || config[:sort_status_reverse] - - output(all_nodes) - end - - end - end -end +# +# Author:: Ian Meyer (<ianmmeyer@gmail.com>) +# Copyright:: Copyright 2010-2020, Ian Meyer +# 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_relative "../knife" +require_relative "core/status_presenter" +require_relative "core/formatting_options" +require "chef-utils/dist" unless defined?(ChefUtils::Dist) + +class Chef + class Knife + class Status < Knife + include Knife::Core::FormattingOptions + + deps do + require "chef/search/query" unless defined?(Chef::Search::Query) + end + + banner "knife status QUERY (options)" + + option :run_list, + short: "-r", + long: "--run-list", + description: "Show the run list" + + option :sort_reverse, + short: "-s", + long: "--sort-reverse", + description: "Sort the status list by last run time descending" + + option :hide_by_mins, + long: "--hide-by-mins MINS", + description: "Hide nodes that have run #{ChefUtils::Dist::Infra::CLIENT} in the last MINS minutes" + + def append_to_query(term) + @query << " AND " unless @query.empty? + @query << term + end + + def run + ui.use_presenter Knife::Core::StatusPresenter + + if config[:long_output] + opts = {} + else + opts = { filter_result: + { name: ["name"], ipaddress: ["ipaddress"], ohai_time: ["ohai_time"], + cloud: ["cloud"], run_list: ["run_list"], platform: ["platform"], + platform_version: ["platform_version"], chef_environment: ["chef_environment"] } } + end + + @query ||= "" + append_to_query(@name_args[0]) if @name_args[0] + append_to_query("chef_environment:#{config[:environment]}") if config[:environment] + + if config[:hide_by_mins] + hide_by_mins = config[:hide_by_mins].to_i + time = Time.now.to_i + # AND NOT is not valid lucene syntax, so don't use append_to_query + @query << " " unless @query.empty? + @query << "NOT ohai_time:[#{(time - hide_by_mins * 60)} TO #{time}]" + end + + @query = @query.empty? ? "*:*" : @query + + all_nodes = [] + q = Chef::Search::Query.new + Chef::Log.info("Sending query: #{@query}") + q.search(:node, @query, opts) do |node| + all_nodes << node + end + + all_nodes.sort_by! { |n| n["ohai_time"] || 0 } + all_nodes.reverse! if config[:sort_reverse] || config[:sort_status_reverse] + + output(all_nodes) + end + + end + end +end