chef / cookstyle

A linting tool that helps you to write better Chef Infra cookbooks and InSpec profiles by detecting and automatically correcting style, syntax, and logic mistakes in your code.
Apache License 2.0
109 stars 54 forks source link

Chef/Correctness/LazyEvalNodeAttributeDefaults does not detect nested attributes #958

Open vytstank opened 1 year ago

vytstank commented 1 year ago

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']
                                     ^^^^^^^^^^^^^^^^