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
@@ -42,7 +42,7 @@ class Chef
|
|
42
42
|
option :expiration_date,
|
43
43
|
short: "-e DATE",
|
44
44
|
long: "--expiration-date DATE",
|
45
|
-
description: "Optionally pass the expiration date for the key in ISO 8601
|
45
|
+
description: "Optionally pass the expiration date for the key in ISO 8601 formatted string: YYYY-MM-DDTHH:MM:SSZ e.g. 2013-12-24T21:00:00Z. Defaults to infinity if not passed. UTC timezone assumed."
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -47,7 +47,7 @@ class Chef
|
|
47
47
|
option :expiration_date,
|
48
48
|
short: "-e DATE",
|
49
49
|
long: "--expiration-date DATE",
|
50
|
-
description: "Updates the expiration_date field of your key if passed. Pass in ISO 8601
|
50
|
+
description: "Updates the expiration_date field of your key if passed. Pass in ISO 8601 formatted string: YYYY-MM-DDTHH:MM:SSZ e.g. 2013-12-24T21:00:00Z or infinity. UTC timezone assumed."
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
data/lib/chef/knife/rehash.rb
CHANGED
@@ -34,7 +34,9 @@ class Chef
|
|
34
34
|
else
|
35
35
|
reload_plugins
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
|
+
ui.msg "Knife subcommands are cached in #{Chef::Knife::SubcommandLoader.plugin_manifest_path}. Delete this file to disable the caching."
|
39
|
+
Chef::Knife::SubcommandLoader.write_hash(Chef::Knife::SubcommandLoader.generate_hash)
|
38
40
|
end
|
39
41
|
|
40
42
|
def reload_plugins
|
@@ -43,26 +45,6 @@ class Chef
|
|
43
45
|
# loaded plugins and `load_commands` shouldn't have an effect.
|
44
46
|
Chef::Knife.subcommand_loader.load_commands
|
45
47
|
end
|
46
|
-
|
47
|
-
def generate_hash
|
48
|
-
output = if Chef::Knife::SubcommandLoader.plugin_manifest?
|
49
|
-
Chef::Knife::SubcommandLoader.plugin_manifest
|
50
|
-
else
|
51
|
-
{ Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY => {} }
|
52
|
-
end
|
53
|
-
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_paths"] = Chef::Knife.subcommand_files
|
54
|
-
output[Chef::Knife::SubcommandLoader::HashedCommandLoader::KEY]["plugins_by_category"] = Chef::Knife.subcommands_by_category
|
55
|
-
output
|
56
|
-
end
|
57
|
-
|
58
|
-
def write_hash(data)
|
59
|
-
plugin_manifest_dir = File.expand_path("..", Chef::Knife::SubcommandLoader.plugin_manifest_path)
|
60
|
-
FileUtils.mkdir_p(plugin_manifest_dir) unless File.directory?(plugin_manifest_dir)
|
61
|
-
File.open(Chef::Knife::SubcommandLoader.plugin_manifest_path, "w") do |f|
|
62
|
-
f.write(Chef::JSONCompat.to_json_pretty(data))
|
63
|
-
ui.msg "Knife subcommands are cached in #{Chef::Knife::SubcommandLoader.plugin_manifest_path}. Delete this file to disable the caching."
|
64
|
-
end
|
65
|
-
end
|
66
48
|
end
|
67
49
|
end
|
68
50
|
end
|
data/lib/chef/knife/ssh.rb
CHANGED
@@ -59,7 +59,7 @@ class Chef
|
|
59
59
|
|
60
60
|
option :prefix_attribute,
|
61
61
|
long: "--prefix-attribute ATTR",
|
62
|
-
description: "The attribute to use for prefixing the
|
62
|
+
description: "The attribute to use for prefixing the output - default depends on the context."
|
63
63
|
|
64
64
|
option :ssh_user,
|
65
65
|
short: "-x USERNAME",
|
@@ -296,6 +296,10 @@ class Chef
|
|
296
296
|
opts[:keepalive] = true
|
297
297
|
opts[:keepalive_interval] = ssh_config[:keepalive_interval]
|
298
298
|
end
|
299
|
+
# maintain support for legacy key types / ciphers / key exchange algorithms.
|
300
|
+
# most importantly this adds back support for DSS host keys
|
301
|
+
# See https://github.com/net-ssh/net-ssh/pull/709
|
302
|
+
opts[:append_all_supported_algorithms] = true
|
299
303
|
end
|
300
304
|
end
|
301
305
|
|
@@ -364,7 +368,7 @@ class Chef
|
|
364
368
|
|
365
369
|
ch.on_data do |ichannel, data|
|
366
370
|
print_data(ichannel.connection[:prefix], data)
|
367
|
-
if
|
371
|
+
if /^knife sudo password: /.match?(data)
|
368
372
|
print_data(ichannel.connection[:prefix], "\n")
|
369
373
|
ichannel.send_data("#{get_password}\n")
|
370
374
|
end
|
@@ -384,7 +388,7 @@ class Chef
|
|
384
388
|
end
|
385
389
|
|
386
390
|
def prompt_for_password(prompt = "Enter your password: ")
|
387
|
-
ui.ask(prompt
|
391
|
+
ui.ask(prompt, echo: false)
|
388
392
|
end
|
389
393
|
|
390
394
|
# Present the prompt and read a single line from the console. It also
|
@@ -132,7 +132,7 @@ class Chef
|
|
132
132
|
res = Chef::JSONCompat.from_json(http_resp.body)
|
133
133
|
if http_resp.code.to_i != 201
|
134
134
|
if res["error_messages"]
|
135
|
-
if res["error_messages"][0]
|
135
|
+
if /Version already exists/.match?(res["error_messages"][0])
|
136
136
|
ui.error "The same version of this cookbook already exists on Supermarket."
|
137
137
|
exit(1)
|
138
138
|
else
|
@@ -48,7 +48,7 @@ class Chef
|
|
48
48
|
begin
|
49
49
|
rest.delete "#{config[:supermarket_site]}/api/v1/cookbooks/#{@name_args[0]}"
|
50
50
|
rescue Net::HTTPClientException => e
|
51
|
-
raise e unless e.message
|
51
|
+
raise e unless /Forbidden/.match?(e.message)
|
52
52
|
|
53
53
|
ui.error "Forbidden: You must be the maintainer of #{@cookbook_name} to unshare it."
|
54
54
|
exit 1
|
data/lib/chef/log.rb
CHANGED
@@ -21,15 +21,20 @@ require "logger"
|
|
21
21
|
require_relative "monologger"
|
22
22
|
require_relative "exceptions"
|
23
23
|
require "mixlib/log"
|
24
|
-
require_relative "log/syslog" unless RUBY_PLATFORM
|
24
|
+
require_relative "log/syslog" unless RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
25
25
|
require_relative "log/winevt"
|
26
26
|
|
27
27
|
class Chef
|
28
28
|
class Log
|
29
29
|
extend Mixlib::Log
|
30
30
|
|
31
|
+
def self.setup!
|
32
|
+
init(MonoLogger.new(STDOUT))
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
|
31
36
|
# Force initialization of the primary log device (@logger)
|
32
|
-
|
37
|
+
setup!
|
33
38
|
|
34
39
|
class Formatter
|
35
40
|
def self.show_time=(*args)
|
@@ -47,7 +52,7 @@ class Chef
|
|
47
52
|
def self.caller_location
|
48
53
|
# Pick the first caller that is *not* part of the Chef gem, that's the
|
49
54
|
# thing the user wrote. Or failing that, the most recent caller.
|
50
|
-
chef_gem_path = File.expand_path("
|
55
|
+
chef_gem_path = File.expand_path("..", __dir__)
|
51
56
|
caller(0..20).find { |c| !c.start_with?(chef_gem_path) } || caller(0..1)[0]
|
52
57
|
end
|
53
58
|
|
@@ -53,7 +53,7 @@ class Chef
|
|
53
53
|
<<~EOH
|
54
54
|
The reregister command only supports server API version 0.
|
55
55
|
The server that received the request supports a min version of #{min_version} and a max version of #{max_version}.
|
56
|
-
User keys are now managed via the key rotation
|
56
|
+
User keys are now managed via the key rotation commands.
|
57
57
|
Please refer to the documentation on how to manage your keys via the key rotation commands:
|
58
58
|
https://docs.chef.io/ctl_chef_server/#key-rotation
|
59
59
|
EOH
|
data/lib/chef/mixin/checksum.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
# Author:: Kaustubh Deorukhkar (<kaustubh@clogeny.com>)
|
1
|
+
#--
|
3
2
|
# Copyright:: Copyright (c) Chef Software Inc.
|
4
3
|
# License:: Apache License, Version 2.0
|
5
4
|
#
|
@@ -7,22 +6,35 @@
|
|
7
6
|
# you may not use this file except in compliance with the License.
|
8
7
|
# You may obtain a copy of the License at
|
9
8
|
#
|
10
|
-
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
10
|
#
|
12
11
|
# Unless required by applicable law or agreed to in writing, software
|
13
12
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
13
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
14
|
# See the License for the specific language governing permissions and
|
16
15
|
# limitations under the License.
|
17
|
-
#
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
17
|
+
require_relative "../log"
|
18
|
+
require_relative "../config"
|
19
|
+
require_relative "../chef_class"
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
module Mixin
|
23
|
+
# Common Dependency Injection wiring for ChefUtils-related modules
|
24
|
+
module ChefUtilsWiring
|
25
|
+
private
|
26
|
+
|
27
|
+
def __config
|
28
|
+
Chef::Config
|
29
|
+
end
|
30
|
+
|
31
|
+
def __log
|
32
|
+
Chef::Log
|
33
|
+
end
|
34
|
+
|
35
|
+
def __transport_connection
|
36
|
+
Chef.run_context&.transport_connection
|
37
|
+
end
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
#
|
2
|
-
# Author:: Adam Jacob (<adam@chef.io>)
|
3
2
|
# Copyright:: Copyright (c) Chef Software Inc.
|
4
3
|
# License:: Apache License, Version 2.0
|
5
4
|
#
|
@@ -16,9 +15,18 @@
|
|
16
15
|
# limitations under the License.
|
17
16
|
#
|
18
17
|
|
19
|
-
require "
|
20
|
-
require "logger"
|
21
|
-
require "spec_helper"
|
18
|
+
require "chef-utils/dsl/default_paths" unless defined?(ChefUtils::DSL::DefaultPaths)
|
22
19
|
|
23
|
-
|
20
|
+
class Chef
|
21
|
+
module Mixin
|
22
|
+
module DefaultPaths
|
23
|
+
include ChefUtils::DSL::DefaultPaths
|
24
|
+
|
25
|
+
def enforce_default_paths(env = ENV)
|
26
|
+
if Chef::Config[:enforce_default_paths] || Chef::Config[:enforce_path_sanity]
|
27
|
+
env["PATH"] = default_paths(env)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
24
32
|
end
|
@@ -218,7 +218,7 @@ class Chef
|
|
218
218
|
# Chef 12 backward compatibility
|
219
219
|
::OpenSSL::PKey::EC.send(:alias_method, :private?, :private_key?)
|
220
220
|
|
221
|
-
request.sign(key, ::OpenSSL::Digest
|
221
|
+
request.sign(key, ::OpenSSL::Digest.new("SHA256"))
|
222
222
|
request
|
223
223
|
end
|
224
224
|
|
@@ -282,14 +282,16 @@ class Chef
|
|
282
282
|
ef.issuer_certificate = info["issuer"]
|
283
283
|
end
|
284
284
|
ef.subject_certificate = cert
|
285
|
-
|
285
|
+
if openssl_config = __openssl_config
|
286
|
+
ef.config = openssl_config
|
287
|
+
end
|
286
288
|
|
287
289
|
cert.extensions = extension
|
288
290
|
cert.add_extension ef.create_extension("subjectKeyIdentifier", "hash")
|
289
291
|
cert.add_extension ef.create_extension("authorityKeyIdentifier",
|
290
292
|
"keyid:always,issuer:always")
|
291
293
|
|
292
|
-
cert.sign(key, ::OpenSSL::Digest
|
294
|
+
cert.sign(key, ::OpenSSL::Digest.new("SHA256"))
|
293
295
|
cert
|
294
296
|
end
|
295
297
|
|
@@ -313,13 +315,15 @@ class Chef
|
|
313
315
|
crl.last_update = Time.now
|
314
316
|
crl.next_update = Time.now + 3600 * 24 * info["validity"]
|
315
317
|
|
316
|
-
|
318
|
+
if openssl_config = __openssl_config
|
319
|
+
ef.config = openssl_config
|
320
|
+
end
|
317
321
|
ef.issuer_certificate = info["issuer"]
|
318
322
|
|
319
323
|
crl.add_extension ::OpenSSL::X509::Extension.new("crlNumber", ::OpenSSL::ASN1::Integer(1))
|
320
324
|
crl.add_extension ef.create_extension("authorityKeyIdentifier",
|
321
325
|
"keyid:always,issuer:always")
|
322
|
-
crl.sign(ca_private_key, ::OpenSSL::Digest
|
326
|
+
crl.sign(ca_private_key, ::OpenSSL::Digest.new("SHA256"))
|
323
327
|
crl
|
324
328
|
end
|
325
329
|
|
@@ -369,8 +373,7 @@ class Chef
|
|
369
373
|
revoked.add_extension(ext)
|
370
374
|
crl.add_revoked(revoked)
|
371
375
|
|
372
|
-
|
373
|
-
crl
|
376
|
+
renew_x509_crl(crl, ca_private_key, info)
|
374
377
|
end
|
375
378
|
|
376
379
|
# renew a X509 crl given
|
@@ -391,14 +394,16 @@ class Chef
|
|
391
394
|
crl.next_update = crl.last_update + 3600 * 24 * info["validity"]
|
392
395
|
|
393
396
|
ef = ::OpenSSL::X509::ExtensionFactory.new
|
394
|
-
|
397
|
+
if openssl_config = __openssl_config
|
398
|
+
ef.config = openssl_config
|
399
|
+
end
|
395
400
|
ef.issuer_certificate = info["issuer"]
|
396
401
|
|
397
402
|
crl.extensions = [ ::OpenSSL::X509::Extension.new("crlNumber",
|
398
403
|
::OpenSSL::ASN1::Integer(get_next_crl_number(crl)))]
|
399
404
|
crl.add_extension ef.create_extension("authorityKeyIdentifier",
|
400
405
|
"keyid:always,issuer:always")
|
401
|
-
crl.sign(ca_private_key, ::OpenSSL::Digest
|
406
|
+
crl.sign(ca_private_key, ::OpenSSL::Digest.new("SHA256"))
|
402
407
|
crl
|
403
408
|
end
|
404
409
|
|
@@ -422,6 +427,23 @@ class Chef
|
|
422
427
|
|
423
428
|
resp
|
424
429
|
end
|
430
|
+
|
431
|
+
private
|
432
|
+
|
433
|
+
def __openssl_config
|
434
|
+
path = if File.exist?(::OpenSSL::Config::DEFAULT_CONFIG_FILE)
|
435
|
+
OpenSSL::Config::DEFAULT_CONFIG_FILE
|
436
|
+
else
|
437
|
+
Dir[File.join(RbConfig::CONFIG["prefix"], "**", "openssl.cnf")].first
|
438
|
+
end
|
439
|
+
|
440
|
+
if File.exist?(path)
|
441
|
+
::OpenSSL::Config.load(path)
|
442
|
+
else
|
443
|
+
Chef::Log.warn("Couldn't find OpenSSL config file")
|
444
|
+
nil
|
445
|
+
end
|
446
|
+
end
|
425
447
|
end
|
426
448
|
end
|
427
449
|
end
|
@@ -16,14 +16,15 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
require_relative "default_paths"
|
20
|
+
|
19
21
|
class Chef
|
20
22
|
module Mixin
|
21
|
-
# @ deprecated
|
22
23
|
module PathSanity
|
24
|
+
include Chef::Mixin::DefaultPaths
|
25
|
+
|
23
26
|
def enforce_path_sanity(env = ENV)
|
24
|
-
|
25
|
-
env["PATH"] = ChefUtils::DSL::PathSanity.sanitized_path(env)
|
26
|
-
end
|
27
|
+
enforce_default_paths(env)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -264,7 +264,7 @@ class Chef
|
|
264
264
|
end
|
265
265
|
|
266
266
|
result = properties.values.select(&:identity?)
|
267
|
-
# if there are no other identity
|
267
|
+
# if there are no other identity properties set, then the name_property becomes the identity, or
|
268
268
|
# failing that we use the actual name.
|
269
269
|
if result.empty?
|
270
270
|
result = name_property ? [ properties[name_property] ] : [ properties[:name] ]
|
@@ -355,7 +355,7 @@ class Chef
|
|
355
355
|
#
|
356
356
|
# @param other [Object] the other object (Chef::Resource) which implements the properties API
|
357
357
|
# @param includes [Array<Symbol>] splat-args list of symbols of the properties to copy.
|
358
|
-
# @param exclude [Array<Symbol>] list of
|
358
|
+
# @param exclude [Array<Symbol>] list of symbols of the properties to exclude.
|
359
359
|
# @return the self object the properties were copied to for method chaining
|
360
360
|
#
|
361
361
|
def copy_properties_from(other, *includes, exclude: [ :name ])
|
data/lib/chef/mixin/securable.rb
CHANGED
@@ -172,14 +172,14 @@ class Chef
|
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
175
|
-
if RUBY_PLATFORM
|
175
|
+
if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
176
176
|
include WindowsSecurableAttributes
|
177
177
|
end
|
178
178
|
|
179
179
|
# Callback that fires when included; will extend the including class
|
180
180
|
# with WindowsMacros and define #rights and #deny_rights on it.
|
181
181
|
def self.included(including_class)
|
182
|
-
if RUBY_PLATFORM
|
182
|
+
if RUBY_PLATFORM.match?(/mswin|mingw|windows/)
|
183
183
|
including_class.extend(WindowsMacros)
|
184
184
|
# create a default 'rights' attribute
|
185
185
|
including_class.rights_attribute(:rights)
|
data/lib/chef/mixin/shell_out.rb
CHANGED
@@ -15,198 +15,14 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
require "mixlib/shellout" unless defined?(Mixlib::ShellOut::
|
19
|
-
require "chef
|
18
|
+
require "mixlib/shellout/helper" unless defined?(Mixlib::ShellOut::Helper)
|
19
|
+
require "chef/mixin/chef_utils_wiring" unless defined?(Chef::Mixin::ChefUtilsWiring)
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
module Mixin
|
23
23
|
module ShellOut
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
# all consumers should now call shell_out!/shell_out.
|
28
|
-
#
|
29
|
-
# the shell_out_compacted/shell_out_compacted! APIs are private but are intended for use
|
30
|
-
# in rspec tests, and should ideally always be used to make code refactoring that do not
|
31
|
-
# change behavior easier:
|
32
|
-
#
|
33
|
-
# allow(provider).to receive(:shell_out_compacted!).with("foo", "bar", "baz")
|
34
|
-
# provider.shell_out!("foo", [ "bar", nil, "baz"])
|
35
|
-
# provider.shell_out!(["foo", nil, "bar" ], ["baz"])
|
36
|
-
#
|
37
|
-
# note that shell_out_compacted also includes adding the magical timeout option to force
|
38
|
-
# people to setup expectations on that value explicitly. it does not include the default_env
|
39
|
-
# mangling in order to avoid users having to setup an expectation on anything other than
|
40
|
-
# setting `default_env: false` and allow us to make tweak to the default_env without breaking
|
41
|
-
# a thousand unit tests.
|
42
|
-
#
|
43
|
-
|
44
|
-
def shell_out(*args, **options)
|
45
|
-
options = options.dup
|
46
|
-
options = Chef::Mixin::ShellOut.maybe_add_timeout(self, options)
|
47
|
-
if options.empty?
|
48
|
-
shell_out_compacted(*Chef::Mixin::ShellOut.clean_array(*args))
|
49
|
-
else
|
50
|
-
shell_out_compacted(*Chef::Mixin::ShellOut.clean_array(*args), **options)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def shell_out!(*args, **options)
|
55
|
-
options = options.dup
|
56
|
-
options = Chef::Mixin::ShellOut.maybe_add_timeout(self, options)
|
57
|
-
if options.empty?
|
58
|
-
shell_out_compacted!(*Chef::Mixin::ShellOut.clean_array(*args))
|
59
|
-
else
|
60
|
-
shell_out_compacted!(*Chef::Mixin::ShellOut.clean_array(*args), **options)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# helper sugar for resources that support passing timeouts to shell_out
|
65
|
-
#
|
66
|
-
# module method to not pollute namespaces, but that means we need self injected as an arg
|
67
|
-
# @api private
|
68
|
-
def self.maybe_add_timeout(obj, options)
|
69
|
-
options = options.dup
|
70
|
-
# historically resources have not properly declared defaults on their timeouts, so a default default of 900s was enforced here
|
71
|
-
default_val = 900
|
72
|
-
return options if options.key?(:timeout)
|
73
|
-
|
74
|
-
# FIXME: need to nuke descendents tracker out of Chef::Provider so we can just define that class here without requiring the
|
75
|
-
# world, and then just use symbol lookup
|
76
|
-
if obj.class.ancestors.map(&:name).include?("Chef::Provider") && obj.respond_to?(:new_resource) && obj.new_resource.respond_to?(:timeout) && !options.key?(:timeout)
|
77
|
-
options[:timeout] = obj.new_resource.timeout ? obj.new_resource.timeout.to_f : default_val
|
78
|
-
end
|
79
|
-
options
|
80
|
-
end
|
81
|
-
|
82
|
-
# helper function to mangle options when `default_env` is true
|
83
|
-
#
|
84
|
-
# @api private
|
85
|
-
def self.apply_default_env(options)
|
86
|
-
options = options.dup
|
87
|
-
default_env = options.delete(:default_env)
|
88
|
-
default_env = true if default_env.nil?
|
89
|
-
if default_env
|
90
|
-
env_key = options.key?(:env) ? :env : :environment
|
91
|
-
options[env_key] = {
|
92
|
-
"LC_ALL" => Chef::Config[:internal_locale],
|
93
|
-
"LANGUAGE" => Chef::Config[:internal_locale],
|
94
|
-
"LANG" => Chef::Config[:internal_locale],
|
95
|
-
env_path => ChefUtils::DSL::PathSanity.sanitized_path,
|
96
|
-
}.update(options[env_key] || {})
|
97
|
-
end
|
98
|
-
options
|
99
|
-
end
|
100
|
-
|
101
|
-
private
|
102
|
-
|
103
|
-
# this SHOULD be used for setting up expectations in rspec, see banner comment at top.
|
104
|
-
#
|
105
|
-
# the private constraint is meant to avoid code calling this directly, rspec expectations are fine.
|
106
|
-
#
|
107
|
-
def shell_out_compacted(*args, **options)
|
108
|
-
options = Chef::Mixin::ShellOut.apply_default_env(options)
|
109
|
-
if options.empty?
|
110
|
-
Chef::Mixin::ShellOut.shell_out_command(*args)
|
111
|
-
else
|
112
|
-
Chef::Mixin::ShellOut.shell_out_command(*args, **options)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# this SHOULD be used for setting up expectations in rspec, see banner comment at top.
|
117
|
-
#
|
118
|
-
# the private constraint is meant to avoid code calling this directly, rspec expectations are fine.
|
119
|
-
#
|
120
|
-
def shell_out_compacted!(*args, **options)
|
121
|
-
options = Chef::Mixin::ShellOut.apply_default_env(options)
|
122
|
-
cmd = if options.empty?
|
123
|
-
Chef::Mixin::ShellOut.shell_out_command(*args)
|
124
|
-
else
|
125
|
-
Chef::Mixin::ShellOut.shell_out_command(*args, **options)
|
126
|
-
end
|
127
|
-
cmd.error!
|
128
|
-
cmd
|
129
|
-
end
|
130
|
-
|
131
|
-
# Helper for subclasses to reject nil out of an array. It allows
|
132
|
-
# using the array form of shell_out (which avoids the need to surround arguments with
|
133
|
-
# quote marks to deal with shells).
|
134
|
-
#
|
135
|
-
# Usage:
|
136
|
-
# shell_out!(*clean_array("useradd", universal_options, useradd_options, new_resource.username))
|
137
|
-
#
|
138
|
-
# universal_options and useradd_options can be nil, empty array, empty string, strings or arrays
|
139
|
-
# and the result makes sense.
|
140
|
-
#
|
141
|
-
# keeping this separate from shell_out!() makes it a bit easier to write expectations against the
|
142
|
-
# shell_out args and be able to omit nils and such in the tests (and to test that the nils are
|
143
|
-
# being rejected correctly).
|
144
|
-
#
|
145
|
-
# @param args [String] variable number of string arguments
|
146
|
-
# @return [Array] array of strings with nil and null string rejection
|
147
|
-
|
148
|
-
def self.clean_array(*args)
|
149
|
-
args.flatten.compact.map(&:to_s)
|
150
|
-
end
|
151
|
-
|
152
|
-
def self.transport_connection
|
153
|
-
Chef.run_context.transport_connection
|
154
|
-
end
|
155
|
-
|
156
|
-
def self.shell_out_command(*args, **options)
|
157
|
-
if Chef::Config.target_mode?
|
158
|
-
FakeShellOut.new(args, options, transport_connection.run_command(args.join(" "))) # FIXME: train should accept run_command(*args)
|
159
|
-
else
|
160
|
-
cmd = if options.empty?
|
161
|
-
Mixlib::ShellOut.new(*args)
|
162
|
-
else
|
163
|
-
Mixlib::ShellOut.new(*args, **options)
|
164
|
-
end
|
165
|
-
cmd.live_stream ||= io_for_live_stream
|
166
|
-
cmd.run_command
|
167
|
-
cmd
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
def self.io_for_live_stream
|
172
|
-
if STDOUT.tty? && !Chef::Config[:daemon] && Chef::Log.debug?
|
173
|
-
STDOUT
|
174
|
-
else
|
175
|
-
nil
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def self.env_path
|
180
|
-
if ChefUtils.windows?
|
181
|
-
"Path"
|
182
|
-
else
|
183
|
-
"PATH"
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
class FakeShellOut
|
188
|
-
attr_reader :stdout, :stderr, :exitstatus, :status
|
189
|
-
|
190
|
-
def initialize(args, options, result)
|
191
|
-
@args = args
|
192
|
-
@options = options
|
193
|
-
@stdout = result.stdout
|
194
|
-
@stderr = result.stderr
|
195
|
-
@exitstatus = result.exit_status
|
196
|
-
@status = OpenStruct.new(success?: ( exitstatus == 0 ))
|
197
|
-
end
|
198
|
-
|
199
|
-
def error?
|
200
|
-
exitstatus != 0
|
201
|
-
end
|
202
|
-
|
203
|
-
def error!
|
204
|
-
raise Mixlib::ShellOut::ShellCommandFailed, "Unexpected exit status of #{exitstatus} running #{@args}" if error?
|
205
|
-
end
|
206
|
-
end
|
24
|
+
include Mixlib::ShellOut::Helper
|
25
|
+
include Chef::Mixin::ChefUtilsWiring
|
207
26
|
end
|
208
27
|
end
|
209
28
|
end
|
210
|
-
|
211
|
-
# Break circular dep
|
212
|
-
require_relative "../config"
|