cookstyle 6.7.3 → 6.12.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -0
- data/bin/cookstyle +1 -0
- data/bin/cookstyle-profile +31 -0
- data/config/cookstyle.yml +79 -4
- data/config/disable_all.yml +22 -0
- data/config/upstream.yml +132 -11
- data/cookstyle.gemspec +1 -0
- data/lib/cookstyle.rb +2 -0
- data/lib/cookstyle/version.rb +3 -2
- data/lib/rubocop/chef.rb +1 -0
- data/lib/rubocop/chef/autocorrect_helpers.rb +1 -0
- data/lib/rubocop/chef/cookbook_helpers.rb +1 -0
- data/lib/rubocop/chef/platform_helpers.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +12 -1
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +3 -2
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +1 -0
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/node_save.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/service_resource.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/ use_automatic_resource_name.rb +52 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +55 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +60 -0
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +142 -0
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +3 -2
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +8 -21
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +23 -13
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_environment.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/search_used.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/definitions.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +3 -2
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +18 -9
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/systctl_param_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +61 -0
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +69 -0
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +3 -2
- data/lib/rubocop/cop/chef/style/attribute_keys.rb +2 -1
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +2 -1
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +2 -1
- data/lib/rubocop/cop/chef/style/comments_format.rb +2 -1
- data/lib/rubocop/cop/chef/style/file_mode.rb +2 -1
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +2 -1
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +2 -1
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +2 -1
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +2 -1
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +3 -3
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +2 -1
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +3 -3
- data/lib/rubocop/monkey_patches/comment_config.rb +1 -0
- data/lib/rubocop/monkey_patches/cop.rb +1 -0
- data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
- metadata +15 -5
- data/lib/rubocop/cop/chef/deprecation/resource_without_name_or_provides.rb +0 -81
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -46,7 +47,7 @@ module RuboCop
|
|
46
47
|
|
47
48
|
minimum_target_chef_version '12.14'
|
48
49
|
|
49
|
-
MSG = 'With the release of Chef Infra Client 12.14 and the yum cookbook 3.0 several properties in the yum_repository resource were renamed. url -> baseurl, keyurl -> gpgkey, and mirrorexpire -> mirror_expire.'
|
50
|
+
MSG = 'With the release of Chef Infra Client 12.14 and the yum cookbook 3.0 several properties in the yum_repository resource were renamed. url -> baseurl, keyurl -> gpgkey, and mirrorexpire -> mirror_expire.'
|
50
51
|
|
51
52
|
def on_block(node)
|
52
53
|
%w(url keyurl mirrorexpire).each do |prop|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# end
|
30
31
|
#
|
31
32
|
class EasyInstallResource < Cop
|
32
|
-
MSG = "Don't use the deprecated easy_install resource removed in Chef Infra Client 13"
|
33
|
+
MSG = "Don't use the deprecated easy_install resource removed in Chef Infra Client 13"
|
33
34
|
|
34
35
|
def on_send(node)
|
35
36
|
add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :easy_install
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -32,7 +33,7 @@ module RuboCop
|
|
32
33
|
# end
|
33
34
|
|
34
35
|
class EOLAuditModeUsage < Cop
|
35
|
-
MSG = 'The beta Audit Mode feature in Chef Infra Client was removed in Chef Infra Client 15.0. Users should instead use InSpec and the audit cookbook. See https://www.inspec.io/ for more informmation.'
|
36
|
+
MSG = 'The beta Audit Mode feature in Chef Infra Client was removed in Chef Infra Client 15.0. Users should instead use InSpec and the audit cookbook. See https://www.inspec.io/ for more informmation.'
|
36
37
|
|
37
38
|
def_node_matcher :control_group?, '(send nil? :control_group ...)'
|
38
39
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -34,7 +35,7 @@ module RuboCop
|
|
34
35
|
# end
|
35
36
|
#
|
36
37
|
class EpicFail < Cop
|
37
|
-
MSG = 'Use ignore_failure method instead of the deprecated epic_fail method'
|
38
|
+
MSG = 'Use ignore_failure method instead of the deprecated epic_fail method'
|
38
39
|
|
39
40
|
def on_send(node)
|
40
41
|
add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :epic_fail
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -29,7 +30,7 @@ module RuboCop
|
|
29
30
|
# end
|
30
31
|
#
|
31
32
|
class ErlCallResource < Cop
|
32
|
-
MSG = "Don't use the deprecated erl_call resource removed in Chef Infra Client 13"
|
33
|
+
MSG = "Don't use the deprecated erl_call resource removed in Chef Infra Client 13"
|
33
34
|
|
34
35
|
def on_send(node)
|
35
36
|
add_offense(node, location: :expression, message: MSG, severity: :warning) if node.method_name == :erl_call
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
module RuboCop
|
20
|
+
module Cop
|
21
|
+
module Chef
|
22
|
+
module ChefDeprecations
|
23
|
+
# 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`.
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
#
|
27
|
+
# # bad
|
28
|
+
# class Chef
|
29
|
+
# class Resource
|
30
|
+
# class UlimitRule < Chef::Resource
|
31
|
+
# property :type, [Symbol, String], required: true
|
32
|
+
# property :item, [Symbol, String], required: true
|
33
|
+
#
|
34
|
+
# # additional resource code
|
35
|
+
# end
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# # bad
|
40
|
+
# class Chef
|
41
|
+
# class Resource
|
42
|
+
# class UlimitRule < Chef::Resource
|
43
|
+
# resource_name :ulimit_rule
|
44
|
+
#
|
45
|
+
# property :type, [Symbol, String], required: true
|
46
|
+
# property :item, [Symbol, String], required: true
|
47
|
+
#
|
48
|
+
# # additional resource code
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# # good when Chef Infra Client < 15 (but compatible with 16+ as well)
|
54
|
+
# class Chef
|
55
|
+
# class Resource
|
56
|
+
# class UlimitRule < Chef::Resource
|
57
|
+
# resource_name :ulimit_rule
|
58
|
+
# provides :ulimit_rule
|
59
|
+
#
|
60
|
+
# property :type, [Symbol, String], required: true
|
61
|
+
# property :item, [Symbol, String], required: true
|
62
|
+
#
|
63
|
+
# # additional resource code
|
64
|
+
# end
|
65
|
+
# end
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# # good when Chef Infra Client 16+
|
69
|
+
# class Chef
|
70
|
+
# class Resource
|
71
|
+
# class UlimitRule < Chef::Resource
|
72
|
+
# provides :ulimit_rule
|
73
|
+
#
|
74
|
+
# property :type, [Symbol, String], required: true
|
75
|
+
# property :item, [Symbol, String], required: true
|
76
|
+
#
|
77
|
+
# # additional resource code
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
# # better
|
83
|
+
# Convert your legacy HWRPs to custom resources
|
84
|
+
#
|
85
|
+
class HWRPWithoutProvides < Cop
|
86
|
+
MSG = 'In 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`.'
|
87
|
+
|
88
|
+
def_node_matcher :HWRP?, <<-PATTERN
|
89
|
+
(class
|
90
|
+
(const nil? :Chef) nil?
|
91
|
+
(class
|
92
|
+
(const nil? :Resource) nil?
|
93
|
+
$(class
|
94
|
+
(const nil? ... )
|
95
|
+
(const
|
96
|
+
(const nil? :Chef) :Resource)
|
97
|
+
(begin ... ))))
|
98
|
+
PATTERN
|
99
|
+
|
100
|
+
def_node_search :provides, '(send nil? :provides (sym $_) ...)'
|
101
|
+
def_node_search :resource_name_ast, '$(send nil? :resource_name ...)'
|
102
|
+
def_node_search :resource_name, '(send nil? :resource_name (sym $_))'
|
103
|
+
|
104
|
+
def on_class(node)
|
105
|
+
HWRP?(node) do |inherit|
|
106
|
+
add_offense(inherit, location: :expression, message: MSG, severity: :warning) unless has_provides?
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def has_provides?
|
111
|
+
provides_ast = provides(processed_source.ast)
|
112
|
+
return false if provides_ast.count == 0
|
113
|
+
|
114
|
+
resource_ast = resource_name(processed_source.ast)
|
115
|
+
|
116
|
+
if resource_ast.count == 0
|
117
|
+
true # no resource_name, but provides
|
118
|
+
else
|
119
|
+
# since we have a resource and provides make sure the there is a provides that
|
120
|
+
# matches the resource name
|
121
|
+
provides_ast.include?(resource_ast.first)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def indentation(node)
|
126
|
+
node.source_range.source_line =~ /\S/
|
127
|
+
end
|
128
|
+
|
129
|
+
def autocorrect(node)
|
130
|
+
lambda do |corrector|
|
131
|
+
resource_name_ast(node) do |ast_match|
|
132
|
+
# build a new string to add after that includes the new line and the proper indentation
|
133
|
+
new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match))
|
134
|
+
corrector.insert_after(ast_match.source_range, new_string)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -37,7 +38,7 @@ module RuboCop
|
|
37
38
|
# Write a custom resource using the custom resource DSL and avoid class based HWRPs entirely
|
38
39
|
#
|
39
40
|
class ResourceInheritsFromCompatResource < Cop
|
40
|
-
MSG = "HWRP style resource should inherit from the 'Chef::Resource' class and not the 'ChefCompat::Resource' class from the deprecated compat_resource cookbook."
|
41
|
+
MSG = "HWRP style resource should inherit from the 'Chef::Resource' class and not the 'ChefCompat::Resource' class from the deprecated compat_resource cookbook."
|
41
42
|
|
42
43
|
def_node_matcher :inherits_from_compat_resource?, <<-PATTERN
|
43
44
|
(class (const nil? _ ) (const (const nil? :ChefCompat) :Resource) ... )
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -38,7 +39,7 @@ module RuboCop
|
|
38
39
|
|
39
40
|
minimum_target_chef_version '12.19'
|
40
41
|
|
41
|
-
MSG = "The launchd resource's hash property was renamed to plist_hash in Chef Infra Client 13+ to avoid conflicts with Ruby's hash class."
|
42
|
+
MSG = "The launchd resource's hash property was renamed to plist_hash in Chef Infra Client 13+ to avoid conflicts with Ruby's hash class."
|
42
43
|
|
43
44
|
def on_block(node)
|
44
45
|
match_property_in_resource?(:launchd, 'hash', node) do |hash_prop|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -57,7 +58,7 @@ module RuboCop
|
|
57
58
|
# end
|
58
59
|
#
|
59
60
|
class LegacyNotifySyntax < Cop
|
60
|
-
MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'
|
61
|
+
MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'
|
61
62
|
|
62
63
|
def_node_matcher :legacy_notify?, <<-PATTERN
|
63
64
|
(send nil? ${:notifies :subscribes} $(sym _) (send nil? :resources (hash (pair $(sym _) $(...) ) ) ) $... )
|
@@ -80,7 +81,7 @@ module RuboCop
|
|
80
81
|
else
|
81
82
|
"\"#{type.source}[\#{#{name.source}}]\""
|
82
83
|
end
|
83
|
-
new_val = "#{notify_type} #{action.source}, #{service_value}"
|
84
|
+
new_val = "#{notify_type} #{action.source}, #{service_value}".dup
|
84
85
|
new_val << ", #{timing.first.source}" unless timing.empty?
|
85
86
|
corrector.replace(node.loc.expression, new_val)
|
86
87
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -33,7 +34,7 @@ module RuboCop
|
|
33
34
|
# include_recipe 'yum::yum'
|
34
35
|
#
|
35
36
|
class LegacyYumCookbookRecipes < Cop
|
36
|
-
MSG = 'The elrepo, epel, ius, remi, and repoforge recipes were split into their own cookbooks and the yum recipe was renamed to be default with the release of yum cookbook 3.0 (Dec 2013).'
|
37
|
+
MSG = 'The elrepo, epel, ius, remi, and repoforge recipes were split into their own cookbooks and the yum recipe was renamed to be default with the release of yum cookbook 3.0 (Dec 2013).'
|
37
38
|
|
38
39
|
def_node_matcher :old_yum_recipe?, <<-PATTERN
|
39
40
|
(send nil? :include_recipe (str {"yum::elrepo" "yum::epel" "yum::ius" "yum::remi" "yum::repoforge" "yum::yum"}))
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -31,7 +32,7 @@ module RuboCop
|
|
31
32
|
class LocaleDeprecatedLcAllProperty < Cop
|
32
33
|
include RuboCop::Chef::CookbookHelpers
|
33
34
|
|
34
|
-
MSG = "The local resource's lc_all property has been deprecated and will be removed in Chef Infra Client 17"
|
35
|
+
MSG = "The local resource's lc_all property has been deprecated and will be removed in Chef Infra Client 17"
|
35
36
|
|
36
37
|
def on_block(node)
|
37
38
|
match_property_in_resource?(:locale, 'lc_all', node) do |property|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -49,7 +50,7 @@ module RuboCop
|
|
49
50
|
|
50
51
|
minimum_target_chef_version '15.8'
|
51
52
|
|
52
|
-
MSG = 'In Chef Infra Client 16 the log resource no longer notifies when logging so notifications should not be triggered from log resources. Use the notify_group resource introduced in Chef Infra Client 15.8 instead to aggregate notifications.'
|
53
|
+
MSG = 'In Chef Infra Client 16 the log resource no longer notifies when logging so notifications should not be triggered from log resources. Use the notify_group resource introduced in Chef Infra Client 15.8 instead to aggregate notifications.'
|
53
54
|
|
54
55
|
def on_block(node)
|
55
56
|
match_property_in_resource?(:log, 'notifies', node) do |prop_node|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -33,7 +34,7 @@ module RuboCop
|
|
33
34
|
class NamePropertyWithDefaultValue < Cop
|
34
35
|
include RangeHelp
|
35
36
|
|
36
|
-
MSG = "A resource property can't be marked as a name_property and also have a default value. This will fail in Chef Infra Client 13 or later."
|
37
|
+
MSG = "A resource property can't be marked as a name_property and also have a default value. This will fail in Chef Infra Client 13 or later."
|
37
38
|
|
38
39
|
# match on a property or attribute that has any name and any type and a hash that
|
39
40
|
# contains name_property/name_attribute true and any default value. These are wrapped in
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
#
|
@@ -17,8 +18,7 @@ module RuboCop
|
|
17
18
|
module Cop
|
18
19
|
module Chef
|
19
20
|
module ChefDeprecations
|
20
|
-
# The node.deep_fetch method has been removed from Chef-Sugar, and must be replaced by
|
21
|
-
# the node.read API.
|
21
|
+
# The node.deep_fetch method has been removed from Chef-Sugar, and must be replaced by the node.read API.
|
22
22
|
#
|
23
23
|
# @example
|
24
24
|
#
|
@@ -34,31 +34,18 @@ module RuboCop
|
|
34
34
|
# # good
|
35
35
|
# node.read!("foo")
|
36
36
|
#
|
37
|
-
class NodeDeepFetch <
|
38
|
-
|
39
|
-
MSG2 = 'Do not use node.deep_fetch!. Replace with node.read! to keep identical behavior.'.freeze
|
37
|
+
class NodeDeepFetch < Base
|
38
|
+
extend RuboCop::Cop::AutoCorrector
|
40
39
|
|
41
40
|
def_node_matcher :node_deep_fetch?, <<-PATTERN
|
42
|
-
(send (send _ :node)
|
43
|
-
PATTERN
|
44
|
-
|
45
|
-
def_node_matcher :node_deep_fetch_bang?, <<-PATTERN
|
46
|
-
(send (send _ :node) $:deep_fetch! _)
|
41
|
+
(send (send _ :node) ${:deep_fetch :deep_fetch!} _)
|
47
42
|
PATTERN
|
48
43
|
|
49
44
|
def on_send(node)
|
50
45
|
node_deep_fetch?(node) do
|
51
|
-
add_offense(node
|
52
|
-
|
53
|
-
|
54
|
-
node_deep_fetch_bang?(node) do
|
55
|
-
add_offense(node, location: :selector, message: MSG2, severity: :warning)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def autocorrect(node)
|
60
|
-
lambda do |corrector|
|
61
|
-
corrector.replace(node.loc.selector, fix_name(node.method_name))
|
46
|
+
add_offense(node.loc.selector, message: "Do not use node.#{node.method_name}. Replace with node.#{fix_name(node.method_name)} to keep identical behavior.", severity: :warning) do |corrector|
|
47
|
+
corrector.replace(node.loc.selector, fix_name(node.method_name))
|
48
|
+
end
|
62
49
|
end
|
63
50
|
end
|
64
51
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -37,7 +38,7 @@ module RuboCop
|
|
37
38
|
# node['hostname']
|
38
39
|
#
|
39
40
|
class NodeMethodsInsteadofAttributes < Cop
|
40
|
-
MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'
|
41
|
+
MSG = 'Use node attributes to access Ohai data instead of node methods, which were deprecated in Chef Infra Client 13.'
|
41
42
|
|
42
43
|
def_node_matcher :node_ohai_methods?, <<-PATTERN
|
43
44
|
(send (send nil? :node) #non_nested_ohai_attribute?)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
#
|
@@ -30,7 +31,7 @@ module RuboCop
|
|
30
31
|
# node.normal['foo'] = true
|
31
32
|
#
|
32
33
|
class NodeSet < Cop
|
33
|
-
MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'
|
34
|
+
MSG = 'Do not use node.set. Replace with node.normal to keep identical behavior.'
|
34
35
|
|
35
36
|
def_node_matcher :node_set?, <<-PATTERN
|
36
37
|
(send (send _ :node) $:set)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
#
|
@@ -30,7 +31,7 @@ module RuboCop
|
|
30
31
|
# node.normal_unless['foo'] = true
|
31
32
|
#
|
32
33
|
class NodeSetUnless < Cop
|
33
|
-
MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'
|
34
|
+
MSG = 'Do not use node.set_unless. Replace with node.normal_unless to keep identical behavior.'
|
34
35
|
|
35
36
|
def_node_matcher :node_set_unless?, <<-PATTERN
|
36
37
|
(send (send _ :node) $:set_unless)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
4
|
#
|
@@ -34,7 +35,7 @@ module RuboCop
|
|
34
35
|
# node.default['foo']['bar'] -= 1
|
35
36
|
#
|
36
37
|
class NodeSetWithoutLevel < Cop
|
37
|
-
MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'
|
38
|
+
MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'
|
38
39
|
|
39
40
|
def on_op_asgn(node)
|
40
41
|
# make sure it was a += or -=
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -47,7 +48,7 @@ module RuboCop
|
|
47
48
|
# end
|
48
49
|
#
|
49
50
|
class PartialSearchClassUsage < Cop
|
50
|
-
MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'
|
51
|
+
MSG = 'Legacy Chef::PartialSearch class usage should be updated to use the search helper instead with the filter_result key.'
|
51
52
|
|
52
53
|
def_node_matcher :partial_search_class?, <<-PATTERN
|
53
54
|
(send (const (const ... :Chef) :PartialSearch) :new)
|