summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2020-11-02 19:38:47 -0800
committerGitHub <noreply@github.com>2020-11-02 19:38:47 -0800
commitea728b7878713cc4a47a50a9b01ed56408041823 (patch)
tree73e79b86dd3392dcd6d50145c14911c934e858ce
parentd05c13ca1d65a15535e3904bbdeb93a7c716a663 (diff)
parent6e80dbccc43c89c7f03ef8ac99e507565aff2d25 (diff)
downloadchef-ea728b7878713cc4a47a50a9b01ed56408041823.tar.gz
Merge pull request #10595 from chef/namespace-resource_inspector
Signed-off-by: Tim Smith <tsmith@chef.io>
-rwxr-xr-xchef-bin/bin/chef-resource-inspector2
-rw-r--r--lib/chef/resource_inspector.rb152
-rw-r--r--spec/unit/resource_inspector_spec.rb6
-rwxr-xr-xtasks/docs.rb2
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