cookstyle-ng 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +25 -0
- data/LICENSE +201 -0
- data/bin/cookstyle +26 -0
- data/bin/cookstyle-profile +31 -0
- data/config/cookstyle.yml +3248 -0
- data/cookstyle.gemspec +30 -0
- data/lib/cookstyle/version.rb +5 -0
- data/lib/cookstyle.rb +44 -0
- data/lib/rubocop/chef/autocorrect_helpers.rb +33 -0
- data/lib/rubocop/chef/cookbook_helpers.rb +127 -0
- data/lib/rubocop/chef/cookbook_only.rb +76 -0
- data/lib/rubocop/chef/platform_helpers.rb +72 -0
- data/lib/rubocop/chef.rb +11 -0
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +61 -0
- data/lib/rubocop/cop/chef/correctness/chef_application_fatal.rb +56 -0
- data/lib/rubocop/cop/chef/correctness/conditional_ruby_shellout.rb +69 -0
- data/lib/rubocop/cop/chef/correctness/dnf_package_allow_downgrades.rb +55 -0
- data/lib/rubocop/cop/chef/correctness/incorrect_library_injection.rb +77 -0
- data/lib/rubocop/cop/chef/correctness/invalid_cookbook_name.rb +47 -0
- data/lib/rubocop/cop/chef/correctness/invalid_default_action.rb +48 -0
- data/lib/rubocop/cop/chef/correctness/invalid_notification_resource.rb +59 -0
- data/lib/rubocop/cop/chef/correctness/invalid_notification_timing.rb +55 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_helper.rb +72 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +70 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_helper.rb +57 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +89 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +70 -0
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_family_helper.rb +70 -0
- data/lib/rubocop/cop/chef/correctness/invalid_value_for_platform_helper.rb +69 -0
- data/lib/rubocop/cop/chef/correctness/invalid_version_metadata.rb +48 -0
- data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +53 -0
- data/lib/rubocop/cop/chef/correctness/lazy_in_resource_guard.rb +67 -0
- data/lib/rubocop/cop/chef/correctness/macos_userdefaults_invalid_type.rb +67 -0
- data/lib/rubocop/cop/chef/correctness/malformed_value_for_platform.rb +67 -0
- data/lib/rubocop/cop/chef/correctness/metadata_malformed_version.rb +58 -0
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +54 -0
- data/lib/rubocop/cop/chef/correctness/metadata_missing_version.rb +51 -0
- data/lib/rubocop/cop/chef/correctness/node_normal.rb +53 -0
- data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +53 -0
- data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -0
- data/lib/rubocop/cop/chef/correctness/notifies_action_not_symbol.rb +64 -0
- data/lib/rubocop/cop/chef/correctness/octal_mode_as_string.rb +48 -0
- data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +46 -0
- data/lib/rubocop/cop/chef/correctness/powershell_delete_file.rb +54 -0
- data/lib/rubocop/cop/chef/correctness/powershell_file_exists.rb +50 -0
- data/lib/rubocop/cop/chef/correctness/property_without_type.rb +59 -0
- data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +51 -0
- data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +50 -0
- data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +56 -0
- data/lib/rubocop/cop/chef/correctness/scoped_file_exist.rb +52 -0
- data/lib/rubocop/cop/chef/correctness/service_resource.rb +56 -0
- data/lib/rubocop/cop/chef/correctness/supports_must_be_float.rb +52 -0
- data/lib/rubocop/cop/chef/correctness/tmp_path.rb +59 -0
- data/lib/rubocop/cop/chef/deprecation/cb_depends_on_self.rb +57 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_recipe.rb +52 -0
- data/lib/rubocop/cop/chef/deprecation/chef_handler_supports.rb +55 -0
- data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +57 -0
- data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +98 -0
- data/lib/rubocop/cop/chef/deprecation/chef_shellout.rb +83 -0
- data/lib/rubocop/cop/chef/deprecation/chef_sugar_helpers.rb +55 -0
- data/lib/rubocop/cop/chef/deprecation/chef_windows_platform_helper.rb +55 -0
- data/lib/rubocop/cop/chef/deprecation/chefdk_generators.rb +56 -0
- data/lib/rubocop/cop/chef/deprecation/cheffile.rb +39 -0
- data/lib/rubocop/cop/chef/deprecation/chefspec_coverage_report.rb +49 -0
- data/lib/rubocop/cop/chef/deprecation/chefspec_legacy_runner.rb +61 -0
- data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +56 -0
- data/lib/rubocop/cop/chef/deprecation/delivery.rb +48 -0
- data/lib/rubocop/cop/chef/deprecation/depends_chef_nginx_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/deprecation/depends_chef_reporting_cookbook.rb +51 -0
- data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +54 -0
- data/lib/rubocop/cop/chef/deprecation/depends_omnibus_updater_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +50 -0
- data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +48 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +129 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +78 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_platform_methods.rb +61 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_shellout_methods.rb +64 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_sudo_actions.rb +65 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_windows_version_check.rb +42 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_actions.rb +67 -0
- data/lib/rubocop/cop/chef/deprecation/deprecated_yum_repository_properties.rb +69 -0
- data/lib/rubocop/cop/chef/deprecation/easy_install.rb +42 -0
- data/lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb +49 -0
- data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +51 -0
- data/lib/rubocop/cop/chef/deprecation/erl_call.rb +42 -0
- data/lib/rubocop/cop/chef/deprecation/execute_path_property.rb +50 -0
- data/lib/rubocop/cop/chef/deprecation/execute_relative_creates_without_cwd.rb +66 -0
- data/lib/rubocop/cop/chef/deprecation/foodcritic_file.rb +41 -0
- data/lib/rubocop/cop/chef/deprecation/foodcritic_testing.rb +43 -0
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +140 -0
- data/lib/rubocop/cop/chef/deprecation/hwrp_without_unified_mode_true.rb +86 -0
- data/lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb +59 -0
- data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +56 -0
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +91 -0
- data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +53 -0
- data/lib/rubocop/cop/chef/deprecation/librarian_chefspec.rb +42 -0
- data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +46 -0
- data/lib/rubocop/cop/chef/deprecation/log_resource_notifications.rb +63 -0
- data/lib/rubocop/cop/chef/deprecation/macos_userdefaults_global_property.rb +60 -0
- data/lib/rubocop/cop/chef/deprecation/name_property_and_default.rb +60 -0
- data/lib/rubocop/cop/chef/deprecation/node_deep_fetch.rb +65 -0
- data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +80 -0
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +54 -0
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +54 -0
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +70 -0
- data/lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb +67 -0
- data/lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb +61 -0
- data/lib/rubocop/cop/chef/deprecation/poise_archive.rb +63 -0
- data/lib/rubocop/cop/chef/deprecation/policyfile_community_source.rb +53 -0
- data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +59 -0
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +53 -0
- data/lib/rubocop/cop/chef/deprecation/resource_overrides_provides_method.rb +48 -0
- data/lib/rubocop/cop/chef/deprecation/resource_uses_dsl_name_method.rb +46 -0
- data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +84 -0
- data/lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb +40 -0
- data/lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb +50 -0
- data/lib/rubocop/cop/chef/deprecation/resource_without_unified_mode_true.rb +87 -0
- data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +56 -0
- data/lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb +62 -0
- data/lib/rubocop/cop/chef/deprecation/run_command_helper.rb +63 -0
- data/lib/rubocop/cop/chef/deprecation/search_uses_positional_parameters.rb +136 -0
- data/lib/rubocop/cop/chef/deprecation/use_automatic_resource_name.rb +52 -0
- data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +57 -0
- data/lib/rubocop/cop/chef/deprecation/use_yaml_dump.rb +47 -0
- data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +71 -0
- data/lib/rubocop/cop/chef/deprecation/verify_property_file_expansion.rb +57 -0
- data/lib/rubocop/cop/chef/deprecation/windows_feature_servermanagercmd.rb +58 -0
- data/lib/rubocop/cop/chef/deprecation/windows_package_installer_type_string.rb +60 -0
- data/lib/rubocop/cop/chef/deprecation/windows_task_change_action.rb +83 -0
- data/lib/rubocop/cop/chef/deprecation/windows_version_helpers.rb +71 -0
- data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -0
- data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +53 -0
- data/lib/rubocop/cop/chef/effortless/berksfile.rb +39 -0
- data/lib/rubocop/cop/chef/effortless/chef_vault_used.rb +87 -0
- data/lib/rubocop/cop/chef/effortless/data_bags.rb +40 -0
- data/lib/rubocop/cop/chef/effortless/depends_chef_vault.rb +47 -0
- data/lib/rubocop/cop/chef/effortless/node_environment.rb +45 -0
- data/lib/rubocop/cop/chef/effortless/node_policygroup.rb +44 -0
- data/lib/rubocop/cop/chef/effortless/node_roles.rb +45 -0
- data/lib/rubocop/cop/chef/effortless/search_for_environments_or_roles.rb +43 -0
- data/lib/rubocop/cop/chef/effortless/search_used.rb +40 -0
- data/lib/rubocop/cop/chef/modernize/action_method_in_resource.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +77 -0
- data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +70 -0
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +55 -0
- data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +60 -0
- data/lib/rubocop/cop/chef/modernize/chef_15_resources.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +63 -0
- data/lib/rubocop/cop/chef/modernize/class_eval_action_class.rb +63 -0
- data/lib/rubocop/cop/chef/modernize/compile_time_resources.rb +53 -0
- data/lib/rubocop/cop/chef/modernize/conditional_using_test.rb +55 -0
- data/lib/rubocop/cop/chef/modernize/cron_d_file_or_template.rb +121 -0
- data/lib/rubocop/cop/chef/modernize/cron_manage_resource.rb +50 -0
- data/lib/rubocop/cop/chef/modernize/databag_helpers.rb +59 -0
- data/lib/rubocop/cop/chef/modernize/declare_action_class.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +74 -0
- data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/definitions.rb +36 -0
- data/lib/rubocop/cop/chef/modernize/depends_chef_vault_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_chocolatey_cookbooks.rb +55 -0
- data/lib/rubocop/cop/chef/modernize/depends_kernel_module_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_locale_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_openssl_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_timezone_lwrp_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_windows_firewall_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb +55 -0
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -0
- data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +81 -0
- data/lib/rubocop/cop/chef/modernize/execute_sc_exe.rb +67 -0
- data/lib/rubocop/cop/chef/modernize/execute_sleep.rb +76 -0
- data/lib/rubocop/cop/chef/modernize/execute_sysctl.rb +70 -0
- data/lib/rubocop/cop/chef/modernize/execute_tzutil.rb +83 -0
- data/lib/rubocop/cop/chef/modernize/foodcritic_comments.rb +46 -0
- data/lib/rubocop/cop/chef/modernize/if_provides_default_action.rb +48 -0
- data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +83 -0
- data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +70 -0
- data/lib/rubocop/cop/chef/modernize/macos_user_defaults.rb +58 -0
- data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +51 -0
- data/lib/rubocop/cop/chef/modernize/node_init_package.rb +89 -0
- data/lib/rubocop/cop/chef/modernize/node_roles_include.rb +57 -0
- data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +47 -0
- data/lib/rubocop/cop/chef/modernize/openssl_rsa_key_resource.rb +54 -0
- data/lib/rubocop/cop/chef/modernize/openssl_x509_resource.rb +60 -0
- data/lib/rubocop/cop/chef/modernize/osx_config_profile_resource.rb +51 -0
- data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +50 -0
- data/lib/rubocop/cop/chef/modernize/powershell_guard_interpreter.rb +68 -0
- data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +53 -0
- data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +56 -0
- data/lib/rubocop/cop/chef/modernize/property_with_name_attribute.rb +56 -0
- data/lib/rubocop/cop/chef/modernize/provides_initializer.rb +68 -0
- data/lib/rubocop/cop/chef/modernize/resource_name_initializer.rb +63 -0
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +49 -0
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_compile_time.rb +94 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +77 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +63 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +52 -0
- data/lib/rubocop/cop/chef/modernize/sc_windows_resource.rb +53 -0
- data/lib/rubocop/cop/chef/modernize/seven_zip_archive.rb +46 -0
- data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +60 -0
- data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +58 -0
- data/lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb +63 -0
- data/lib/rubocop/cop/chef/modernize/sysctl_param_resource.rb +55 -0
- data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +51 -0
- data/lib/rubocop/cop/chef/modernize/use_chef_language_cloud_helpers.rb +93 -0
- data/lib/rubocop/cop/chef/modernize/use_chef_language_env_helpers.rb +69 -0
- data/lib/rubocop/cop/chef/modernize/use_chef_language_systemd_helper.rb +60 -0
- data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +113 -0
- data/lib/rubocop/cop/chef/modernize/use_require_relative.rb +60 -0
- data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +58 -0
- data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +52 -0
- data/lib/rubocop/cop/chef/modernize/windows_registry_uac.rb +92 -0
- data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +46 -0
- data/lib/rubocop/cop/chef/modernize/zipfile_resource.rb +59 -0
- data/lib/rubocop/cop/chef/modernize/zypper_repo.rb +60 -0
- data/lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb +65 -0
- data/lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb +60 -0
- data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +52 -0
- data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb +60 -0
- data/lib/rubocop/cop/chef/redundant/double_compile_time.rb +68 -0
- data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/multiple_platform_checks.rb +58 -0
- data/lib/rubocop/cop/chef/redundant/name_property_and_required.rb +81 -0
- data/lib/rubocop/cop/chef/redundant/ohai_attribute_to_string.rb +65 -0
- data/lib/rubocop/cop/chef/redundant/property_splat_regex.rb +59 -0
- data/lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb +61 -0
- data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +47 -0
- data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +52 -0
- data/lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb +50 -0
- data/lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb +64 -0
- data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +46 -0
- data/lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb +60 -0
- data/lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb +67 -0
- data/lib/rubocop/cop/chef/redundant/use_create_if_missing.rb +116 -0
- data/lib/rubocop/cop/chef/security/ssh_private_key.rb +49 -0
- data/lib/rubocop/cop/chef/sharing/default_maintainer_metadata.rb +50 -0
- data/lib/rubocop/cop/chef/sharing/empty_metadata_field.rb +47 -0
- data/lib/rubocop/cop/chef/sharing/include_property_descriptions.rb +55 -0
- data/lib/rubocop/cop/chef/sharing/include_resource_descriptions.rb +52 -0
- data/lib/rubocop/cop/chef/sharing/include_resource_examples.rb +60 -0
- data/lib/rubocop/cop/chef/sharing/insecure_cookbook_url.rb +62 -0
- data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +542 -0
- data/lib/rubocop/cop/chef/style/attribute_keys.rb +95 -0
- data/lib/rubocop/cop/chef/style/chef_whaaat.rb +49 -0
- data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +42 -0
- data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +101 -0
- data/lib/rubocop/cop/chef/style/comments_default_copyright.rb +50 -0
- data/lib/rubocop/cop/chef/style/comments_format.rb +71 -0
- data/lib/rubocop/cop/chef/style/file_mode.rb +86 -0
- data/lib/rubocop/cop/chef/style/immediate_notification_timing.rb +59 -0
- data/lib/rubocop/cop/chef/style/include_recipe_with_parentheses.rb +58 -0
- data/lib/rubocop/cop/chef/style/negating_only_if.rb +69 -0
- data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +70 -0
- data/lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb +89 -0
- data/lib/rubocop/cop/chef/style/true_false_resource_properties.rb +53 -0
- data/lib/rubocop/cop/chef/style/unnecessary_os_check.rb +103 -0
- data/lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb +100 -0
- data/lib/rubocop/cop/chef/style/use_platform_helpers.rb +86 -0
- data/lib/rubocop/cop/inspec/deprecation/attribute_default.rb +53 -0
- data/lib/rubocop/cop/inspec/deprecation/attribute_helper.rb +47 -0
- data/lib/rubocop/cop/target_chef_version.rb +22 -0
- data/lib/rubocop/monkey_patches/allow_invalid_ruby.rb +28 -0
- data/lib/rubocop/monkey_patches/base.rb +11 -0
- data/lib/rubocop/monkey_patches/config.rb +15 -0
- data/lib/rubocop/monkey_patches/directive_comment.rb +12 -0
- data/lib/rubocop/monkey_patches/registry_cop.rb +15 -0
- data/lib/rubocop/monkey_patches/team.rb +27 -0
- metadata +340 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Use the built-in `shell_out` helper available in Chef Infra Client 12.11+ instead of calling `Mixlib::ShellOut.new('foo').run_command`.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# Mixlib::ShellOut.new('foo').run_command
|
28
|
+
#
|
29
|
+
# ### correct
|
30
|
+
# shell_out('foo')
|
31
|
+
#
|
32
|
+
class ShellOutHelper < Base
|
33
|
+
extend AutoCorrector
|
34
|
+
extend TargetChefVersion
|
35
|
+
|
36
|
+
minimum_target_chef_version '12.11'
|
37
|
+
|
38
|
+
MSG = "Use the built-in `shell_out` helper available in Chef Infra Client 12.11+ instead of calling `Mixlib::ShellOut.new('foo').run_command`."
|
39
|
+
RESTRICT_ON_SEND = [:run_command].freeze
|
40
|
+
|
41
|
+
def_node_matcher :mixlib_shellout_run_cmd?, <<-PATTERN
|
42
|
+
(send
|
43
|
+
(send
|
44
|
+
(const
|
45
|
+
(const nil? :Mixlib) :ShellOut) :new
|
46
|
+
$(...)) :run_command)
|
47
|
+
PATTERN
|
48
|
+
|
49
|
+
def on_send(node)
|
50
|
+
mixlib_shellout_run_cmd?(node) do |cmd|
|
51
|
+
add_offense(node, severity: :refactor) do |corrector|
|
52
|
+
corrector.replace(node, "shell_out(#{cmd.source})")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Use the Chocolatey resources built into Chef Infra Client instead of shelling out to the choco command
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# execute 'install package foo' do
|
28
|
+
# command "choco install --source=artifactory \"foo\" -y --no-progress --ignore-package-exit-codes"
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# powershell_script 'add artifactory choco source' do
|
32
|
+
# code "choco source add -n=artifactory -s='https://mycorp.jfrog.io/mycorp/api/nuget/chocolatey-remote' -u foo -p bar"x
|
33
|
+
# not_if 'choco source list | findstr artifactory'
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
class ShellOutToChocolatey < Base
|
37
|
+
include RuboCop::Chef::CookbookHelpers
|
38
|
+
|
39
|
+
MSG = 'Use the Chocolatey resources built into Chef Infra Client instead of shelling out to the choco command'
|
40
|
+
|
41
|
+
def on_block(node)
|
42
|
+
match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
|
43
|
+
property_data = method_arg_ast_to_string(code_property)
|
44
|
+
next unless property_data && property_data.match?(/^choco /i)
|
45
|
+
add_offense(node, severity: :refactor)
|
46
|
+
end
|
47
|
+
|
48
|
+
match_property_in_resource?(:execute, 'command', node) do |code_property|
|
49
|
+
property_data = method_arg_ast_to_string(code_property)
|
50
|
+
next unless property_data && property_data.match?(/^choco /i)
|
51
|
+
add_offense(node, severity: :refactor)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, Chef Software Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# The apt_repository resource allows setting up PPAs without using the full URL to ppa.launchpad.net, which should be used to simplify the resource code in your cookbooks.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# apt_repository 'atom-ppa' do
|
28
|
+
# uri 'http://ppa.launchpad.net/webupd8team/atom/ubuntu'
|
29
|
+
# components ['main']
|
30
|
+
# keyserver 'keyserver.ubuntu.com'
|
31
|
+
# key 'C2518248EEA14886'
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# ### correct
|
35
|
+
# apt_repository 'atom-ppa' do
|
36
|
+
# uri 'ppa:webupd8team/atom'
|
37
|
+
# components ['main']
|
38
|
+
# keyserver 'keyserver.ubuntu.com'
|
39
|
+
# key 'C2518248EEA14886'
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
class SimplifyAptPpaSetup < Base
|
43
|
+
extend AutoCorrector
|
44
|
+
include RangeHelp
|
45
|
+
include RuboCop::Chef::CookbookHelpers
|
46
|
+
|
47
|
+
MSG = 'The apt_repository resource allows setting up PPAs without using the full URL to ppa.launchpad.net.'
|
48
|
+
|
49
|
+
def on_block(node)
|
50
|
+
match_property_in_resource?(:apt_repository, 'uri', node) do |uri|
|
51
|
+
if %r{http(s)*://ppa.launchpad.net/(.*)/ubuntu$}.match?(uri.arguments&.first&.str_content)
|
52
|
+
add_offense(uri, severity: :refactor) do |corrector|
|
53
|
+
next unless (replacement_val = %r{http(s)*://ppa.launchpad.net/(.*)/ubuntu}.match(node.source)[2])
|
54
|
+
corrector.replace(uri, "uri 'ppa:#{replacement_val}'")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# The sysctl_param resource was renamed to sysctl when it was added to Chef Infra Client 14.0. The new resource name should be used.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# sysctl_param 'fs.aio-max-nr' do
|
28
|
+
# value '1048576'
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# ### correct
|
32
|
+
# sysctl 'fs.aio-max-nr' do
|
33
|
+
# value '1048576'
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
class SysctlParamResource < Base
|
37
|
+
include RuboCop::Chef::CookbookHelpers
|
38
|
+
extend TargetChefVersion
|
39
|
+
extend AutoCorrector
|
40
|
+
|
41
|
+
minimum_target_chef_version '14.0'
|
42
|
+
|
43
|
+
MSG = 'The sysctl_param resource was renamed to sysctl when it was added to Chef Infra Client 14.0. The new resource name should be used.'
|
44
|
+
RESTRICT_ON_SEND = [:sysctl_param].freeze
|
45
|
+
|
46
|
+
def on_send(node)
|
47
|
+
add_offense(node, severity: :refactor) do |corrector|
|
48
|
+
corrector.replace(node, node.source.gsub(/^sysctl_param/, 'sysctl'))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2019, Chef Software Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Chef Infra Client 12.4+ includes mixlib/shellout automatically in resources and providers.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# require 'mixlib/shellout'
|
28
|
+
#
|
29
|
+
class UnnecessaryMixlibShelloutRequire < Base
|
30
|
+
extend AutoCorrector
|
31
|
+
include RangeHelp
|
32
|
+
|
33
|
+
MSG = 'Chef Infra Client 12.4+ includes mixlib/shellout automatically in resources and providers.'
|
34
|
+
RESTRICT_ON_SEND = [:require].freeze
|
35
|
+
|
36
|
+
def_node_matcher :require_mixlibshellout?, <<-PATTERN
|
37
|
+
(send nil? :require ( str "mixlib/shellout"))
|
38
|
+
PATTERN
|
39
|
+
|
40
|
+
def on_send(node)
|
41
|
+
require_mixlibshellout?(node) do
|
42
|
+
add_offense(node, severity: :refactor) do |corrector|
|
43
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2021, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Chef Infra Client 15.5 and later include cloud helpers to make detecting instances that run on public and private clouds easier.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# node['cloud']['provider'] == 'alibaba'
|
28
|
+
# node['cloud']['provider'] == 'ec2'
|
29
|
+
# node['cloud']['provider'] == 'gce'
|
30
|
+
# node['cloud']['provider'] == 'rackspace'
|
31
|
+
# node['cloud']['provider'] == 'eucalyptus'
|
32
|
+
# node['cloud']['provider'] == 'linode'
|
33
|
+
# node['cloud']['provider'] == 'openstack'
|
34
|
+
# node['cloud']['provider'] == 'azure'
|
35
|
+
# node['cloud']['provider'] == 'digital_ocean'
|
36
|
+
# node['cloud']['provider'] == 'softlayer'
|
37
|
+
#
|
38
|
+
# ### correct
|
39
|
+
# alibaba?
|
40
|
+
# ec2?
|
41
|
+
# gce?
|
42
|
+
# rackspace?
|
43
|
+
# eucalyptus?
|
44
|
+
# linode?
|
45
|
+
# openstack?
|
46
|
+
# azure?
|
47
|
+
# digital_ocean?
|
48
|
+
# softlayer?
|
49
|
+
#
|
50
|
+
class UseChefLanguageCloudHelpers < Base
|
51
|
+
extend AutoCorrector
|
52
|
+
extend TargetChefVersion
|
53
|
+
|
54
|
+
minimum_target_chef_version '15.5'
|
55
|
+
|
56
|
+
MSG = 'Chef Infra Client 15.5 and later include cloud helpers to make detecting instances that run on public and private clouds easier.'
|
57
|
+
RESTRICT_ON_SEND = [:==, :[]].freeze
|
58
|
+
VALID_CLOUDS = %w(alibaba ec2 gce rackspace eucalyptus linode openstack azure digital_ocean softlayer).freeze
|
59
|
+
|
60
|
+
def_node_matcher :provider_comparison?, <<-PATTERN
|
61
|
+
(send
|
62
|
+
(send
|
63
|
+
(send
|
64
|
+
(send nil? :node) :[]
|
65
|
+
(str "cloud")) :[]
|
66
|
+
(str "provider")) :==
|
67
|
+
(str $_))
|
68
|
+
PATTERN
|
69
|
+
|
70
|
+
def_node_matcher :node_cloud?, <<-PATTERN
|
71
|
+
(send
|
72
|
+
(send nil? :node) :[]
|
73
|
+
(str "cloud"))
|
74
|
+
PATTERN
|
75
|
+
|
76
|
+
def on_send(node)
|
77
|
+
provider_comparison?(node) do |cloud_name|
|
78
|
+
# skip it if someone was checking for a bogus cloud provider
|
79
|
+
next unless VALID_CLOUDS.include?(cloud_name)
|
80
|
+
|
81
|
+
# if they were checking for node['cloud'] and the provider replace it all
|
82
|
+
node = node.parent if node.parent.and_type? && node_cloud?(node.left_sibling)
|
83
|
+
|
84
|
+
add_offense(node, severity: :refactor) do |corrector|
|
85
|
+
corrector.replace(node, "#{cloud_name}?")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2021, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Chef Infra Client 15.5 and later include a large number of new helpers in the Chef Infra Language to simplify checking the system configuration in recipes and resources. These should be used when possible over more complex attributes or ENV var comparisons.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# ENV['CI']
|
28
|
+
# ENV['TEST_KITCHEN']
|
29
|
+
#
|
30
|
+
# ### correct
|
31
|
+
# ci?
|
32
|
+
# kitchen?
|
33
|
+
#
|
34
|
+
class UseChefLanguageEnvHelpers < Base
|
35
|
+
extend AutoCorrector
|
36
|
+
extend TargetChefVersion
|
37
|
+
|
38
|
+
minimum_target_chef_version '15.5'
|
39
|
+
|
40
|
+
RESTRICT_ON_SEND = [:[]].freeze
|
41
|
+
|
42
|
+
def_node_matcher :env?, <<-PATTERN
|
43
|
+
(send
|
44
|
+
(const nil? :ENV) :[]
|
45
|
+
(str ${"TEST_KITCHEN" "CI"}))
|
46
|
+
PATTERN
|
47
|
+
|
48
|
+
def on_send(node)
|
49
|
+
env?(node) do |env_value|
|
50
|
+
# we don't handle .nil? checks yet so just skip them
|
51
|
+
next if node.parent.send_type? && node.parent.method?(:nil?)
|
52
|
+
|
53
|
+
case env_value
|
54
|
+
when 'CI'
|
55
|
+
add_offense(node, message: 'Chef Infra Client 15.5 and later include a helper `ci?` that should be used to see if the `CI` env var is set.', severity: :refactor) do |corrector|
|
56
|
+
corrector.replace(node, 'ci?')
|
57
|
+
end
|
58
|
+
when 'TEST_KITCHEN'
|
59
|
+
add_offense(node, message: 'Chef Infra Client 15.5 and later include a helper `kitchen?` that should be used to see if the `TEST_KITCHEN` env var is set.', severity: :refactor) do |corrector|
|
60
|
+
corrector.replace(node, 'kitchen?')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2021, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Chef Infra Client 15.5 and later include a `systemd?` helper for checking if a Linux system uses systemd.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# node['init_package'] == 'systemd'
|
28
|
+
#
|
29
|
+
# ### correct
|
30
|
+
# systemd?
|
31
|
+
#
|
32
|
+
class UseChefLanguageSystemdHelper < Base
|
33
|
+
extend AutoCorrector
|
34
|
+
extend TargetChefVersion
|
35
|
+
|
36
|
+
minimum_target_chef_version '15.5'
|
37
|
+
|
38
|
+
MSG = 'Chef Infra Client 15.5 and later include a `systemd?` helper for checking if a Linux system uses systemd.'
|
39
|
+
RESTRICT_ON_SEND = [:==].freeze
|
40
|
+
|
41
|
+
def_node_matcher :node_init_package?, <<-PATTERN
|
42
|
+
(send
|
43
|
+
(send
|
44
|
+
(send nil? :node) :[]
|
45
|
+
(str "init_package")) :==
|
46
|
+
(str "systemd"))
|
47
|
+
PATTERN
|
48
|
+
|
49
|
+
def on_send(node)
|
50
|
+
node_init_package?(node) do |_cloud_name|
|
51
|
+
add_offense(node, severity: :refactor) do |corrector|
|
52
|
+
corrector.replace(node, 'systemd?')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, Chef Software, Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Pass an array of packages to package resources instead of iterating over an array of packages when using multi-package capable package subsystem such as apt, yum, chocolatey, dnf, or zypper. Multi-package installs are faster and simplify logs.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# %w(bmon htop vim curl).each do |pkg|
|
28
|
+
# package pkg do
|
29
|
+
# action :install
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# ### correct
|
34
|
+
# package %w(bmon htop vim curl)
|
35
|
+
#
|
36
|
+
class UseMultipackageInstalls < Base
|
37
|
+
extend AutoCorrector
|
38
|
+
|
39
|
+
MSG = 'Pass an array of packages to package resources instead of iterating over an array of packages when using multi-package capable package subsystem such as apt, yum, chocolatey, dnf, or zypper. Multi-package installs are faster and simplify logs.'
|
40
|
+
MULTIPACKAGE_PLATS = %w(debian redhat suse amazon fedora scientific oracle rhel ubuntu centos redhat).freeze
|
41
|
+
|
42
|
+
def_node_matcher :platform_or_platform_family?, <<-PATTERN
|
43
|
+
(send (send nil? :node) :[] (str {"platform" "platform_family"}) )
|
44
|
+
PATTERN
|
45
|
+
|
46
|
+
def_node_matcher :platform_helper?, <<-PATTERN
|
47
|
+
(if
|
48
|
+
(send nil? {:platform_family? :platform?} $... )
|
49
|
+
$(block
|
50
|
+
(send
|
51
|
+
$(array ... ) :each)
|
52
|
+
(args ... )
|
53
|
+
{(block
|
54
|
+
(send nil? :package
|
55
|
+
(lvar ... ))
|
56
|
+
(args)
|
57
|
+
(send nil? :action
|
58
|
+
(sym :install)))
|
59
|
+
(send nil? :package
|
60
|
+
(lvar _))}) nil?)
|
61
|
+
PATTERN
|
62
|
+
|
63
|
+
def_node_search :package_array_install, <<-PATTERN
|
64
|
+
$(block
|
65
|
+
(send
|
66
|
+
$(array ... ) :each)
|
67
|
+
(args ... )
|
68
|
+
{(block
|
69
|
+
(send nil? :package
|
70
|
+
(lvar ... ))
|
71
|
+
(args)
|
72
|
+
(send nil? :action
|
73
|
+
(sym :install)))
|
74
|
+
(send nil? :package
|
75
|
+
(lvar _))})
|
76
|
+
PATTERN
|
77
|
+
|
78
|
+
# see if all platforms in the when condition are multi-package compliant
|
79
|
+
def multipackage_platforms?(condition_obj)
|
80
|
+
condition_obj.all? do |p|
|
81
|
+
# make sure it's a string (not a regex) and it's in the array
|
82
|
+
p.str_type? && MULTIPACKAGE_PLATS.include?(p.value)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def on_when(node)
|
87
|
+
return unless platform_or_platform_family?(node.parent.condition) &&
|
88
|
+
multipackage_platforms?(node.conditions)
|
89
|
+
return if node.body.nil? # don't blow up on empty whens
|
90
|
+
|
91
|
+
package_array_install(node.body) do |install_block, pkgs|
|
92
|
+
add_offense(install_block, severity: :refactor) do |corrector|
|
93
|
+
corrector.replace(install_block, "package #{pkgs.source}")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def on_if(node)
|
99
|
+
platform_helper?(node) do |plats, blk, _pkgs|
|
100
|
+
return unless multipackage_platforms?(plats)
|
101
|
+
|
102
|
+
add_offense(blk, severity: :refactor) do |corrector|
|
103
|
+
package_array_install(blk) do |install_block, pkgs|
|
104
|
+
corrector.replace(install_block, "package #{pkgs.source}")
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: 2020, Chef Software Inc.
|
4
|
+
# Author:: Tim Smith (<tsmith84@gmail.com>)
|
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 Modernize
|
22
|
+
# Instead of using require with a File.expand_path and __FILE__ use the simpler require_relative method.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# ### incorrect
|
27
|
+
# require File.expand_path('../../libraries/helpers', __FILE__)
|
28
|
+
#
|
29
|
+
# ### correct
|
30
|
+
# require_relative '../libraries/helpers'
|
31
|
+
#
|
32
|
+
class UseRequireRelative < Base
|
33
|
+
extend AutoCorrector
|
34
|
+
|
35
|
+
MSG = 'Instead of using require with a File.expand_path and __FILE__ use the simpler require_relative method.'
|
36
|
+
RESTRICT_ON_SEND = [:require].freeze
|
37
|
+
|
38
|
+
def_node_matcher :require_with_expand_path?, <<-PATTERN
|
39
|
+
(send nil? :require
|
40
|
+
(send
|
41
|
+
(const nil? :File) :expand_path
|
42
|
+
$( str ... )
|
43
|
+
$( str ... )))
|
44
|
+
PATTERN
|
45
|
+
|
46
|
+
def on_send(node)
|
47
|
+
require_with_expand_path?(node) do |file, path|
|
48
|
+
return unless path.source == '__FILE__'
|
49
|
+
add_offense(node, severity: :refactor) do |corrector|
|
50
|
+
corrected_value = file.value
|
51
|
+
corrected_value.slice!(%r{^../}) # take the first ../ off the path
|
52
|
+
corrector.replace(node, "require_relative '#{corrected_value}'")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|