chef 16.1.0-universal-mingw32 → 16.3.38-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -7
- data/README.md +3 -3
- data/Rakefile +4 -3
- data/chef-universal-mingw32.gemspec +2 -2
- data/chef.gemspec +7 -6
- data/distro/powershell/chef/chef.psm1 +3 -3
- data/distro/templates/powershell/chef/chef.psm1.erb +3 -3
- data/lib/chef/application.rb +12 -0
- data/lib/chef/application/apply.rb +2 -1
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
- data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -2
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +1 -5
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +2 -2
- data/lib/chef/chef_fs/path_utils.rb +4 -4
- data/lib/chef/client.rb +3 -3
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +2 -2
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
- data/lib/chef/cookbook/syntax_check.rb +1 -2
- data/lib/chef/cookbook_loader.rb +16 -30
- data/lib/chef/cookbook_manifest.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +4 -4
- data/lib/chef/data_bag.rb +5 -6
- data/lib/chef/data_collector.rb +1 -1
- data/lib/chef/data_collector/error_handlers.rb +1 -1
- data/lib/chef/decorator/lazy_array.rb +2 -2
- data/lib/chef/deprecated.rb +12 -0
- data/lib/chef/digester.rb +5 -4
- data/lib/chef/dsl/declare_resource.rb +1 -1
- data/lib/chef/dsl/platform_introspection.rb +2 -0
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
- data/lib/chef/environment.rb +1 -2
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/file_access_control.rb +1 -1
- data/lib/chef/file_access_control/windows.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/formatters/base.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
- data/lib/chef/http.rb +19 -4
- data/lib/chef/http/authenticator.rb +1 -1
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +18 -0
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife.rb +6 -6
- data/lib/chef/knife/bootstrap.rb +24 -24
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
- data/lib/chef/knife/bootstrap/train_connector.rb +1 -0
- data/lib/chef/knife/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/config_get.rb +2 -1
- data/lib/chef/knife/config_list_profiles.rb +4 -1
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/knife/configure.rb +1 -1
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +6 -14
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +2 -1
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +21 -2
- data/lib/chef/knife/core/ui.rb +8 -2
- data/lib/chef/knife/core/windows_bootstrap_context.rb +18 -4
- data/lib/chef/knife/data_bag_create.rb +1 -1
- data/lib/chef/knife/key_create_base.rb +1 -1
- data/lib/chef/knife/key_edit_base.rb +1 -1
- data/lib/chef/knife/node_bulk_delete.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/rehash.rb +3 -21
- data/lib/chef/knife/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/ssh.rb +7 -3
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/log.rb +8 -3
- data/lib/chef/mixin/api_version_request_handling.rb +1 -1
- data/lib/chef/mixin/checksum.rb +0 -1
- data/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
- data/{spec/unit/log_spec.rb → lib/chef/mixin/default_paths.rb} +13 -5
- data/lib/chef/mixin/openssl_helper.rb +31 -9
- data/lib/chef/mixin/path_sanity.rb +5 -4
- data/lib/chef/mixin/properties.rb +2 -2
- data/lib/chef/mixin/securable.rb +2 -2
- data/lib/chef/mixin/shell_out.rb +4 -188
- data/lib/chef/mixin/template.rb +1 -0
- data/lib/chef/mixin/which.rb +6 -3
- data/lib/chef/mixins.rb +1 -0
- data/lib/chef/node.rb +36 -12
- data/lib/chef/node/attribute.rb +2 -2
- data/lib/chef/node/immutable_collections.rb +1 -1
- data/lib/chef/node_map.rb +21 -18
- data/lib/chef/platform/service_helpers.rb +31 -28
- data/lib/chef/policy_builder/policyfile.rb +1 -1
- data/lib/chef/powershell.rb +1 -1
- data/lib/chef/property.rb +2 -2
- data/lib/chef/provider.rb +3 -3
- data/lib/chef/provider/batch.rb +3 -10
- data/lib/chef/provider/cron.rb +2 -14
- data/lib/chef/provider/directory.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/file.rb +1 -1
- data/lib/chef/provider/git.rb +12 -4
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +7 -7
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/solaris.rb +0 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/portage.rb +3 -2
- data/lib/chef/provider/package/powershell.rb +6 -2
- data/lib/chef/provider/package/rubygems.rb +3 -3
- data/lib/chef/provider/package/snap.rb +97 -29
- data/lib/chef/provider/package/windows.rb +11 -6
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
- data/lib/chef/provider/package/yum.rb +1 -1
- data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
- data/lib/chef/provider/package/zypper.rb +0 -1
- data/lib/chef/provider/powershell_script.rb +10 -14
- data/lib/chef/provider/remote_directory.rb +2 -2
- data/lib/chef/provider/remote_file/http.rb +4 -1
- data/lib/chef/provider/script.rb +4 -75
- data/lib/chef/provider/service.rb +2 -2
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +4 -4
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/provider/subversion.rb +2 -2
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +6 -6
- data/lib/chef/provider/user/linux.rb +3 -3
- data/lib/chef/provider/user/mac.rb +15 -11
- data/lib/chef/provider/windows_script.rb +87 -25
- data/lib/chef/provider/windows_task.rb +4 -2
- data/lib/chef/provider/yum_repository.rb +1 -1
- data/lib/chef/provider/zypper_repository.rb +31 -11
- data/lib/chef/resource.rb +27 -14
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/archive_file.rb +28 -8
- data/lib/chef/resource/bash.rb +0 -1
- data/lib/chef/resource/batch.rb +4 -2
- data/lib/chef/resource/build_essential.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +14 -2
- data/lib/chef/resource/chef_gem.rb +57 -21
- data/lib/chef/resource/chef_handler.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +1 -1
- data/lib/chef/resource/chocolatey_feature.rb +1 -2
- data/lib/chef/resource/cron/_cron_shared.rb +98 -0
- data/lib/chef/resource/cron/cron.rb +46 -0
- data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
- data/lib/chef/resource/cron_access.rb +13 -5
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +480 -10
- data/lib/chef/resource/file.rb +10 -8
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/helpers/cron_validations.rb +6 -3
- data/lib/chef/resource/homebrew_package.rb +30 -1
- data/lib/chef/resource/homebrew_update.rb +107 -0
- data/lib/chef/resource/hostname.rb +7 -20
- data/lib/chef/resource/kernel_module.rb +14 -1
- data/lib/chef/resource/launchd.rb +1 -1
- data/lib/chef/resource/locale.rb +3 -3
- data/lib/chef/resource/lwrp_base.rb +1 -0
- data/lib/chef/resource/macos_userdefaults.rb +176 -56
- data/lib/chef/resource/mount.rb +1 -1
- data/lib/chef/resource/openssl_x509_certificate.rb +11 -14
- data/lib/chef/resource/openssl_x509_crl.rb +1 -2
- data/lib/chef/resource/perl.rb +0 -1
- data/lib/chef/resource/plist.rb +23 -4
- data/lib/chef/resource/powershell_script.rb +4 -2
- data/lib/chef/resource/python.rb +0 -1
- data/lib/chef/resource/remote_file.rb +26 -10
- data/lib/chef/resource/ruby.rb +0 -1
- data/lib/chef/resource/scm/git.rb +1 -1
- data/lib/chef/resource/service.rb +2 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +16 -1
- data/lib/chef/resource/sudo.rb +30 -3
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/timezone.rb +15 -0
- data/lib/chef/resource/user_ulimit.rb +1 -1
- data/lib/chef/resource/windows_ad_join.rb +30 -1
- data/lib/chef/resource/windows_audit_policy.rb +227 -0
- data/lib/chef/resource/windows_auto_run.rb +11 -0
- data/lib/chef/resource/windows_certificate.rb +27 -1
- data/lib/chef/resource/windows_dfs_server.rb +1 -1
- data/lib/chef/resource/windows_dns_record.rb +17 -0
- data/lib/chef/resource/windows_firewall_profile.rb +197 -0
- data/lib/chef/resource/windows_font.rb +3 -3
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +2 -2
- data/lib/chef/resource/windows_script.rb +2 -16
- data/lib/chef/resource/windows_security_policy.rb +67 -36
- data/lib/chef/resource/windows_shortcut.rb +1 -2
- data/lib/chef/resource/windows_task.rb +10 -10
- data/lib/chef/resource/windows_user_privilege.rb +33 -10
- data/lib/chef/resource/yum_repository.rb +9 -9
- data/lib/chef/resource_inspector.rb +11 -4
- data/lib/chef/resources.rb +5 -2
- data/lib/chef/role.rb +1 -2
- data/lib/chef/run_context/cookbook_compiler.rb +1 -1
- data/lib/chef/search/query.rb +1 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/shell/shell_session.rb +2 -0
- data/lib/chef/util/diff.rb +2 -3
- data/lib/chef/util/windows/net_user.rb +1 -1
- data/lib/chef/util/windows/volume.rb +1 -1
- data/lib/chef/version.rb +2 -2
- data/lib/chef/win32/api.rb +2 -2
- data/lib/chef/win32/api/error.rb +3 -1
- data/lib/chef/win32/api/file.rb +1 -1
- data/lib/chef/win32/api/net.rb +1 -0
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/mutex.rb +1 -1
- data/lib/chef/win32/net.rb +1 -0
- data/lib/chef/win32/registry.rb +3 -4
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/security/sid.rb +4 -4
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/functional/knife/configure_spec.rb +1 -1
- data/spec/functional/knife/ssh_spec.rb +5 -16
- data/spec/functional/resource/aix_service_spec.rb +9 -2
- data/spec/functional/resource/aixinit_service_spec.rb +1 -2
- data/spec/functional/resource/apt_package_spec.rb +0 -1
- data/spec/functional/resource/bash_spec.rb +3 -2
- data/spec/functional/resource/bff_spec.rb +1 -1
- data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
- data/spec/functional/resource/cron_spec.rb +20 -2
- data/spec/functional/resource/dnf_package_spec.rb +6 -3
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +29 -7
- data/spec/functional/resource/group_spec.rb +15 -3
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +3 -3
- data/spec/functional/resource/link_spec.rb +2 -5
- data/spec/functional/resource/mount_spec.rb +9 -1
- data/spec/functional/resource/msu_package_spec.rb +9 -3
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/remote_file_spec.rb +9 -15
- data/spec/functional/resource/rpm_spec.rb +1 -1
- data/spec/functional/resource/timezone_spec.rb +2 -0
- data/spec/functional/resource/windows_package_spec.rb +0 -1
- data/spec/functional/resource/windows_path_spec.rb +4 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -1
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_task_spec.rb +16 -15
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -2
- data/spec/functional/resource/yum_package_spec.rb +4 -1
- data/spec/functional/resource/zypper_package_spec.rb +4 -1
- data/spec/functional/run_lock_spec.rb +2 -1
- data/spec/functional/shell_spec.rb +5 -6
- data/spec/functional/util/powershell/cmdlet_spec.rb +1 -1
- data/spec/functional/version_spec.rb +1 -1
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/integration/knife/config_list_profiles_spec.rb +30 -2
- data/spec/integration/knife/config_use_profile_spec.rb +55 -2
- data/spec/integration/knife/cookbook_upload_spec.rb +28 -1
- data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
- data/spec/integration/knife/environment_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_from_file_spec.rb +1 -1
- data/spec/integration/knife/role_from_file_spec.rb +1 -1
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/notifying_block_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +5 -1
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +2 -0
- data/spec/integration/recipes/resource_load_spec.rb +4 -2
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +1 -1
- data/spec/scripts/ssl-serve.rb +1 -1
- data/spec/spec_helper.rb +10 -4
- data/spec/support/chef_helpers.rb +2 -21
- data/spec/support/platform_helpers.rb +1 -3
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/file_resource.rb +0 -1
- data/spec/support/shared/functional/securable_resource.rb +1 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/windows_script.rb +3 -3
- data/spec/support/shared/integration/knife_support.rb +2 -9
- data/spec/support/shared/unit/application_dot_d.rb +0 -1
- data/spec/support/shared/unit/execute_resource.rb +1 -1
- data/spec/support/shared/unit/provider/file.rb +12 -8
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
- data/spec/unit/application/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +11 -2
- data/spec/unit/chef_fs/config_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +8 -8
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +2 -4
- data/spec/unit/chef_fs/{parallelizer.rb → parallelizer_spec.rb} +1 -1
- data/spec/unit/client_spec.rb +4 -1
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/data_collector_spec.rb +1 -1
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/environment_spec.rb +5 -1
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/guard_interpreter_spec.rb +1 -1
- data/spec/unit/http/api_versions_spec.rb +1 -1
- data/spec/unit/http/ssl_policies_spec.rb +20 -0
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +5 -8
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- data/spec/unit/knife/cookbook_upload_spec.rb +7 -10
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
- data/spec/unit/log/syslog_spec.rb +6 -10
- data/spec/unit/log/winevt_spec.rb +21 -13
- data/spec/unit/lwrp_spec.rb +9 -6
- data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
- data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
- data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
- data/spec/unit/mixin/powershell_out_spec.rb +2 -4
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +0 -1
- data/spec/unit/mixin/shell_out_spec.rb +25 -26
- data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
- data/spec/unit/mixin/unformatter_spec.rb +2 -2
- data/spec/unit/mixin/uris_spec.rb +1 -1
- data/spec/unit/mixin/user_context_spec.rb +1 -9
- data/spec/unit/mixin/which.rb +8 -0
- data/spec/unit/node/attribute_spec.rb +1 -1
- data/spec/unit/node_spec.rb +98 -11
- data/spec/unit/property_spec.rb +6 -6
- data/spec/unit/provider/batch_spec.rb +130 -0
- data/spec/unit/provider/cron/unix_spec.rb +1 -1
- data/spec/unit/provider/cron_spec.rb +9 -49
- data/spec/unit/provider/dsc_resource_spec.rb +22 -38
- data/spec/unit/provider/dsc_script_spec.rb +10 -10
- data/spec/unit/provider/execute_spec.rb +1 -8
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/ifconfig_spec.rb +0 -1
- data/spec/unit/provider/mdadm_spec.rb +1 -3
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +1 -1
- data/spec/unit/provider/package/openbsd_spec.rb +1 -1
- data/spec/unit/provider/package/pacman_spec.rb +17 -20
- data/spec/unit/provider/package/portage_spec.rb +2 -2
- data/spec/unit/provider/package/powershell_spec.rb +96 -87
- data/spec/unit/provider/package/rubygems_spec.rb +5 -10
- data/spec/unit/provider/package/smartos_spec.rb +1 -1
- data/spec/unit/provider/package/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
- data/spec/unit/provider/package/windows_spec.rb +30 -53
- data/spec/unit/provider/powershell_script_spec.rb +3 -45
- data/spec/unit/provider/script_spec.rb +20 -110
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/windows_spec.rb +2 -6
- data/spec/unit/provider/systemd_unit_spec.rb +28 -24
- data/spec/unit/provider/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/windows_env_spec.rb +5 -4
- data/spec/unit/provider/zypper_repository_spec.rb +60 -10
- data/spec/unit/provider_spec.rb +1 -0
- data/spec/unit/resource/archive_file_spec.rb +11 -2
- data/spec/unit/resource/chef_client_cron_spec.rb +23 -7
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
- data/spec/unit/resource/cron_spec.rb +2 -2
- data/spec/unit/resource/execute_spec.rb +10 -0
- data/spec/unit/resource/file/verification_spec.rb +2 -1
- data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
- data/spec/unit/resource/homebrew_update_spec.rb +30 -0
- data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
- data/spec/unit/resource/powershell_script_spec.rb +10 -15
- data/spec/unit/resource/timezone_spec.rb +1 -1
- data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- data/spec/unit/resource/windows_firewall_profile_spec.rb +77 -0
- data/spec/unit/resource/windows_package_spec.rb +1 -0
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_reporter_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +84 -1
- data/spec/unit/role_spec.rb +23 -21
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_lock_spec.rb +1 -1
- data/spec/unit/scan_access_control_spec.rb +1 -1
- data/spec/unit/util/backup_spec.rb +1 -1
- data/spec/unit/util/diff_spec.rb +1 -15
- data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
- data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +2 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
- data/spec/unit/win32/registry_spec.rb +1 -1
- data/spec/unit/win32/security_spec.rb +4 -3
- metadata +68 -40
- data/lib/chef/resource/cron.rb +0 -157
data/lib/chef/resource.rb
CHANGED
@@ -451,6 +451,17 @@ class Chef
|
|
451
451
|
description: "Determines whether or not the resource is executed during the compile time phase.",
|
452
452
|
default: false, desired_state: false
|
453
453
|
|
454
|
+
# Set a umask to be used for the duration of converging the resource.
|
455
|
+
# Defaults to `nil`, which means to use the system umask.
|
456
|
+
#
|
457
|
+
# @param arg [String] The umask to apply while converging the resource.
|
458
|
+
# @return [Boolean] The umask to apply while converging the resource.
|
459
|
+
#
|
460
|
+
property :umask, String,
|
461
|
+
desired_state: false,
|
462
|
+
introduced: "16.2",
|
463
|
+
description: "Set a umask to be used for the duration of converging the resource. Defaults to `nil`, which means to use the system umask. Unsupported on Windows because Windows lacks a direct equivalent to UNIX's umask."
|
464
|
+
|
454
465
|
# The time it took (in seconds) to run the most recently-run action. Not
|
455
466
|
# cumulative across actions. This is set to 0 as soon as a new action starts
|
456
467
|
# running, and set to the elapsed time at the end of the action.
|
@@ -588,7 +599,9 @@ class Chef
|
|
588
599
|
begin
|
589
600
|
return if should_skip?(action)
|
590
601
|
|
591
|
-
|
602
|
+
with_umask do
|
603
|
+
provider_for_action(action).run_action
|
604
|
+
end
|
592
605
|
rescue StandardError => e
|
593
606
|
if ignore_failure
|
594
607
|
logger.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
|
@@ -612,12 +625,20 @@ class Chef
|
|
612
625
|
events.resource_completed(self)
|
613
626
|
end
|
614
627
|
|
628
|
+
def with_umask
|
629
|
+
old_value = ::File.umask(umask.oct) if umask
|
630
|
+
yield
|
631
|
+
ensure
|
632
|
+
::File.umask(old_value) if umask
|
633
|
+
end
|
634
|
+
|
615
635
|
#
|
616
636
|
# If we are currently initializing the resource, this will be true.
|
617
637
|
#
|
618
638
|
# Do NOT use this. It may be removed. It is for internal purposes only.
|
619
639
|
# @api private
|
620
640
|
attr_reader :resource_initializing
|
641
|
+
|
621
642
|
def resource_initializing=(value)
|
622
643
|
if value
|
623
644
|
@resource_initializing = true
|
@@ -868,6 +889,7 @@ class Chef
|
|
868
889
|
# have.
|
869
890
|
#
|
870
891
|
attr_writer :allowed_actions
|
892
|
+
|
871
893
|
def allowed_actions(value = NOT_PASSED)
|
872
894
|
if value != NOT_PASSED
|
873
895
|
self.allowed_actions = value
|
@@ -930,7 +952,7 @@ class Chef
|
|
930
952
|
end
|
931
953
|
|
932
954
|
#
|
933
|
-
# A hook called after a resource is created. Meant to be
|
955
|
+
# A hook called after a resource is created. Meant to be overridden by
|
934
956
|
# subclasses.
|
935
957
|
#
|
936
958
|
def after_created
|
@@ -950,16 +972,7 @@ class Chef
|
|
950
972
|
def self.resource_name(name = NOT_PASSED)
|
951
973
|
# Setter
|
952
974
|
if name != NOT_PASSED
|
953
|
-
|
954
|
-
@resource_name = name.to_sym
|
955
|
-
name = name.to_sym
|
956
|
-
# FIXME: determine a way to deprecate this magic behavior
|
957
|
-
unless Chef::ResourceResolver.includes_handler?(name, self)
|
958
|
-
provides name
|
959
|
-
end
|
960
|
-
else
|
961
|
-
@resource_name = nil
|
962
|
-
end
|
975
|
+
@resource_name = name.to_sym rescue nil
|
963
976
|
end
|
964
977
|
|
965
978
|
@resource_name = nil unless defined?(@resource_name)
|
@@ -1114,7 +1127,7 @@ class Chef
|
|
1114
1127
|
# `action_class` method, the presence of either indicates that this is
|
1115
1128
|
# going to be a Chef-12.5 custom resource. If we never see one of these
|
1116
1129
|
# directives then we are constructing an old-style Resource+Provider or
|
1117
|
-
# LWRP or
|
1130
|
+
# LWRP or whatever.
|
1118
1131
|
#
|
1119
1132
|
# If a block is passed, the action_class is always created and the block is
|
1120
1133
|
# run inside it.
|
@@ -1327,7 +1340,7 @@ class Chef
|
|
1327
1340
|
# Once we no longer care about supporting chef < 14.4 then we can deprecate
|
1328
1341
|
# this API.
|
1329
1342
|
#
|
1330
|
-
# @param arg [String] version
|
1343
|
+
# @param arg [String] version constraint to match against (e.g. "> 14")
|
1331
1344
|
#
|
1332
1345
|
def self.chef_version_for_provides(constraint)
|
1333
1346
|
@chef_version_for_provides = constraint
|
@@ -89,7 +89,7 @@ class Chef
|
|
89
89
|
description: "The path to the alternatives link."
|
90
90
|
|
91
91
|
property :path, String,
|
92
|
-
description: "The
|
92
|
+
description: "The absolute path to the original application binary such as `/usr/bin/ruby27`."
|
93
93
|
|
94
94
|
property :priority, [String, Integer],
|
95
95
|
coerce: proc { |n| n.to_i },
|
@@ -19,6 +19,7 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
require_relative "../resource"
|
22
|
+
require "fileutils" unless defined?(FileUtils)
|
22
23
|
|
23
24
|
class Chef
|
24
25
|
class Resource
|
@@ -39,6 +40,18 @@ class Chef
|
|
39
40
|
destination '/srv/files'
|
40
41
|
end
|
41
42
|
```
|
43
|
+
|
44
|
+
**Set specific permissions on the extracted files**:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
archive_file 'Precompiled.zip' do
|
48
|
+
owner 'tsmith'
|
49
|
+
group 'staff'
|
50
|
+
mode '700'
|
51
|
+
path '/tmp/Precompiled.zip'
|
52
|
+
destination '/srv/files'
|
53
|
+
end
|
54
|
+
```
|
42
55
|
DOC
|
43
56
|
|
44
57
|
property :path, String,
|
@@ -53,7 +66,7 @@ class Chef
|
|
53
66
|
description: "The group of the extracted files."
|
54
67
|
|
55
68
|
property :mode, [String, Integer],
|
56
|
-
description: "The mode of the extracted files.",
|
69
|
+
description: "The mode of the extracted files. Integer values are deprecated as octal values (ex. 0755) would not be interpreted correctly.",
|
57
70
|
default: "755"
|
58
71
|
|
59
72
|
property :destination, String,
|
@@ -72,11 +85,11 @@ class Chef
|
|
72
85
|
alias_method :extract_options, :options
|
73
86
|
alias_method :extract_to, :destination
|
74
87
|
|
75
|
-
require "fileutils" unless defined?(FileUtils)
|
76
|
-
|
77
88
|
action :extract do
|
78
89
|
description "Extract and archive file."
|
79
90
|
|
91
|
+
require_libarchive
|
92
|
+
|
80
93
|
unless ::File.exist?(new_resource.path)
|
81
94
|
raise Errno::ENOENT, "No archive found at #{new_resource.path}! Cannot continue."
|
82
95
|
end
|
@@ -85,7 +98,8 @@ class Chef
|
|
85
98
|
Chef::Log.trace("File or directory does not exist at destination path: #{new_resource.destination}")
|
86
99
|
|
87
100
|
converge_by("create directory #{new_resource.destination}") do
|
88
|
-
|
101
|
+
# @todo when we remove the ability for mode to be an int we can remove the .to_s below
|
102
|
+
FileUtils.mkdir_p(new_resource.destination, mode: new_resource.mode.to_s.to_i(8))
|
89
103
|
end
|
90
104
|
|
91
105
|
extract(new_resource.path, new_resource.destination, Array(new_resource.options))
|
@@ -113,6 +127,16 @@ class Chef
|
|
113
127
|
end
|
114
128
|
|
115
129
|
action_class do
|
130
|
+
def require_libarchive
|
131
|
+
require "ffi-libarchive"
|
132
|
+
end
|
133
|
+
|
134
|
+
def define_resource_requirements
|
135
|
+
if new_resource.mode.is_a?(Integer)
|
136
|
+
Chef.deprecated(:archive_file_integer_file_mode, "The mode property should be passed to archive_file resources as a String and not an Integer to ensure the value is properly interpreted.")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
116
140
|
# This can't be a constant since we might not have required 'ffi-libarchive' yet.
|
117
141
|
def extract_option_map
|
118
142
|
{
|
@@ -136,8 +160,6 @@ class Chef
|
|
136
160
|
#
|
137
161
|
# @return [Boolean]
|
138
162
|
def archive_differs_from_disk?(src, dest)
|
139
|
-
require "ffi-libarchive"
|
140
|
-
|
141
163
|
modified = false
|
142
164
|
Dir.chdir(dest) do
|
143
165
|
archive = Archive::Reader.open_filename(src)
|
@@ -164,8 +186,6 @@ class Chef
|
|
164
186
|
#
|
165
187
|
# @return [void]
|
166
188
|
def extract(src, dest, options = [])
|
167
|
-
require "ffi-libarchive"
|
168
|
-
|
169
189
|
converge_by("extract #{src} to #{dest}") do
|
170
190
|
flags = [options].flatten.map { |option| extract_option_map[option] }.compact.reduce(:|)
|
171
191
|
|
data/lib/chef/resource/bash.rb
CHANGED
data/lib/chef/resource/batch.rb
CHANGED
@@ -27,8 +27,10 @@ class Chef
|
|
27
27
|
|
28
28
|
description "Use the **batch** resource to execute a batch script using the cmd.exe interpreter on Windows. The batch resource creates and executes a temporary file (similar to how the script resource behaves), rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use not_if and only_if to guard this resource for idempotence."
|
29
29
|
|
30
|
-
def initialize(
|
31
|
-
super
|
30
|
+
def initialize(*args)
|
31
|
+
super
|
32
|
+
@interpreter = "cmd.exe"
|
33
|
+
@default_guard_interpreter = resource_name
|
32
34
|
end
|
33
35
|
|
34
36
|
end
|
@@ -146,8 +146,8 @@ class Chef
|
|
146
146
|
def install_xcode_cli_tools(label)
|
147
147
|
# This script was graciously borrowed and modified from Tim Sutton's
|
148
148
|
# osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
|
149
|
-
|
150
|
-
|
149
|
+
bash "install Xcode Command Line Tools" do
|
150
|
+
code <<-EOH
|
151
151
|
# create the placeholder file that's checked by CLI updates' .dist code
|
152
152
|
# in Apple's SUS catalog
|
153
153
|
touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
|
@@ -48,6 +48,16 @@ class Chef
|
|
48
48
|
daemon_options ["--override-runlist mycorp_base::default"]
|
49
49
|
end
|
50
50
|
```
|
51
|
+
|
52
|
+
**Run #{Chef::Dist::PRODUCT} daily at 01:00 am, specifying a named run-list**:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
chef_client_scheduled_task "Run chef-client named run-list daily" do
|
56
|
+
frequency 'daily'
|
57
|
+
start_time '01:00'
|
58
|
+
daemon_options ['-n audit_only']
|
59
|
+
end
|
60
|
+
```
|
51
61
|
DOC
|
52
62
|
|
53
63
|
resource_name :chef_client_scheduled_task
|
@@ -72,7 +82,8 @@ class Chef
|
|
72
82
|
coerce: proc { |x| Integer(x) },
|
73
83
|
callbacks: { "should be a positive number" => proc { |v| v > 0 } },
|
74
84
|
description: "Numeric value to go with the scheduled task frequency",
|
75
|
-
default: 30
|
85
|
+
default: lazy { frequency == "minute" ? 30 : 1 },
|
86
|
+
default_description: "30 if frequency is 'minute', 1 otherwise"
|
76
87
|
|
77
88
|
property :accept_chef_license, [true, false],
|
78
89
|
description: "Accept the Chef Online Master License and Services Agreement. See <https://www.chef.io/online-master-agreement/>",
|
@@ -129,6 +140,7 @@ class Chef
|
|
129
140
|
|
130
141
|
# According to https://docs.microsoft.com/en-us/windows/desktop/taskschd/schtasks,
|
131
142
|
# the :once, :onstart, :onlogon, and :onidle schedules don't accept schedule modifiers
|
143
|
+
|
132
144
|
windows_task new_resource.task_name do
|
133
145
|
run_level :highest
|
134
146
|
command full_command
|
@@ -160,7 +172,7 @@ class Chef
|
|
160
172
|
# Fetch path of cmd.exe through environment variable comspec
|
161
173
|
cmd_path = ENV["COMSPEC"]
|
162
174
|
|
163
|
-
"#{cmd_path} /c \
|
175
|
+
"#{cmd_path} /c \"#{client_cmd}\""
|
164
176
|
end
|
165
177
|
|
166
178
|
# Build command line to pass to cmd.exe
|
@@ -22,26 +22,59 @@ require_relative "../dist"
|
|
22
22
|
|
23
23
|
class Chef
|
24
24
|
class Resource
|
25
|
-
# Use the chef_gem resource to install a gem only for the instance of Ruby that is dedicated to the chef-client.
|
26
|
-
# When a gem is installed from a local file, it must be added to the node using the remote_file or cookbook_file
|
27
|
-
# resources.
|
28
|
-
#
|
29
|
-
# The chef_gem resource works with all of the same properties and options as the gem_package resource, but does not
|
30
|
-
# accept the gem_binary property because it always uses the CurrentGemEnvironment under which the chef-client is
|
31
|
-
# running. In addition to performing actions similar to the gem_package resource, the chef_gem resource does the
|
32
|
-
# following:
|
33
|
-
# - Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is
|
34
|
-
# installed
|
35
|
-
# - Runs Gem.clear_paths after the action, ensuring that gem is aware of changes so that it can be required
|
36
|
-
# immediately after it is installed
|
37
|
-
|
38
|
-
require_relative "gem_package"
|
39
|
-
require_relative "../dist"
|
40
|
-
|
41
25
|
class ChefGem < Chef::Resource::Package::GemPackage
|
42
26
|
unified_mode true
|
43
27
|
provides :chef_gem
|
44
28
|
|
29
|
+
description <<~DESC
|
30
|
+
Use the **chef_gem** resource to install a gem only for the instance of Ruby that is dedicated to the #{Chef::Dist::CLIENT}.
|
31
|
+
When a gem is installed from a local file, it must be added to the node using the **remote_file** or **cookbook_file** resources.
|
32
|
+
|
33
|
+
The **chef_gem** resource works with all of the same properties and options as the **gem_package** resource, but does not
|
34
|
+
accept the `gem_binary` property because it always uses the `CurrentGemEnvironment` under which the `#{Chef::Dist::CLIENT}` is
|
35
|
+
running. In addition to performing actions similar to the **gem_package** resource, the **chef_gem** resource does the
|
36
|
+
following:
|
37
|
+
- Runs its actions immediately, before convergence, allowing a gem to be used in a recipe immediately after it is installed.
|
38
|
+
- Runs `Gem.clear_paths` after the action, ensuring that gem is aware of changes so that it can be required immediately after it is installed.
|
39
|
+
|
40
|
+
Warning: The **chef_gem** and **gem_package** resources are both used to install Ruby gems. For any machine on which #{Chef::Dist::PRODUCT} is
|
41
|
+
installed, there are two instances of Ruby. One is the standard, system-wide instance of Ruby and the other is a dedicated instance that is
|
42
|
+
available only to #{Chef::Dist::PRODUCT}.
|
43
|
+
Use the **chef_gem** resource to install gems into the instance of Ruby that is dedicated to #{Chef::Dist::PRODUCT}.
|
44
|
+
Use the **gem_package** resource to install all other gems (i.e. install gems system-wide).
|
45
|
+
DESC
|
46
|
+
|
47
|
+
examples <<~EXAMPLES
|
48
|
+
**Compile time vs. converge time installation of gems**
|
49
|
+
|
50
|
+
To install a gem while #{Chef::Dist::PRODUCT} is configuring the node (the converge phase), set the `compile_time` property to `false`:
|
51
|
+
```ruby
|
52
|
+
chef_gem 'right_aws' do
|
53
|
+
compile_time false
|
54
|
+
action :install
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
To install a gem while the resource collection is being built (the compile phase), set the `compile_time` property to `true`:
|
59
|
+
```ruby
|
60
|
+
chef_gem 'right_aws' do
|
61
|
+
compile_time true
|
62
|
+
action :install
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Install MySQL for Chef
|
67
|
+
```ruby
|
68
|
+
apt_update
|
69
|
+
|
70
|
+
build_essential 'install compilation tools' do
|
71
|
+
compile_time true
|
72
|
+
end
|
73
|
+
|
74
|
+
chef_gem 'mysql'
|
75
|
+
```
|
76
|
+
EXAMPLES
|
77
|
+
|
45
78
|
property :package_name, String,
|
46
79
|
description: "An optional property to set the package name if it differs from the resource block's name.",
|
47
80
|
identity: true
|
@@ -49,11 +82,14 @@ class Chef
|
|
49
82
|
property :version, String,
|
50
83
|
description: "The version of a package to be installed or upgraded."
|
51
84
|
|
52
|
-
property :gem_binary,
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
85
|
+
property :gem_binary, String,
|
86
|
+
default: "#{RbConfig::CONFIG["bindir"]}/gem",
|
87
|
+
default_description: "The `gem` binary included with #{Chef::Dist::PRODUCT}.",
|
88
|
+
description: "The path of a gem binary to use for the installation. By default, the same version of Ruby that is used by #{Chef::Dist::PRODUCT} will be used.",
|
89
|
+
callbacks: {
|
90
|
+
"The `chef_gem` resource is restricted to the current gem environment, use `gem_package` to install to other environments." =>
|
91
|
+
proc { |v| v == "#{RbConfig::CONFIG["bindir"]}/gem" },
|
92
|
+
}
|
57
93
|
end
|
58
94
|
end
|
59
95
|
end
|
@@ -107,7 +107,7 @@ class Chef
|
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
110
|
-
# Walks down the namespace
|
110
|
+
# Walks down the namespace hierarchy to return the class object for the given class name.
|
111
111
|
# If the class is not available, NameError is thrown.
|
112
112
|
#
|
113
113
|
# @param class_full_name [String] full class name such as 'Chef::Handler::Foo' or 'MyHandler'.
|
@@ -118,7 +118,7 @@ class Chef
|
|
118
118
|
class_name = ancestors.pop
|
119
119
|
|
120
120
|
# We need to search the ancestors only for the first/uppermost namespace of the class, so we
|
121
|
-
# need to enable the #const_get inherit
|
121
|
+
# need to enable the #const_get inherit parameter only when we are searching in Kernel scope
|
122
122
|
# (see COOK-4117).
|
123
123
|
parent = ancestors.inject(Kernel) { |scope, const_name| scope.const_get(const_name, scope === Kernel) }
|
124
124
|
child = parent.const_get(class_name, parent === Kernel)
|
@@ -89,8 +89,7 @@ class Chef
|
|
89
89
|
# @param [String] action the name of the action to perform
|
90
90
|
# @return [String] the choco feature command string
|
91
91
|
def choco_cmd(action)
|
92
|
-
|
93
|
-
cmd
|
92
|
+
"#{ENV["ALLUSERSPROFILE"]}\\chocolatey\\bin\\choco feature #{action} --name #{new_resource.feature_name}"
|
94
93
|
end
|
95
94
|
end
|
96
95
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
unified_mode true
|
2
|
+
|
3
|
+
TIMEOUT_OPTS = %w{duration preserve-status foreground kill-after signal}.freeze
|
4
|
+
TIMEOUT_REGEX = /\A\S+/.freeze
|
5
|
+
WEEKDAYS = {
|
6
|
+
sunday: "0", monday: "1", tuesday: "2", wednesday: "3", thursday: "4", friday: "5", saturday: "6",
|
7
|
+
sun: "0", mon: "1", tue: "2", wed: "3", thu: "4", fri: "5", sat: "6"
|
8
|
+
}.freeze
|
9
|
+
|
10
|
+
property :minute, [Integer, String],
|
11
|
+
description: "The minute at which the cron entry should run (`0 - 59`).",
|
12
|
+
default: "*", callbacks: {
|
13
|
+
"should be a valid minute spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 59) },
|
14
|
+
}
|
15
|
+
|
16
|
+
property :hour, [Integer, String],
|
17
|
+
description: "The hour at which the cron entry is to run (`0 - 23`).",
|
18
|
+
default: "*", callbacks: {
|
19
|
+
"should be a valid hour spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 0, 23) },
|
20
|
+
}
|
21
|
+
|
22
|
+
property :day, [Integer, String],
|
23
|
+
description: "The day of month at which the cron entry should run (`1 - 31`).",
|
24
|
+
default: "*", callbacks: {
|
25
|
+
"should be a valid day spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_numeric(spec, 1, 31) },
|
26
|
+
}
|
27
|
+
|
28
|
+
property :month, [Integer, String],
|
29
|
+
description: "The month in the year on which a cron entry is to run (`1 - 12`, `jan-dec`, or `*`).",
|
30
|
+
default: "*", callbacks: {
|
31
|
+
"should be a valid month spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_month(spec) },
|
32
|
+
}
|
33
|
+
|
34
|
+
property :weekday, [Integer, String, Symbol],
|
35
|
+
description: "The day of the week on which this entry is to run (`0-7`, `mon-sun`, `monday-sunday`, or `*`), where Sunday is both `0` and `7`.",
|
36
|
+
default: "*", coerce: proc { |day| weekday_in_crontab(day) },
|
37
|
+
callbacks: {
|
38
|
+
"should be a valid weekday spec" => ->(spec) { Chef::ResourceHelpers::CronValidations.validate_dow(spec) },
|
39
|
+
}
|
40
|
+
|
41
|
+
property :shell, String,
|
42
|
+
description: "Set the `SHELL` environment variable."
|
43
|
+
|
44
|
+
property :path, String,
|
45
|
+
description: "Set the `PATH` environment variable."
|
46
|
+
|
47
|
+
property :home, String,
|
48
|
+
description: "Set the `HOME` environment variable."
|
49
|
+
|
50
|
+
property :mailto, String,
|
51
|
+
description: "Set the `MAILTO` environment variable."
|
52
|
+
|
53
|
+
property :command, String,
|
54
|
+
description: "The command to be run, or the path to a file that contains the command to be run.",
|
55
|
+
identity: true,
|
56
|
+
required: [:create]
|
57
|
+
|
58
|
+
property :user, String,
|
59
|
+
description: "The name of the user that runs the command.",
|
60
|
+
default: "root"
|
61
|
+
|
62
|
+
property :environment, Hash,
|
63
|
+
description: "A Hash containing additional arbitrary environment variables under which the cron job will be run in the form of `({'ENV_VARIABLE' => 'VALUE'})`. **Note**: These variables must exist for a command to be run successfully.",
|
64
|
+
default: lazy { {} }
|
65
|
+
|
66
|
+
property :time_out, Hash,
|
67
|
+
description: "A Hash of timeouts in the form of `({'OPTION' => 'VALUE'})`. Accepted valid options are:
|
68
|
+
- `preserve-status` (BOOL, default: 'false'),
|
69
|
+
- `foreground` (BOOL, default: 'false'),
|
70
|
+
- `kill-after` (in seconds),
|
71
|
+
- `signal` (a name like 'HUP' or a number)",
|
72
|
+
default: lazy { {} },
|
73
|
+
introduced: "15.7",
|
74
|
+
coerce: proc { |h|
|
75
|
+
if h.is_a?(Hash)
|
76
|
+
invalid_keys = h.keys - TIMEOUT_OPTS
|
77
|
+
unless invalid_keys.empty?
|
78
|
+
error_msg = "Key of option time_out must be equal to one of: \"#{TIMEOUT_OPTS.join('", "')}\"! You passed \"#{invalid_keys.join(", ")}\"."
|
79
|
+
raise Chef::Exceptions::ValidationFailed, error_msg
|
80
|
+
end
|
81
|
+
unless h.values.all? { |x| x =~ TIMEOUT_REGEX }
|
82
|
+
error_msg = "Values of option time_out should be non-empty strings without any leading whitespace."
|
83
|
+
raise Chef::Exceptions::ValidationFailed, error_msg
|
84
|
+
end
|
85
|
+
h
|
86
|
+
elsif h.is_a?(Integer) || h.is_a?(String)
|
87
|
+
{ "duration" => h }
|
88
|
+
end
|
89
|
+
}
|
90
|
+
|
91
|
+
private
|
92
|
+
# Convert weekday input value into crontab format that
|
93
|
+
# could be written in the crontab
|
94
|
+
# @return [Integer, String] A weekday formed as per the user inputs.
|
95
|
+
def weekday_in_crontab(day)
|
96
|
+
weekday = day.to_s.downcase.to_sym
|
97
|
+
WEEKDAYS[weekday] || day
|
98
|
+
end
|