class RuboCop::Cop::Chef::Deprecations::HWRPWithoutProvides
Chef
Infra Client 16 and later a legacy HWRP resource must use ‘provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef
Infra Client < 16 use both `resource_name` and `provides`.
@example
### incorrect class Chef class Resource class UlimitRule < Chef::Resource property :type, [Symbol, String], required: true property :item, [Symbol, String], required: true # additional resource code end end end ### incorrect class Chef class Resource class UlimitRule < Chef::Resource resource_name :ulimit_rule property :type, [Symbol, String], required: true property :item, [Symbol, String], required: true # additional resource code end end end ### correct when Chef Infra Client < 15 (but compatible with 16+ as well) class Chef class Resource class UlimitRule < Chef::Resource resource_name :ulimit_rule provides :ulimit_rule property :type, [Symbol, String], required: true property :item, [Symbol, String], required: true # additional resource code end end end ### correct when Chef Infra Client 16+ class Chef class Resource class UlimitRule < Chef::Resource provides :ulimit_rule property :type, [Symbol, String], required: true property :item, [Symbol, String], required: true # additional resource code end end end # better Convert your legacy HWRPs to custom resources
Constants
- MSG
Public Instance Methods
Source
# File lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb, line 118 def has_provides? provides_ast = provides(processed_source.ast) return false if provides_ast.none? resource_ast = resource_name(processed_source.ast) # if no resource ast then resource_name, but not provides # else make sure the provides matches the resource name resource_ast.none? || provides_ast.include?(resource_ast.first) end
Source
# File lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb, line 129 def indentation(node) node.source_range.source_line =~ /\S/ end
Source
# File lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb, line 105 def on_class(node) return if has_provides? HWRP?(node) do |inherit| add_offense(inherit, severity: :warning) do |corrector| resource_name_ast(node) do |ast_match| # build a new string to add after that includes the new line and the proper indentation new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match)) corrector.insert_after(ast_match.source_range, new_string) end end end end