diff options
author | Pete Higgins <pete@peterhiggins.org> | 2020-11-02 16:52:59 -0800 |
---|---|---|
committer | Pete Higgins <pete@peterhiggins.org> | 2020-11-02 17:10:10 -0800 |
commit | 6e80dbccc43c89c7f03ef8ac99e507565aff2d25 (patch) | |
tree | 305918f87b29b4e771bd9a410819dea2e354d712 | |
parent | 09a008a8b845be08580678e7a60de55bcef27ca8 (diff) | |
download | chef-6e80dbccc43c89c7f03ef8ac99e507565aff2d25.tar.gz |
Namespace ResourceInspector to avoid conflicts with Inspec's.
Signed-off-by: Pete Higgins <pete@peterhiggins.org>
-rwxr-xr-x | chef-bin/bin/chef-resource-inspector | 2 | ||||
-rw-r--r-- | lib/chef/resource_inspector.rb | 152 | ||||
-rw-r--r-- | spec/unit/resource_inspector_spec.rb | 6 | ||||
-rwxr-xr-x | tasks/docs.rb | 2 |
4 files changed, 82 insertions, 80 deletions
diff --git a/chef-bin/bin/chef-resource-inspector b/chef-bin/bin/chef-resource-inspector index 90bd94e05d..e5f4100441 100755 --- a/chef-bin/bin/chef-resource-inspector +++ b/chef-bin/bin/chef-resource-inspector @@ -23,4 +23,4 @@ $:.unshift(File.expand_path(File.join(__dir__, "..", "lib"))) require "chef/resource_inspector" -ResourceInspector.start +Chef::ResourceInspector.start diff --git a/lib/chef/resource_inspector.rb b/lib/chef/resource_inspector.rb index 53c0fbd913..6d320f4202 100644 --- a/lib/chef/resource_inspector.rb +++ b/lib/chef/resource_inspector.rb @@ -23,94 +23,96 @@ require_relative "node" require_relative "resources" require_relative "json_compat" -module ResourceInspector - def self.get_default(default) - if default.is_a?(Chef::DelayedEvaluator) - # ideally we'd get the block we pass to `lazy`, but the best we can do - # is to get the source location, which then results in reparsing the source - # code for the resource ourselves and just no - "lazy default" - else - default.is_a?(Symbol) ? default.inspect : default # inspect properly returns symbols +class Chef + module ResourceInspector + def self.get_default(default) + if default.is_a?(Chef::DelayedEvaluator) + # ideally we'd get the block we pass to `lazy`, but the best we can do + # is to get the source location, which then results in reparsing the source + # code for the resource ourselves and just no + "lazy default" + else + default.is_a?(Symbol) ? default.inspect : default # inspect properly returns symbols + end end - end - def self.extract_resource(resource, complete = false) - data = {} - data[:description] = resource.description - # data[:deprecated] = resource.deprecated || false - data[:default_action] = resource.default_action - data[:actions] = resource.allowed_actions - data[:examples] = resource.examples - data[:introduced] = resource.introduced - data[:preview] = resource.preview_resource + def self.extract_resource(resource, complete = false) + data = {} + data[:description] = resource.description + # data[:deprecated] = resource.deprecated || false + data[:default_action] = resource.default_action + data[:actions] = resource.allowed_actions + data[:examples] = resource.examples + data[:introduced] = resource.introduced + data[:preview] = resource.preview_resource - properties = unless complete - resource.properties.reject { |_, k| k.options[:declared_in] == Chef::Resource || k.options[:skip_docs] } - else - resource.properties.reject { |_, k| k.options[:skip_docs] } - end + properties = unless complete + resource.properties.reject { |_, k| k.options[:declared_in] == Chef::Resource || k.options[:skip_docs] } + else + resource.properties.reject { |_, k| k.options[:skip_docs] } + end - data[:properties] = properties.each_with_object([]) do |(n, k), acc| - opts = k.options - acc << { name: n, description: opts[:description], - introduced: opts[:introduced], is: opts[:is], - deprecated: opts[:deprecated] || false, - required: opts[:required] || false, - default: opts[:default_description] || get_default(opts[:default]), - name_property: opts[:name_property] || false, - equal_to: sort_equal_to(opts[:equal_to]) } + data[:properties] = properties.each_with_object([]) do |(n, k), acc| + opts = k.options + acc << { name: n, description: opts[:description], + introduced: opts[:introduced], is: opts[:is], + deprecated: opts[:deprecated] || false, + required: opts[:required] || false, + default: opts[:default_description] || get_default(opts[:default]), + name_property: opts[:name_property] || false, + equal_to: sort_equal_to(opts[:equal_to]) } + end + data end - data - end - def self.sort_equal_to(equal_to) - Array(equal_to).sort.map(&:inspect) - rescue ArgumentError - Array(equal_to).map(&:inspect) - end + def self.sort_equal_to(equal_to) + Array(equal_to).sort.map(&:inspect) + rescue ArgumentError + Array(equal_to).map(&:inspect) + end - def self.extract_cookbook(path, complete) - path = File.expand_path(path) - dir, name = File.split(path) - Chef::Cookbook::FileVendor.fetch_from_disk(path) - loader = Chef::CookbookLoader.new(dir) - cookbook = loader.load_cookbook(name) - resources = cookbook.files_for(:resources) + def self.extract_cookbook(path, complete) + path = File.expand_path(path) + dir, name = File.split(path) + Chef::Cookbook::FileVendor.fetch_from_disk(path) + loader = Chef::CookbookLoader.new(dir) + cookbook = loader.load_cookbook(name) + resources = cookbook.files_for(:resources) - resources.each_with_object({}) do |r, res| - pth = r["full_path"] - cur = Chef::Resource::LWRPBase.build_from_file(name, pth, Chef::RunContext.new(Chef::Node.new, nil, nil)) - res[cur.resource_name] = extract_resource(cur, complete) + resources.each_with_object({}) do |r, res| + pth = r["full_path"] + cur = Chef::Resource::LWRPBase.build_from_file(name, pth, Chef::RunContext.new(Chef::Node.new, nil, nil)) + res[cur.resource_name] = extract_resource(cur, complete) + end end - end - # If we're given no resources, dump all of Chef's built ins - # otherwise, if we have a path then extract all the resources from the cookbook - # or else do a list of built in resources - # - # @param arguments [Array, String] One of more paths to a cookbook or a resource file to inspect - # @param complete [TrueClass, FalseClass] Whether to show properties defined in the base Resource class - # @return [String] JSON formatting of all resources - def self.inspect(arguments = [], complete: false) - output = if arguments.empty? - ObjectSpace.each_object(Class).select { |k| k < Chef::Resource }.each_with_object({}) { |klass, acc| acc[klass.resource_name] = extract_resource(klass) } - else - Array(arguments).each_with_object({}) do |arg, acc| - if File.directory?(arg) - extract_cookbook(arg, complete).each { |k, v| acc[k] = v } - else - r = Chef::ResourceResolver.resolve(arg.to_sym) - acc[r.resource_name] = extract_resource(r, complete) + # If we're given no resources, dump all of Chef's built ins + # otherwise, if we have a path then extract all the resources from the cookbook + # or else do a list of built in resources + # + # @param arguments [Array, String] One of more paths to a cookbook or a resource file to inspect + # @param complete [TrueClass, FalseClass] Whether to show properties defined in the base Resource class + # @return [String] JSON formatting of all resources + def self.inspect(arguments = [], complete: false) + output = if arguments.empty? + ObjectSpace.each_object(Class).select { |k| k < Chef::Resource }.each_with_object({}) { |klass, acc| acc[klass.resource_name] = extract_resource(klass) } + else + Array(arguments).each_with_object({}) do |arg, acc| + if File.directory?(arg) + extract_cookbook(arg, complete).each { |k, v| acc[k] = v } + else + r = Chef::ResourceResolver.resolve(arg.to_sym) + acc[r.resource_name] = extract_resource(r, complete) + end end end - end - Chef::JSONCompat.to_json_pretty(output) - end + Chef::JSONCompat.to_json_pretty(output) + end - def self.start - puts inspect(ARGV, complete: true) - end + def self.start + puts inspect(ARGV, complete: true) + end + end end diff --git a/spec/unit/resource_inspector_spec.rb b/spec/unit/resource_inspector_spec.rb index 31aafa1cbe..f3a4b2aa0a 100644 --- a/spec/unit/resource_inspector_spec.rb +++ b/spec/unit/resource_inspector_spec.rb @@ -33,9 +33,9 @@ class DummyResource < Chef::Resource end end -describe ResourceInspector do +describe Chef::ResourceInspector do describe "inspecting a resource" do - subject { ResourceInspector.extract_resource(DummyResource, false) } + subject { Chef::ResourceInspector.extract_resource(DummyResource, false) } it "returns a hash with required data" do expect(subject[:description]).to eq "A dummy resource" @@ -50,7 +50,7 @@ describe ResourceInspector do end context "including built in properties" do - subject { ResourceInspector.extract_resource(DummyResource, true) } + subject { Chef::ResourceInspector.extract_resource(DummyResource, true) } it "returns many properties" do expect(subject[:properties].count).to be > 1 expect(subject[:properties].map { |n| n[:name] }).to include(:name, :first, :sensitive) diff --git a/tasks/docs.rb b/tasks/docs.rb index cd8d98d540..a220f6ca0d 100755 --- a/tasks/docs.rb +++ b/tasks/docs.rb @@ -294,7 +294,7 @@ namespace :docs_site do end FileUtils.mkdir_p "docs_site" - resources = Chef::JSONCompat.parse(ResourceInspector.inspect) + resources = Chef::JSONCompat.parse(Chef::ResourceInspector.inspect) resources.each do |resource, data| # skip some resources we don't directly document |