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.
The RuboCop engine that powers Cookstyle has been updated from 0.75.1 to 0.80.1. This new engine includes hundreds of bug fixes and new features that will allow us to write even more advanced Cookstyle rules in the future. This release also renames many of RuboCop's built-in cops so if you have a complex rubocop.yml file that disables or enables rules, you may see warnings instructing you to update your config.
All ChefDeprecation department cops now alert at Warning
level instead of Refactor
. This means that these cops will now result in Cookstyle exiting with a -1 exit code, which will cause failures in CI tests. ChefDeprecation cops are important to resolve and we believe this will the use of the latest Chef Infra coding standards.
The ChefDeprecations/DeprecatedWindowsVersionCheck
cop detects cookbooks that use the legacy older_than_win_2012_or_8?
helper method. Chef Infra Client no longer supports Windows releases before 8 / 2012. Those releases are end of life so this check can be removed from cookbooks.
The ChefDeprecations/ChefWindowsPlatformHelper
cop detects cookbooks that use the deprecated helper Chef::Platform.windows?
to see if a system is running on Windows instead of using platform?('windows')
or the new windows?
helper.
The ChefDeprecations/LogResourceNotifications
cop detects notifications in the log
resource. Beginning in Chef Infra Client 16, the log resource will no longer trigger an update, so these notifications will never fire. This will create problems for users who concatenate notifications from multiple resources into a single log resource so that those notifications only fire a single time. For example, many resource updates in your cookbook may require a service to restart, but a user may only want to trigger that service to restart once. Chef Infra Client 15.8 and later ships with a notify_group
resource specifically for aggregating notifications in this way. This resource should be used instead.
template '/etc/foo' do
source 'bar.erb'
notifies :write, 'log[Aggregate notifications using a single log resource]', :immediately
end
log 'Aggregate notifications using a single log resource' do
notifies :restart, 'service[foo]', :delayed
end
template '/etc/foo' do
source 'bar.erb'
notifies :run, 'notify_group[Aggregate notifications using a single notify_group resource]', :immediately
end
notify_group 'Aggregate notifications using a single notify_group resource' do
notifies :restart, 'service[foo]', :delayed
end
The ChefDeprecations/ResourceWithoutNameOrProvides
cop checks for legacy HWRP-style resources that do not set either resource_name
or provides
. These attributes are required by Chef Infra Client 16 and later.
The ChefCorrectness/ChefApplicationFatal
cop detects cookbooks that use Chef::Application.fatal!
to raise a failure during a Chef Infra Client run. When an error needs to be presented to a user, raise
should be used instead as it provides the full stack trace to make debugging significantly easier.
The ChefCorrectness/PowershellScriptDeleteFile
cop detects using a powershell_script
resource to delete a file. This should be accomplished by using the file
resource with the :delete
action instead. The file
resource offers a simpler syntax and full idempotency.
The ChefModernize/UseMultipackageInstalls
cop detects cookbooks that use Ruby loops to install multiple packages using multiple package resources. When using a package provider that supports multi-package installs you can pass an array of packages to install to a single package resource. Passing multiple packages to a single package resource greatly simplifies the log output and is significantly faster. Multi-package installs are available for package installs using apt, dnf, yum, snap, dpkg, deb, and Chocolatey package management systems.
The ChefModernize/ProvidesFromInitialize
cop detects legacy HWRP-style resources that set the provides
name in an intialize
method instead of using the provides
method in the resource DSL.
The ChefModernize/DatabagHelpers
cop detects cookbooks that load data bags with Chef::DataBagItem.load
or Chef::EncryptedDataBagItem.load
instead of the simpler data_bag_item
helper.
ChefStyle/UnnecessaryOSCheck
is now enabled by default. This was disabled by mistake previously.Lint/SendWithMixinArgument
is now enabled by default. This code simplifies how libraries are included in recipes and resources.Naming/PredicateName
is no longer enabled by default. The naming of methods and names doesn't impact the execution of the code, and without autocorrection any warnings required significant effort to resolve.Style/MultilineWhenThen
is now enabled by default. This cop simplifies case statements.Style/HashEachMethod
is now enabled by default. This cop detects and autocorrects overly complex code against hashes that can be simplified.ChefRedundant/UnnecessaryNameProperty
now detects unnecessary :Name attributes as well as properties.ChefModernize/DefaultActionFromInitialize
has been improved to detect more forms of default actions set in intializers.ChefCorrectness/DnfPackageAllowDowngrades
now supports autocorrection.ChefModernize/WindowsRegistryUAC
now detects additional registry key forms used to set UAC settings.ChefModernize/PowerShellGuardInterpreter
now also detects if the PowerShell guard is set in batch
resources