chef 16.0.287 → 16.2.73
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 +2 -3
- data/README.md +3 -3
- data/Rakefile +3 -2
- data/chef.gemspec +5 -5
- 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/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- 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/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +4 -4
- 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_loader.rb +1 -1
- 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 +4 -4
- 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 +4 -0
- data/lib/chef/digester.rb +5 -4
- data/lib/chef/dsl/declare_resource.rb +1 -1
- 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/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/node_load_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
- data/lib/chef/http.rb +19 -4
- 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 +2 -2
- data/lib/chef/knife/bootstrap.rb +20 -14
- 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/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/config_get.rb +1 -1
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +1 -4
- 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/hashed_command_loader.rb +1 -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 +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +19 -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/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/ssh.rb +2 -2
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/api_version_request_handling.rb +1 -1
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/openssl_helper.rb +4 -4
- data/lib/chef/mixin/properties.rb +2 -2
- data/lib/chef/mixin/securable.rb +2 -2
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/node/attribute.rb +2 -2
- data/lib/chef/node/immutable_collections.rb +1 -1
- 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/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/launchd.rb +11 -9
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/cab.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 +96 -27
- data/lib/chef/provider/package/windows.rb +2 -2
- 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/powershell_script.rb +11 -15
- 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/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +9 -0
- 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/zypper_repository.rb +30 -10
- data/lib/chef/resource.rb +25 -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/chef_client_scheduled_task.rb +13 -1
- 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/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 +11 -3
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +478 -8
- 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/macos_userdefaults.rb +11 -6
- data/lib/chef/resource/mount.rb +1 -1
- 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/ssh_known_hosts_entry.rb +15 -0
- data/lib/chef/resource/sudo.rb +29 -2
- 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/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_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 +47 -16
- 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 +70 -5
- data/lib/chef/resource/yum_repository.rb +9 -9
- data/lib/chef/resource_inspector.rb +4 -3
- data/lib/chef/resources.rb +4 -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/util/diff.rb +2 -2
- data/lib/chef/util/windows/net_user.rb +1 -1
- data/lib/chef/util/windows/volume.rb +1 -1
- data/lib/chef/version.rb +1 -1
- 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 +2 -2
- 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/resource/aix_service_spec.rb +10 -1
- data/spec/functional/resource/aixinit_service_spec.rb +1 -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 -1
- 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 +6 -6
- data/spec/functional/resource/group_spec.rb +9 -1
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +3 -2
- data/spec/functional/resource/launchd_spec.rb +232 -0
- 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 +8 -8
- 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 +0 -1
- data/spec/functional/resource/yum_package_spec.rb +4 -1
- data/spec/functional/resource/zypper_package_spec.rb +4 -1
- data/spec/functional/shell_spec.rb +0 -1
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/integration/knife/config_use_profile_spec.rb +55 -2
- data/spec/integration/knife/cookbook_upload_spec.rb +1 -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/recipe_dsl_spec.rb +4 -0
- data/spec/integration/recipes/resource_load_spec.rb +2 -2
- data/spec/support/chef_helpers.rb +1 -1
- data/spec/support/platform_helpers.rb +1 -1
- 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/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/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 +7 -0
- data/spec/unit/chef_fs/config_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +8 -8
- data/spec/unit/client_spec.rb +4 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/environment_spec.rb +5 -1
- 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/knife/bootstrap_spec.rb +3 -2
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- 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/lwrp_spec.rb +5 -2
- data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
- 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/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/node/attribute_spec.rb +1 -1
- data/spec/unit/property_spec.rb +1 -1
- 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 -1
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/launchd_spec.rb +0 -42
- data/spec/unit/provider/mdadm_spec.rb +1 -3
- 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/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
- data/spec/unit/provider/powershell_script_spec.rb +3 -45
- data/spec/unit/provider/script_spec.rb +20 -110
- 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/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/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/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_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_spec.rb +84 -1
- data/spec/unit/role_spec.rb +23 -21
- data/spec/unit/util/backup_spec.rb +1 -1
- 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
- metadata +37 -31
- data/lib/chef/resource/cron.rb +0 -157
- data/spec/functional/resource/base.rb +0 -28
|
@@ -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 ]
|
|
@@ -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
|
|
@@ -94,11 +85,13 @@ class Chef
|
|
|
94
85
|
# means a non-zero return and thus a syntactically invalid script.
|
|
95
86
|
|
|
96
87
|
with_os_architecture(node, architecture: new_resource.architecture) do
|
|
97
|
-
shell_out!(validation_command,
|
|
88
|
+
shell_out!(validation_command, returns: [0])
|
|
98
89
|
end
|
|
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
|
|
@@ -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.*)/
|
|
@@ -142,6 +142,15 @@ class Chef
|
|
|
142
142
|
#
|
|
143
143
|
# This makes some sense on macOS since launchctl is an "init"-style
|
|
144
144
|
# supervisor that will restart daemons that are crashing, etc.
|
|
145
|
+
#
|
|
146
|
+
# FIXME: Does this make any sense at all? The difference between enabled and
|
|
147
|
+
# running as state would seem to only be useful for completely broken
|
|
148
|
+
# services (enabled, not restarting, but not running => totally broken?).
|
|
149
|
+
#
|
|
150
|
+
# It seems like otherwise :enable is equivalent to :start, and :disable is
|
|
151
|
+
# equivalent to :stop? But just with strangely different behavior in the
|
|
152
|
+
# face of a broken service?
|
|
153
|
+
#
|
|
145
154
|
def enable_service
|
|
146
155
|
if @current_resource.enabled
|
|
147
156
|
logger.trace("#{@new_resource} already enabled, not enabling")
|
|
@@ -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
|
|
|
@@ -40,7 +40,7 @@ class Chef
|
|
|
40
40
|
shell_out!("userdel", userdel_options, new_resource.username)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# Aix does not support -r like other unix,
|
|
43
|
+
# Aix does not support -r like other unix, system account is created by adding to 'system' group
|
|
44
44
|
def useradd_options
|
|
45
45
|
opts = []
|
|
46
46
|
opts << "-g" << "system" if new_resource.system
|
|
@@ -215,7 +215,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
215
215
|
next_uid_guess = base_uid
|
|
216
216
|
users_uids = run_dscl("list", "/Users", "uid")
|
|
217
217
|
while next_uid_guess < search_limit + base_uid
|
|
218
|
-
if users_uids
|
|
218
|
+
if users_uids&.match?(Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n"))
|
|
219
219
|
next_uid_guess += 1
|
|
220
220
|
else
|
|
221
221
|
uid = next_uid_guess
|
|
@@ -291,7 +291,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
291
291
|
end
|
|
292
292
|
|
|
293
293
|
def validate_home_dir_specification!
|
|
294
|
-
unless
|
|
294
|
+
unless %r{^/}.match?(new_resource.home)
|
|
295
295
|
raise(Chef::Exceptions::InvalidHomeDirectory, "invalid path spec for User: '#{new_resource.username}', home directory: '#{new_resource.home}'")
|
|
296
296
|
end
|
|
297
297
|
end
|
|
@@ -382,7 +382,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
382
382
|
salt,
|
|
383
383
|
iterations,
|
|
384
384
|
128,
|
|
385
|
-
OpenSSL::Digest
|
|
385
|
+
OpenSSL::Digest.new("SHA512")
|
|
386
386
|
)
|
|
387
387
|
end
|
|
388
388
|
|
|
@@ -536,7 +536,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
536
536
|
|
|
537
537
|
# We flush the cache here in order to make sure that we read fresh information
|
|
538
538
|
# for the user.
|
|
539
|
-
shell_out("dscacheutil", "-flushcache") # FIXME: this is
|
|
539
|
+
shell_out("dscacheutil", "-flushcache") # FIXME: this is macOS version dependent
|
|
540
540
|
|
|
541
541
|
begin
|
|
542
542
|
user_plist_file = "#{USER_PLIST_DIRECTORY}/#{new_resource.username}.plist"
|
|
@@ -587,7 +587,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
587
587
|
result = shell_out("dscl", ".", "-#{args[0]}", args[1..-1])
|
|
588
588
|
return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
|
|
589
589
|
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0
|
|
590
|
-
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if
|
|
590
|
+
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if /No such key: /.match?(result.stdout)
|
|
591
591
|
|
|
592
592
|
result.stdout
|
|
593
593
|
end
|
|
@@ -627,7 +627,7 @@ in 'password', with the associated 'salt' and 'iterations'.")
|
|
|
627
627
|
salt,
|
|
628
628
|
current_resource.iterations,
|
|
629
629
|
128,
|
|
630
|
-
OpenSSL::Digest
|
|
630
|
+
OpenSSL::Digest.new("SHA512")
|
|
631
631
|
).unpack("H*").first == current_resource.password
|
|
632
632
|
end
|
|
633
633
|
|