cookstyle icon indicating copy to clipboard operation
cookstyle copied to clipboard

Chef/Correctness/LazyEvalNodeAttributeDefaults does not detect nested attributes

Open vytstank opened this issue 2 years ago • 0 comments

Version:

cookstyle (7.32.1)
rubocop (1.25.1)
rubocop-ast (1.24.1)

Environment:

Ruby 3.0.3 with Gemfile.lock

Scenario:

Trying to lint/find Chef resources that use node attributes for default property values without lazy {}, as described in https://docs.chef.io/custom_resource_glossary/#lazy

Steps to Reproduce:

Add following properties to Chef resource:

cookbook_name/resources/test.rb

property :hostname, String, default: node['hostname']
property :release, String, default: node['kernel']['release']

Expected Result:

To have offenses shown for both properties.

Actual Result:

Cookstyle catches only default: node['hostname'] violation:

bundle exec cookstyle resources/test.rb

resources/test.rb:1:38: R: [Correctable] Chef/Correctness/LazyEvalNodeAttributeDefaults: When setting a node attribute as the default value for a custom resource property, wrap the node attribute in lazy {} so that its value is available when the resource executes. (https://docs.chef.io/workstation/cookstyle/chef_correctness_lazyevalnodeattributedefaults)
property :hostname, String, default: node['hostname']
                                     ^^^^^^^^^^^^^^^^

vytstank avatar Feb 13 '23 10:02 vytstank