chef 16.1.0-universal-mingw32 → 16.3.38-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -38,7 +38,7 @@ class Chef
|
|
38
38
|
def define_resource_requirements
|
39
39
|
if new_resource.checksum
|
40
40
|
requirements.assert(:install) do |a|
|
41
|
-
a.assertion { new_resource.checksum
|
41
|
+
a.assertion { new_resource.checksum == checksum(source_location) }
|
42
42
|
a.failure_message Chef::Exceptions::Package, "Checksum on resource (#{short_cksum(new_resource.checksum)}) does not match checksum on content (#{short_cksum(source_location)})"
|
43
43
|
end
|
44
44
|
end
|
@@ -169,7 +169,7 @@ class Chef
|
|
169
169
|
# is not multipackage. The existing implementation of package_provider.installed_version should probably
|
170
170
|
# be what `uninstall_version_array` is, and then that list should be sorted and last/first'd into the
|
171
171
|
# current_resource.version. The current_version_array method was not intended to be overwritten by
|
172
|
-
#
|
172
|
+
# subclasses (but ruby provides no feature to block doing so -- it is already marked as private).
|
173
173
|
#
|
174
174
|
def current_version_array
|
175
175
|
[ current_resource.version ]
|
@@ -242,22 +242,27 @@ class Chef
|
|
242
242
|
end
|
243
243
|
|
244
244
|
def download_source_file
|
245
|
+
source_resource.run_action(:create)
|
246
|
+
logger.trace("#{new_resource} fetched source file to #{default_download_cache_path}")
|
247
|
+
end
|
248
|
+
|
249
|
+
def source_resource
|
245
250
|
# It seems correct that this is a build_resource rather than declare_resource/DSL use since updating should not trigger a notification
|
246
251
|
# unless the downloaded file is actually installed. The case where the remote_file downloads the package but the package is already
|
247
252
|
# installed on the target should not trigger a notification since the running state did not change.
|
248
|
-
build_resource(:remote_file, default_download_cache_path) do
|
253
|
+
@source_resource ||= build_resource(:remote_file, default_download_cache_path) do
|
249
254
|
source(new_resource.source)
|
250
255
|
cookbook_name = new_resource.cookbook_name
|
251
256
|
checksum(new_resource.checksum)
|
252
257
|
backup(false)
|
253
258
|
|
259
|
+
# since the source_resource can mutate here, we save off the @source_resource so we can inspect the actual state later
|
254
260
|
if new_resource.remote_file_attributes
|
255
261
|
new_resource.remote_file_attributes.each do |(k, v)|
|
256
262
|
send(k.to_sym, v)
|
257
263
|
end
|
258
264
|
end
|
259
|
-
end
|
260
|
-
logger.trace("#{new_resource} fetched source file to #{default_download_cache_path}")
|
265
|
+
end
|
261
266
|
end
|
262
267
|
|
263
268
|
def default_download_cache_path
|
@@ -271,7 +276,7 @@ class Chef
|
|
271
276
|
if new_resource.source.nil?
|
272
277
|
nil
|
273
278
|
elsif uri_scheme?(new_resource.source)
|
274
|
-
|
279
|
+
source_resource.path
|
275
280
|
else
|
276
281
|
new_source = Chef::Util::PathHelper.cleanpath(new_resource.source)
|
277
282
|
::File.exist?(new_source) ? new_source : nil
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
# TODO: Allow new_resource.source to be a Product Code as a GUID for uninstall / network install
|
20
20
|
|
21
|
-
require_relative "../../../win32/api/installer" if RUBY_PLATFORM
|
21
|
+
require_relative "../../../win32/api/installer" if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
|
22
22
|
require_relative "../../../mixin/shell_out"
|
23
23
|
|
24
24
|
class Chef
|
@@ -26,7 +26,7 @@ class Chef
|
|
26
26
|
class Package
|
27
27
|
class Windows
|
28
28
|
class MSI
|
29
|
-
include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM
|
29
|
+
include Chef::ReservedNames::Win32::API::Installer if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
|
30
30
|
include Chef::Mixin::ShellOut
|
31
31
|
|
32
32
|
def initialize(resource, uninstall_entries)
|
@@ -84,7 +84,7 @@ class Chef
|
|
84
84
|
.map(&:uninstall_string).uniq.each do |uninstall_string|
|
85
85
|
uninstall_string = "msiexec /x #{uninstall_string.match(/{.*}/)}"
|
86
86
|
uninstall_string += expand_options(new_resource.options)
|
87
|
-
uninstall_string += " /q" unless
|
87
|
+
uninstall_string += " /q" unless %r{ /q}.match?(uninstall_string.downcase)
|
88
88
|
logger.trace("#{new_resource} removing MSI package version using '#{uninstall_string}'")
|
89
89
|
shell_out!(uninstall_string, default_env: false, timeout: new_resource.timeout, returns: new_resource.returns)
|
90
90
|
end
|
@@ -100,7 +100,7 @@ class Chef
|
|
100
100
|
|
101
101
|
# If this is a package like the kernel that can be installed multiple times, we'll skip over this logic
|
102
102
|
if new_resource.allow_downgrade && version_gt?(iv.version_with_arch, av.version_with_arch) && !python_helper.install_only_packages(name)
|
103
|
-
# We allow downgrading only in the
|
103
|
+
# We allow downgrading only in the event of single-package
|
104
104
|
# rules where the user explicitly allowed it
|
105
105
|
method = "downgrade"
|
106
106
|
end
|
@@ -22,7 +22,7 @@ require "singleton" unless defined?(Singleton)
|
|
22
22
|
|
23
23
|
#
|
24
24
|
# These are largely historical APIs, the YumCache object no longer exists and this is a
|
25
|
-
#
|
25
|
+
# facade over the python helper class. It should be considered deprecated-lite and
|
26
26
|
# no new APIs should be added and should be added to the python_helper instead.
|
27
27
|
#
|
28
28
|
|
@@ -26,19 +26,12 @@ class Chef
|
|
26
26
|
|
27
27
|
provides :powershell_script
|
28
28
|
|
29
|
-
def initialize(new_resource, run_context)
|
30
|
-
super(new_resource, run_context, ".ps1")
|
31
|
-
add_exit_status_wrapper
|
32
|
-
end
|
33
|
-
|
34
29
|
action :run do
|
35
30
|
validate_script_syntax!
|
36
31
|
super()
|
37
32
|
end
|
38
33
|
|
39
34
|
def command
|
40
|
-
basepath = is_forced_32bit ? wow64_directory : run_context.node["kernel"]["os_info"]["system_directory"]
|
41
|
-
|
42
35
|
# Powershell.exe is always in "v1.0" folder (for backwards compatibility)
|
43
36
|
interpreter_path = Chef::Util::PathHelper.join(basepath, "WindowsPowerShell", "v1.0", interpreter)
|
44
37
|
|
@@ -48,21 +41,19 @@ class Chef
|
|
48
41
|
# error status of a failed Windows process that ran at the
|
49
42
|
# end of the script, it gets changed to '1'.
|
50
43
|
#
|
51
|
-
"\"#{interpreter_path}\" #{new_resource.flags} -File \"#{
|
44
|
+
"\"#{interpreter_path}\" #{new_resource.flags} -File \"#{script_file_path}\""
|
52
45
|
end
|
53
46
|
|
54
47
|
protected
|
55
48
|
|
56
|
-
|
57
|
-
|
58
|
-
def add_exit_status_wrapper
|
59
|
-
self.code = wrapper_script
|
49
|
+
def code
|
50
|
+
code = wrapper_script
|
60
51
|
logger.trace("powershell_script provider called with script code:\n\n#{new_resource.code}\n")
|
61
52
|
logger.trace("powershell_script provider will execute transformed code:\n\n#{code}\n")
|
53
|
+
code
|
62
54
|
end
|
63
55
|
|
64
56
|
def validate_script_syntax!
|
65
|
-
interpreter_arguments = new_resource.flags
|
66
57
|
Tempfile.open(["chef_powershell_script-user-code", ".ps1"]) do |user_script_file|
|
67
58
|
# Wrap the user's code in a PowerShell script block so that
|
68
59
|
# it isn't executed. However, syntactically invalid script
|
@@ -80,7 +71,7 @@ class Chef
|
|
80
71
|
# written to the file system at this point, which is required since
|
81
72
|
# the intent is to execute the code just written to it.
|
82
73
|
user_script_file.close
|
83
|
-
validation_command = "\"#{interpreter}\" #{
|
74
|
+
validation_command = "\"#{interpreter}\" #{new_resource.flags} -Command \". '#{user_script_file.path}'\""
|
84
75
|
|
85
76
|
# Note that other script providers like bash allow syntax errors
|
86
77
|
# to be suppressed by setting 'returns' to a value that the
|
@@ -99,6 +90,8 @@ class Chef
|
|
99
90
|
end
|
100
91
|
end
|
101
92
|
|
93
|
+
# Process exit codes are strange with PowerShell and require
|
94
|
+
# special handling to cover common use cases.
|
102
95
|
# A wrapper script is used to launch user-supplied script while
|
103
96
|
# still obtaining useful process exit codes. Unless you
|
104
97
|
# explicitly call exit in PowerShell, the powershell.exe
|
@@ -182,6 +175,9 @@ class Chef
|
|
182
175
|
EOH
|
183
176
|
end
|
184
177
|
|
178
|
+
def script_extension
|
179
|
+
".ps1"
|
180
|
+
end
|
185
181
|
end
|
186
182
|
end
|
187
183
|
end
|
@@ -147,7 +147,7 @@ class Chef
|
|
147
147
|
new_resource.updated_by_last_action(true) if res.updated?
|
148
148
|
end
|
149
149
|
|
150
|
-
# Get the files to
|
150
|
+
# Get the files to transfer. This returns files in lexicographical sort order.
|
151
151
|
#
|
152
152
|
# FIXME: it should do breadth-first, see CHEF-5080 (please use a performant sort)
|
153
153
|
#
|
@@ -245,7 +245,7 @@ class Chef
|
|
245
245
|
res = Chef::Resource::Directory.new(dir, run_context)
|
246
246
|
res.cookbook_name = resource_cookbook
|
247
247
|
if ChefUtils.windows? && rights
|
248
|
-
# rights are only meant to be applied to the
|
248
|
+
# rights are only meant to be applied to the most top-level directory;
|
249
249
|
# Windows will handle inheritance.
|
250
250
|
if dir == path
|
251
251
|
rights.each do |r|
|
@@ -130,10 +130,13 @@ class Chef
|
|
130
130
|
# which tricks Chef::REST into decompressing the response body. In this
|
131
131
|
# case you'd end up with a tar archive (no gzip) named, e.g., foo.tgz,
|
132
132
|
# which is not what you wanted.
|
133
|
-
if uri.to_s
|
133
|
+
if /gz$/.match?(uri.to_s)
|
134
134
|
logger.trace("Turning gzip compression off due to filename ending in gz")
|
135
135
|
opts[:disable_gzip] = true
|
136
136
|
end
|
137
|
+
if new_resource.ssl_verify_mode
|
138
|
+
opts[:ssl_verify_mode] = new_resource.ssl_verify_mode
|
139
|
+
end
|
137
140
|
opts
|
138
141
|
end
|
139
142
|
|
data/lib/chef/provider/script.rb
CHANGED
@@ -16,9 +16,7 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
-
require "tempfile" unless defined?(Tempfile)
|
20
19
|
require_relative "execute"
|
21
|
-
require_relative "../win32/security" if ChefUtils.windows?
|
22
20
|
require "forwardable" unless defined?(Forwardable)
|
23
21
|
|
24
22
|
class Chef
|
@@ -34,84 +32,15 @@ class Chef
|
|
34
32
|
provides :ruby
|
35
33
|
provides :script
|
36
34
|
|
37
|
-
def_delegators :new_resource, :interpreter, :flags
|
38
|
-
|
39
|
-
attr_accessor :code
|
40
|
-
|
41
|
-
def initialize(new_resource, run_context)
|
42
|
-
super
|
43
|
-
self.code = new_resource.code
|
44
|
-
end
|
35
|
+
def_delegators :new_resource, :interpreter, :flags, :code
|
45
36
|
|
46
37
|
def command
|
47
|
-
"\"#{interpreter}\" #{flags}
|
48
|
-
end
|
49
|
-
|
50
|
-
def load_current_resource
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
action :run do
|
55
|
-
script_file.puts(code)
|
56
|
-
script_file.close
|
57
|
-
|
58
|
-
set_owner_and_group
|
59
|
-
|
60
|
-
super()
|
61
|
-
|
62
|
-
unlink_script_file
|
63
|
-
end
|
64
|
-
|
65
|
-
def set_owner_and_group
|
66
|
-
if ChefUtils.windows?
|
67
|
-
# And on Windows also this is a no-op if there is no user specified.
|
68
|
-
grant_alternate_user_read_access
|
69
|
-
else
|
70
|
-
# FileUtils itself implements a no-op if +user+ or +group+ are nil
|
71
|
-
# You can prove this by running FileUtils.chown(nil,nil,'/tmp/file')
|
72
|
-
# as an unprivileged user.
|
73
|
-
FileUtils.chown(new_resource.user, new_resource.group, script_file.path)
|
74
|
-
end
|
38
|
+
"\"#{interpreter}\" #{flags}"
|
75
39
|
end
|
76
40
|
|
77
|
-
def
|
78
|
-
|
79
|
-
# will already have the correct permissions for the user as part
|
80
|
-
# of the default ACL behavior on Windows.
|
81
|
-
return if new_resource.user.nil?
|
82
|
-
|
83
|
-
# Duplicate the script file's existing DACL
|
84
|
-
# so we can add an ACE later
|
85
|
-
securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(script_file.path)
|
86
|
-
aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) }
|
87
|
-
|
88
|
-
username = new_resource.user
|
89
|
-
|
90
|
-
if new_resource.domain
|
91
|
-
username = new_resource.domain + '\\' + new_resource.user
|
92
|
-
end
|
93
|
-
|
94
|
-
# Create an ACE that allows the alternate user read access to the script
|
95
|
-
# file so it can be read and executed.
|
96
|
-
user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username)
|
97
|
-
read_ace = Chef::ReservedNames::Win32::Security::ACE.access_allowed(user_sid, Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE, 0)
|
98
|
-
aces.push(read_ace)
|
99
|
-
acl = Chef::ReservedNames::Win32::Security::ACL.create(aces)
|
100
|
-
|
101
|
-
# This actually applies the modified DACL to the file
|
102
|
-
# Use parentheses to bypass RuboCop / ChefStyle warning
|
103
|
-
# about useless setter
|
104
|
-
(securable_object.dacl = acl)
|
41
|
+
def input
|
42
|
+
code
|
105
43
|
end
|
106
|
-
|
107
|
-
def script_file
|
108
|
-
@script_file ||= Tempfile.open("chef-script")
|
109
|
-
end
|
110
|
-
|
111
|
-
def unlink_script_file
|
112
|
-
script_file && script_file.close!
|
113
|
-
end
|
114
|
-
|
115
44
|
end
|
116
45
|
end
|
117
46
|
end
|
@@ -23,8 +23,8 @@ require "chef-utils" unless defined?(ChefUtils::CANARY)
|
|
23
23
|
class Chef
|
24
24
|
class Provider
|
25
25
|
class Service < Chef::Provider
|
26
|
-
include
|
27
|
-
extend
|
26
|
+
include Chef::Platform::ServiceHelpers
|
27
|
+
extend Chef::Platform::ServiceHelpers
|
28
28
|
|
29
29
|
def supports
|
30
30
|
@supports ||= new_resource.supports.dup
|
@@ -33,7 +33,7 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
33
33
|
|
34
34
|
def load_current_resource
|
35
35
|
raise Chef::Exceptions::Service, "Could not find /etc/rc.conf" unless ::File.exists?("/etc/rc.conf")
|
36
|
-
raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless ::File.read("/etc/rc.conf")
|
36
|
+
raise Chef::Exceptions::Service, "No DAEMONS found in /etc/rc.conf" unless /DAEMONS=\((.*)\)/m.match?(::File.read("/etc/rc.conf"))
|
37
37
|
|
38
38
|
super
|
39
39
|
|
@@ -42,7 +42,7 @@ class Chef::Provider::Service::Arch < Chef::Provider::Service::Init
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# Get list of all daemons from the file '/etc/rc.conf'.
|
45
|
-
#
|
45
|
+
# Multiple lines and background form are supported. Example:
|
46
46
|
# DAEMONS=(\
|
47
47
|
# foobar \
|
48
48
|
# @example \
|
@@ -76,9 +76,9 @@ class Chef
|
|
76
76
|
|
77
77
|
in_info = false
|
78
78
|
::File.readlines(path).each_with_object([]) do |line, acc|
|
79
|
-
if
|
79
|
+
if /^### BEGIN INIT INFO/.match?(line)
|
80
80
|
in_info = true
|
81
|
-
elsif
|
81
|
+
elsif /^### END INIT INFO/.match?(line)
|
82
82
|
break acc
|
83
83
|
elsif in_info
|
84
84
|
if line =~ /Default-(Start|Stop):\s+(\d.*)/
|
@@ -91,7 +91,7 @@ class Chef
|
|
91
91
|
old_services_list = rc_conf_local.match(/^pkg_scripts="(.*)"/)
|
92
92
|
old_services_list = old_services_list ? old_services_list[1].split(" ") : []
|
93
93
|
new_services_list = old_services_list + [new_resource.service_name]
|
94
|
-
if
|
94
|
+
if /^pkg_scripts="(.*)"/.match?(rc_conf_local)
|
95
95
|
new_rcl = rc_conf_local.sub(/^pkg_scripts="(.*)"/, "pkg_scripts=\"#{new_services_list.join(" ")}\"")
|
96
96
|
else
|
97
97
|
new_rcl = rc_conf_local + "\n" + "pkg_scripts=\"#{new_services_list.join(" ")}\"\n"
|
@@ -158,7 +158,7 @@ class Chef
|
|
158
158
|
result = false
|
159
159
|
var_name = builtin_service_enable_variable_name
|
160
160
|
if var_name
|
161
|
-
if
|
161
|
+
if /^#{Regexp.escape(var_name)}=(.*)/.match?(rc_conf)
|
162
162
|
result = true
|
163
163
|
end
|
164
164
|
end
|
@@ -170,7 +170,7 @@ class Chef
|
|
170
170
|
var_name = builtin_service_enable_variable_name
|
171
171
|
if var_name
|
172
172
|
if m = rc_conf.match(/^#{Regexp.escape(var_name)}=(.*)/)
|
173
|
-
unless
|
173
|
+
unless /"?[Nn][Oo]"?/.match?(m[1])
|
174
174
|
result = true
|
175
175
|
end
|
176
176
|
end
|
@@ -186,7 +186,7 @@ class Chef
|
|
186
186
|
if var_name
|
187
187
|
if m = rc_conf_local.match(/^#{Regexp.escape(var_name)}=(.*)/)
|
188
188
|
@enabled_state_found = true
|
189
|
-
unless
|
189
|
+
unless /"?[Nn][Oo]"?/.match?(m[1]) # e.g. looking for httpd_flags=NO
|
190
190
|
result = true
|
191
191
|
end
|
192
192
|
end
|
@@ -87,7 +87,7 @@ class Chef
|
|
87
87
|
chkconfig.stdout.split(/\s+/)[1..-1].each do |level|
|
88
88
|
index = level.split(":").first
|
89
89
|
status = level.split(":").last
|
90
|
-
if level
|
90
|
+
if CHKCONFIG_ON.match?(level)
|
91
91
|
@current_run_levels << index.to_i
|
92
92
|
all_levels_match = false unless run_levels.include?(index.to_i)
|
93
93
|
else
|
@@ -41,7 +41,7 @@ class Chef
|
|
41
41
|
|
42
42
|
# Upstart does more than start or stop a service, creating multiple 'states' [1] that a service can be in.
|
43
43
|
# In chef, when we ask a service to start, we expect it to have started before performing the next step
|
44
|
-
# since we have top down dependencies. Which is to say we may follow
|
44
|
+
# since we have top down dependencies. Which is to say we may follow with a resource next that requires
|
45
45
|
# that service to be running. According to [2] we can trust that sending a 'goal' such as start will not
|
46
46
|
# return until that 'goal' is reached, or some error has occurred.
|
47
47
|
#
|
@@ -122,7 +122,7 @@ class Chef
|
|
122
122
|
# If the specified revision is an integer, trust it.
|
123
123
|
def revision_int
|
124
124
|
@revision_int ||= begin
|
125
|
-
if new_resource.revision
|
125
|
+
if /^\d+$/.match?(new_resource.revision)
|
126
126
|
new_resource.revision
|
127
127
|
else
|
128
128
|
command = scm(:info, new_resource.repository, new_resource.svn_info_args, authentication, "-r#{new_resource.revision}")
|
@@ -211,7 +211,7 @@ class Chef
|
|
211
211
|
|
212
212
|
def scm(*args)
|
213
213
|
binary = svn_binary
|
214
|
-
binary = "\"#{binary}\"" if
|
214
|
+
binary = "\"#{binary}\"" if /\s/.match?(binary)
|
215
215
|
[binary, *args].compact.join(" ")
|
216
216
|
end
|
217
217
|
|