cookstyle 6.11.4 → 6.15.5
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 +146 -38
- data/config/disable_all.yml +40 -4
- data/config/upstream.yml +153 -22
- data/cookstyle.gemspec +2 -0
- data/lib/cookstyle.rb +8 -7
- 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 +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -0
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +28 -4
- 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 +2 -1
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +2 -1
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +68 -0
- 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 +6 -5
- 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/supports_must_be_float.rb +52 -0
- 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 +3 -2
- 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 +3 -2
- 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 +2 -1
- 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/macos_userdefaults_global_property.rb +61 -0
- 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 +6 -3
- 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 +5 -4
- 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 +3 -2
- 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 +3 -2
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +2 -1
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +5 -4
- 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/action_method_in_resource.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +4 -3
- 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 +2 -1
- data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +88 -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 +5 -4
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +2 -1
- data/lib/rubocop/cop/chef/modernize/definitions.rb +3 -2
- 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 +2 -1
- 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 +5 -4
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +4 -3
- 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 +4 -3
- 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/double_compile_time.rb +65 -0
- 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 +2 -1
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +2 -1
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +5 -4
- 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 +3 -2
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +3 -2
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +2 -1
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +2 -1
- 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 +39 -19
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +2 -1
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +2 -1
- 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 +3 -2
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +3 -3
- data/lib/rubocop/monkey_patches/{cop.rb → base.rb} +2 -1
- data/lib/rubocop/monkey_patches/comment_config.rb +1 -0
- data/lib/rubocop/monkey_patches/registry_cop.rb +1 -0
- metadata +17 -6
@@ -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>)
|
@@ -26,7 +27,7 @@ module RuboCop
|
|
26
27
|
# node.policy_group == "foo"
|
27
28
|
#
|
28
29
|
class CookbookUsesPolicygroups < Cop
|
29
|
-
MSG = 'Cookbook uses Policy Groups, which cannot be used with Effortless Infra'
|
30
|
+
MSG = 'Cookbook uses Policy Groups, which cannot be used with Effortless Infra'
|
30
31
|
|
31
32
|
def on_send(node)
|
32
33
|
if node.method_name == :policy_group && node.receiver && node.receiver.send_type? && node.receiver.method_name == :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>)
|
@@ -18,16 +19,16 @@ module RuboCop
|
|
18
19
|
module Cop
|
19
20
|
module Chef
|
20
21
|
module ChefEffortless
|
21
|
-
# Neither Policyfiles or Effortless Infra which is based on Policyfiles supports Chef Roles
|
22
|
+
# Neither Policyfiles or Effortless Infra which is based on Policyfiles supports Chef Infra Roles
|
22
23
|
#
|
23
24
|
# @example
|
24
25
|
#
|
25
26
|
# # bad
|
26
|
-
# node.role?('
|
27
|
-
# node.roles.include?('
|
27
|
+
# node.role?('web_server')
|
28
|
+
# node.roles.include?('web_server')
|
28
29
|
#
|
29
30
|
class CookbookUsesRoles < Cop
|
30
|
-
MSG = 'Cookbook uses roles, which cannot be used in Policyfiles or Effortless Infra'
|
31
|
+
MSG = 'Cookbook uses roles, which cannot be used in Policyfiles or Effortless Infra'
|
31
32
|
|
32
33
|
def on_send(node)
|
33
34
|
if %i(role? roles).include?(node.method_name) && node.receiver && node.receiver.send_type? && node.receiver.method_name == :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>)
|
@@ -27,7 +28,7 @@ module RuboCop
|
|
27
28
|
# search(:node, 'role:bar')
|
28
29
|
#
|
29
30
|
class SearchForEnvironmentsOrRoles < Cop
|
30
|
-
MSG = 'Cookbook uses search with a node query that looks for a role or environment'
|
31
|
+
MSG = 'Cookbook uses search with a node query that looks for a role or environment'
|
31
32
|
|
32
33
|
def on_send(node)
|
33
34
|
if node.method_name == :search && node.arguments[1]&.value&.match?(/chef_environment|role/)
|
@@ -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>)
|
@@ -26,7 +27,7 @@ module RuboCop
|
|
26
27
|
# search(:node, 'run_list:recipe\[bacula\:\:server\]')
|
27
28
|
#
|
28
29
|
class CookbookUsesSearch < Cop
|
29
|
-
MSG = 'Cookbook uses search, which cannot be used in the Effortless Infra pattern'
|
30
|
+
MSG = 'Cookbook uses search, which cannot be used in the Effortless Infra pattern'
|
30
31
|
|
31
32
|
def on_send(node)
|
32
33
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :search
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, 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
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module ChefModernize
|
22
|
+
# Use the custom resource language's `action :my_action` blocks instead of creating actions with methods.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# def action_create
|
28
|
+
# # :create action code here
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
# action :create do
|
33
|
+
# # :create action code here
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
class ActionMethodInResource < Base
|
37
|
+
extend AutoCorrector
|
38
|
+
|
39
|
+
MSG = "Use the custom resource language's `action :my_action` blocks instead of creating actions with methods."
|
40
|
+
|
41
|
+
def_node_search :includes_poise?, '(send nil? :include (const nil? :Poise))'
|
42
|
+
|
43
|
+
def on_def(node)
|
44
|
+
return unless node.method_name.to_s.start_with?('action_') # when we stop support for Ruby < 2.7 the .to_s can go away here
|
45
|
+
return if node.arguments? # if they passed in arguments they may actually need this
|
46
|
+
return if node.parent && includes_poise?(node.parent)
|
47
|
+
|
48
|
+
add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector|
|
49
|
+
# @todo when we drop ruby 2.4 support we can convert this to use delete_suffix
|
50
|
+
corrector.replace(node.loc.expression, node.source.gsub("def #{node.method_name}", "action :#{node.method_name.to_s.gsub(/^action_/, '')} do"))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
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>)
|
@@ -40,7 +41,7 @@ module RuboCop
|
|
40
41
|
class AllowedActionsFromInitialize < Cop
|
41
42
|
include RangeHelp
|
42
43
|
|
43
|
-
MSG = 'The allowed actions of a resource can be set with the "allowed_actions" helper instead of using the initialize method.'
|
44
|
+
MSG = 'The allowed actions of a resource can be set with the "allowed_actions" helper instead of using the initialize method.'
|
44
45
|
|
45
46
|
def on_def(node)
|
46
47
|
return unless node.method_name == :initialize
|
@@ -55,13 +56,13 @@ module RuboCop
|
|
55
56
|
|
56
57
|
def_node_search :action_methods?, '(send nil? {:actions :allowed_actions} ... )'
|
57
58
|
|
58
|
-
def_node_search :
|
59
|
+
def_node_search :initialize_method, '(def :initialize ... )'
|
59
60
|
|
60
61
|
def autocorrect(node)
|
61
62
|
lambda do |corrector|
|
62
63
|
# insert the new allowed_actions call above the initialize method, but not if one already exists (this is sadly common)
|
63
64
|
unless action_methods?(processed_source.ast)
|
64
|
-
initialize_node =
|
65
|
+
initialize_node = initialize_method(processed_source.ast).first
|
65
66
|
corrector.insert_before(initialize_node.source_range, "allowed_actions #{node.descendants.first.source}\n\n")
|
66
67
|
end
|
67
68
|
|
@@ -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
|
|
35
36
|
minimum_target_chef_version '12.7'
|
36
37
|
|
37
|
-
MSG = 'Do not include the Apt default recipe to update package cache. Instead use the apt_update resource, which is built into Chef Infra Client 12.7 and later.'
|
38
|
+
MSG = 'Do not include the Apt default recipe to update package cache. Instead use the apt_update resource, which is built into Chef Infra Client 12.7 and later.'
|
38
39
|
|
39
40
|
def_node_matcher :apt_recipe_usage?, <<-PATTERN
|
40
41
|
(send nil? :include_recipe (str {"apt" "apt::default"}))
|
@@ -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
|
# source 'https://supermarket.chef.io'
|
35
36
|
#
|
36
37
|
class LegacyBerksfileSource < Cop
|
37
|
-
MSG = 'Do not use legacy Berksfile community sources. Use Chef Supermarket instead.'
|
38
|
+
MSG = 'Do not use legacy Berksfile community sources. Use Chef Supermarket instead.'
|
38
39
|
|
39
40
|
def_node_matcher :berksfile_site?, <<-PATTERN
|
40
41
|
(send nil? :site (:sym _))
|
@@ -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
|
# build_essential 'install compilation tools'
|
32
33
|
#
|
33
34
|
class UseBuildEssentialResource < Cop
|
34
|
-
MSG = 'Use the build_essential resource instead of the legacy build-essential recipe. This resource ships in the build-essential cookbook v5.0+ and is built into Chef Infra Client 14+'
|
35
|
+
MSG = 'Use the build_essential resource instead of the legacy build-essential recipe. This resource ships in the build-essential cookbook v5.0+ and is built into Chef Infra Client 14+'
|
35
36
|
|
36
37
|
def_node_matcher :build_essential_recipe_usage?, <<-PATTERN
|
37
38
|
(send nil? :include_recipe (str {"build-essential" "build-essential::default"}))
|
@@ -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
|
|
38
39
|
minimum_target_chef_version '14.0'
|
39
40
|
|
40
|
-
MSG = "Don't depend on cookbooks made obsolete by Chef Infra Client 14+. These community cookbooks contain resources that are now included in Chef Infra Client itself."
|
41
|
+
MSG = "Don't depend on cookbooks made obsolete by Chef Infra Client 14+. These community cookbooks contain resources that are now included in Chef Infra Client itself."
|
41
42
|
|
42
43
|
def_node_matcher :legacy_depends?, <<-PATTERN
|
43
44
|
(send nil? :depends (str {"build-essential" "chef_handler" "chef_hostname" "dmg" "mac_os_x" "swap" "sysctl"}) ... )
|
@@ -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>)
|
@@ -30,7 +31,7 @@ module RuboCop
|
|
30
31
|
include RangeHelp
|
31
32
|
include RuboCop::Chef::CookbookHelpers
|
32
33
|
|
33
|
-
MSG = 'The nokogiri gem ships in Chef Infra Client 12+ and does not need to be installed before being used.'
|
34
|
+
MSG = 'The nokogiri gem ships in Chef Infra Client 12+ and does not need to be installed before being used.'
|
34
35
|
|
35
36
|
def_node_matcher :nokogiri_install?, <<-PATTERN
|
36
37
|
(send nil? :chef_gem (str "nokogiri"))
|
@@ -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>)
|
@@ -33,7 +34,7 @@ module RuboCop
|
|
33
34
|
# end
|
34
35
|
#
|
35
36
|
class ResourceForcingCompileTime < Cop
|
36
|
-
MSG = "Set 'compile_time true' in resources when available instead of forcing resources to run at compile time by setting an action on the block."
|
37
|
+
MSG = "Set 'compile_time true' in resources when available instead of forcing resources to run at compile time by setting an action on the block."
|
37
38
|
|
38
39
|
def_node_matcher :compile_time_resource?, <<-PATTERN
|
39
40
|
(send (block (send nil? {:build_essential :chef_gem :hostname :ohai_hint} (...)) (args) (...)) $:run_action (sym ...))
|
@@ -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
|
# only_if { ::File.exist?('bin/foo') }
|
30
31
|
#
|
31
32
|
class ConditionalUsingTest < Cop
|
32
|
-
MSG = "Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out"
|
33
|
+
MSG = "Use ::File.exist?('/foo/bar') instead of the slower 'test -f /foo/bar' which requires shelling out"
|
33
34
|
|
34
35
|
def_node_matcher :resource_conditional?, <<~PATTERN
|
35
36
|
(send nil? {:not_if :only_if} $str )
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, 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
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
module ChefModernize
|
22
|
+
# Use the cron_d resource that ships with Chef Infra Client 14.4+ instead of manually creating the file with template, file, or cookbook_file resources.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# template '/etc/cron.d/backup' do
|
28
|
+
# source 'cron_backup_job.erb'
|
29
|
+
# owner 'root'
|
30
|
+
# group 'root'
|
31
|
+
# mode '644'
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# cookbook_file '/etc/cron.d/backup' do
|
35
|
+
# owner 'root'
|
36
|
+
# group 'root'
|
37
|
+
# mode '644'
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# file '/etc/cron.d/backup' do
|
41
|
+
# content '*/30 * * * * backup /usr/local/bin/backup_script.sh'
|
42
|
+
# owner 'root'
|
43
|
+
# group 'root'
|
44
|
+
# mode '644'
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# file '/etc/cron.d/blogs' do
|
48
|
+
# action :delete
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# # good
|
52
|
+
# cron_d 'backup' do
|
53
|
+
# minute '1'
|
54
|
+
# hour '1'
|
55
|
+
# mailto 'sysadmins@example.com'
|
56
|
+
# command '/usr/local/bin/backup_script.sh'
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# cron_d 'blogs' do
|
60
|
+
# action :delete
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
class CronDFileOrTemplate < Cop
|
64
|
+
extend TargetChefVersion
|
65
|
+
|
66
|
+
minimum_target_chef_version '14.4'
|
67
|
+
|
68
|
+
MSG = 'Use the cron_d resource that ships with Chef Infra Client 14.4+ instead of manually creating the file with template, file, or cookbook_file resources'
|
69
|
+
|
70
|
+
def_node_matcher :file_or_template?, <<-PATTERN
|
71
|
+
(block
|
72
|
+
(send nil? {:template :file :cookbook_file}
|
73
|
+
(str $_))
|
74
|
+
...
|
75
|
+
)
|
76
|
+
PATTERN
|
77
|
+
|
78
|
+
def on_block(node)
|
79
|
+
file_or_template?(node) do |file_name|
|
80
|
+
return unless file_name.start_with?('/etc/cron.d/')
|
81
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
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
|
|
34
35
|
minimum_target_chef_version '14.4'
|
35
36
|
|
36
|
-
MSG = 'The cron_manage resource was renamed to cron_access in the 6.1 release of the cron cookbook and later shipped in Chef Infra Client 14.4. The new resource name should be used.'
|
37
|
+
MSG = 'The cron_manage resource was renamed to cron_access in the 6.1 release of the cron cookbook and later shipped in Chef Infra Client 14.4. The new resource name should be used.'
|
37
38
|
|
38
39
|
def on_send(node)
|
39
40
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :cron_manage
|
@@ -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>)
|
@@ -31,7 +32,7 @@ module RuboCop
|
|
31
32
|
# encrypted_data = data_bag_item('foo2', 'bar2')
|
32
33
|
#
|
33
34
|
class DatabagHelpers < Cop
|
34
|
-
MSG = 'Use the `data_bag_item` helper instead of `Chef::DataBagItem.load` or `Chef::EncryptedDataBagItem.load`.'
|
35
|
+
MSG = 'Use the `data_bag_item` helper instead of `Chef::DataBagItem.load` or `Chef::EncryptedDataBagItem.load`.'
|
35
36
|
|
36
37
|
def_node_matcher :data_bag_class_load?, <<-PATTERN
|
37
38
|
(send
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -40,19 +41,19 @@ module RuboCop
|
|
40
41
|
class DefaultActionFromInitialize < Cop
|
41
42
|
include RangeHelp
|
42
43
|
|
43
|
-
MSG = 'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'
|
44
|
+
MSG = 'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'
|
44
45
|
|
45
46
|
def_node_matcher :action_variable_assignment?, <<-PATTERN
|
46
47
|
(ivasgn {:@action :@default_action} $(...))
|
47
48
|
PATTERN
|
48
49
|
|
49
|
-
def_node_search :
|
50
|
+
def_node_search :initialize_method, '(def :initialize ... )'
|
50
51
|
|
51
52
|
def_node_search :default_action_method?, '(send nil? :default_action ... )'
|
52
53
|
|
53
54
|
def on_ivasgn(node)
|
54
55
|
action_variable_assignment?(node) do
|
55
|
-
add_offense(node, location: :expression, message: MSG, severity: :refactor) if
|
56
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor) if initialize_method(node.parent.parent)
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
@@ -60,7 +61,7 @@ module RuboCop
|
|
60
61
|
lambda do |corrector|
|
61
62
|
# insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
|
62
63
|
unless default_action_method?(processed_source.ast)
|
63
|
-
initialize_node =
|
64
|
+
initialize_node = initialize_method(processed_source.ast).first
|
64
65
|
corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
|
65
66
|
end
|
66
67
|
|
@@ -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
|
class DefinesChefSpecMatchers < Cop
|
33
34
|
include RangeHelp
|
34
35
|
|
35
|
-
MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
|
36
|
+
MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'
|
36
37
|
|
37
38
|
def_node_matcher :chefspec_matcher?, <<-PATTERN
|
38
39
|
(if ( :defined? (const nil? :ChefSpec)) ... )
|
@@ -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>)
|
@@ -18,12 +19,12 @@ module RuboCop
|
|
18
19
|
module Cop
|
19
20
|
module Chef
|
20
21
|
module ChefModernize
|
21
|
-
# In 2016 with Chef Infra Client 12.5 Custom Resources were introduced as a way of writing reusable resource code that could be shipped in cookbooks. Custom Resources offer many advantages of legacy Definitions including unit testing with ChefSpec, input validation, actions,
|
22
|
+
# In 2016 with Chef Infra Client 12.5 Custom Resources were introduced as a way of writing reusable resource code that could be shipped in cookbooks. Custom Resources offer many advantages of legacy Definitions including unit testing with ChefSpec, input validation, actions, common properties like not_if/only_if, and resource reporting.
|
22
23
|
#
|
23
24
|
class Definitions < Cop
|
24
25
|
include RuboCop::Chef::CookbookHelpers
|
25
26
|
|
26
|
-
MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
|
27
|
+
MSG = 'Legacy Chef Infra definitions should be rewritten as custom resources to take full advantage of the Chef Infra feature set.'
|
27
28
|
|
28
29
|
def on_block(node)
|
29
30
|
add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.respond_to?(:method_name) && node.method_name == :define
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
#
|
2
3
|
# Copyright:: 2019-2020, Chef Software, Inc.
|
3
4
|
# Author:: Tim Smith (<tsmith@chef.io>)
|
@@ -31,7 +32,7 @@ module RuboCop
|
|
31
32
|
|
32
33
|
minimum_target_chef_version '13.3'
|
33
34
|
|
34
|
-
MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
|
35
|
+
MSG = "Don't depend on the zypper cookbook as the zypper_repository resource is built into Chef Infra Client 13.3+"
|
35
36
|
|
36
37
|
def_node_matcher :zypper_depends?, <<-PATTERN
|
37
38
|
(send nil? :depends (str "zypper"))
|