lib/chef/knife/config_show.rb in knife-18.0.185 vs lib/chef/knife/config_show.rb in knife-18.1.0
- old
+ new
@@ -1,127 +1,127 @@
-#
-# Author:: Vivek Singh (<vsingh@chef.io>)
-# Copyright:: Copyright (c) Chef Software 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_relative "../knife"
-
-class Chef
- class Knife
- class ConfigShow < Knife
- banner "knife config show [OPTION...] (options)\nDisplays the value of Chef::Config[OPTION] (or all config values)"
-
- option :all,
- short: "-a",
- long: "--all",
- description: "Include options that are not set in the configuration.",
- default: false
-
- option :raw,
- short: "-r",
- long: "--raw",
- description: "Display a each value with no formatting.",
- default: false
-
- def run
- if config[:format] == "summary" && !config[:raw]
- # If using the default, human-readable output, also show which config files are being loaded.
- # Some of this is a bit hacky since it duplicates
- wcl = self.class.config_loader
- if wcl.credentials_found
- loading_from("credentials", ChefConfig::PathHelper.home(".chef", "credentials"))
- end
- if wcl.config_location
- loading_from("configuration", wcl.config_location)
- end
-
- if Chef::Config[:config_d_dir]
- wcl.find_dot_d(Chef::Config[:config_d_dir]).each do |path|
- loading_from(".d/ configuration", path)
- end
- end
- end
-
- # Dump the whole config, including defaults is --all was given.
- config_data = Chef::Config.save(config[:all])
- # Two special cases, these are set during knife startup but we don't usually care about them.
- unless config[:all]
- config_data.delete(:color)
- # Only keep these if true, false is much less important because it's the default.
- config_data.delete(:local_mode) unless config_data[:local_mode]
- config_data.delete(:enforce_default_paths) unless config_data[:enforce_default_paths]
- config_data.delete(:enforce_path_sanity) unless config_data[:enforce_path_sanity]
- end
-
- # Extract the data to show.
- output_data = {}
- if @name_args.empty?
- output_data = config_data
- else
- @name_args.each do |filter|
- if filter =~ %r{^/(.*)/(i?)$}
- # It's a regex.
- filter_re = Regexp.new($1, $2 ? Regexp::IGNORECASE : 0)
- config_data.each do |key, value|
- output_data[key] = value if key.to_s&.match?(filter_re)
- end
- else
- # It's a dotted path string.
- filter_parts = filter.split(".")
- extract = lambda do |memo, filter_part|
- memo.is_a?(Hash) ? memo[filter_part.to_sym] : nil
- end
- # Check against both config_data and all of the data, so that even
- # in non-all mode, if you ask for a key that isn't in the non-all
- # data, it will check against the broader set.
- output_data[filter] = filter_parts.inject(config_data, &extract) || filter_parts.inject(Chef::Config.save(true), &extract)
- end
- end
- end
-
- # Fix up some values.
- output_data.each do |key, value|
- if value == STDOUT
- output_data[key] = "STDOUT"
- elsif value == STDERR
- output_data[key] = "STDERR"
- end
- end
-
- # Show the data.
- if config[:raw]
- output_data.each_value do |value|
- ui.msg(value)
- end
- else
- ui.output(output_data)
- end
- end
-
- private
-
- # Display a banner about loading from a config file.
- #
- # @api private
- # @param type_of_file [String] Description of the file for the banner.
- # @param path [String] Path of the file.
- # @return [nil]
- def loading_from(type_of_file, path)
- path = Pathname.new(path).realpath
- ui.msg(ui.color("Loading from #{type_of_file} file #{path}", :yellow))
- end
- end
- end
-end
+#
+# Author:: Vivek Singh (<vsingh@chef.io>)
+# Copyright:: Copyright (c) Chef Software 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_relative "../knife"
+
+class Chef
+ class Knife
+ class ConfigShow < Knife
+ banner "knife config show [OPTION...] (options)\nDisplays the value of Chef::Config[OPTION] (or all config values)"
+
+ option :all,
+ short: "-a",
+ long: "--all",
+ description: "Include options that are not set in the configuration.",
+ default: false
+
+ option :raw,
+ short: "-r",
+ long: "--raw",
+ description: "Display a each value with no formatting.",
+ default: false
+
+ def run
+ if config[:format] == "summary" && !config[:raw]
+ # If using the default, human-readable output, also show which config files are being loaded.
+ # Some of this is a bit hacky since it duplicates
+ wcl = self.class.config_loader
+ if wcl.credentials_found
+ loading_from("credentials", ChefConfig::PathHelper.home(".chef", "credentials"))
+ end
+ if wcl.config_location
+ loading_from("configuration", wcl.config_location)
+ end
+
+ if Chef::Config[:config_d_dir]
+ wcl.find_dot_d(Chef::Config[:config_d_dir]).each do |path|
+ loading_from(".d/ configuration", path)
+ end
+ end
+ end
+
+ # Dump the whole config, including defaults is --all was given.
+ config_data = Chef::Config.save(config[:all])
+ # Two special cases, these are set during knife startup but we don't usually care about them.
+ unless config[:all]
+ config_data.delete(:color)
+ # Only keep these if true, false is much less important because it's the default.
+ config_data.delete(:local_mode) unless config_data[:local_mode]
+ config_data.delete(:enforce_default_paths) unless config_data[:enforce_default_paths]
+ config_data.delete(:enforce_path_sanity) unless config_data[:enforce_path_sanity]
+ end
+
+ # Extract the data to show.
+ output_data = {}
+ if @name_args.empty?
+ output_data = config_data
+ else
+ @name_args.each do |filter|
+ if filter =~ %r{^/(.*)/(i?)$}
+ # It's a regex.
+ filter_re = Regexp.new($1, $2 ? Regexp::IGNORECASE : 0)
+ config_data.each do |key, value|
+ output_data[key] = value if key.to_s&.match?(filter_re)
+ end
+ else
+ # It's a dotted path string.
+ filter_parts = filter.split(".")
+ extract = lambda do |memo, filter_part|
+ memo.is_a?(Hash) ? memo[filter_part.to_sym] : nil
+ end
+ # Check against both config_data and all of the data, so that even
+ # in non-all mode, if you ask for a key that isn't in the non-all
+ # data, it will check against the broader set.
+ output_data[filter] = filter_parts.inject(config_data, &extract) || filter_parts.inject(Chef::Config.save(true), &extract)
+ end
+ end
+ end
+
+ # Fix up some values.
+ output_data.each do |key, value|
+ if value == STDOUT
+ output_data[key] = "STDOUT"
+ elsif value == STDERR
+ output_data[key] = "STDERR"
+ end
+ end
+
+ # Show the data.
+ if config[:raw]
+ output_data.each_value do |value|
+ ui.msg(value)
+ end
+ else
+ ui.output(output_data)
+ end
+ end
+
+ private
+
+ # Display a banner about loading from a config file.
+ #
+ # @api private
+ # @param type_of_file [String] Description of the file for the banner.
+ # @param path [String] Path of the file.
+ # @return [nil]
+ def loading_from(type_of_file, path)
+ path = Pathname.new(path).realpath
+ ui.msg(ui.color("Loading from #{type_of_file} file #{path}", :yellow))
+ end
+ end
+ end
+end