chef 16.1.16 → 16.18.30
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +32 -27
- data/README.md +5 -5
- data/Rakefile +35 -30
- data/bin/knife +1 -1
- data/chef-universal-mingw32.gemspec +5 -5
- data/chef.gemspec +32 -10
- data/lib/chef/action_collection.rb +5 -1
- data/lib/chef/api_client/registration.rb +2 -2
- data/lib/chef/application/apply.rb +19 -13
- data/lib/chef/application/base.rb +27 -24
- data/lib/chef/application/client.rb +17 -6
- data/lib/chef/application/exit_code.rb +13 -4
- data/lib/chef/application/knife.rb +22 -11
- data/lib/chef/application/solo.rb +2 -1
- data/lib/chef/application/windows_service.rb +39 -39
- data/lib/chef/application/windows_service_manager.rb +7 -7
- data/lib/chef/application.rb +33 -19
- data/lib/chef/{whitelist.rb → attribute_allowlist.rb} +11 -11
- data/lib/chef/{blacklist.rb → attribute_blocklist.rb} +9 -9
- data/lib/chef/chef_class.rb +0 -1
- data/lib/chef/chef_fs/chef_fs_data_store.rb +55 -55
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
- 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_pattern.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +10 -10
- 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/chef_server/organization_invites_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +8 -8
- data/lib/chef/chef_fs/file_system/repository/base_file.rb +1 -0
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +18 -18
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +1 -1
- data/lib/chef/chef_fs/knife.rb +2 -2
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/chef_fs/parallelizer.rb +0 -1
- data/lib/chef/chef_fs/path_utils.rb +1 -1
- data/lib/chef/client.rb +32 -59
- data/lib/chef/compliance/default_attributes.rb +97 -0
- data/lib/chef/compliance/fetcher/automate.rb +80 -0
- data/lib/chef/compliance/fetcher/chef_server.rb +134 -0
- data/lib/chef/compliance/reporter/automate.rb +201 -0
- data/lib/chef/compliance/reporter/chef_server_automate.rb +94 -0
- data/lib/chef/compliance/reporter/compliance_enforcer.rb +20 -0
- data/lib/chef/compliance/reporter/json_file.rb +19 -0
- data/lib/chef/compliance/runner.rb +269 -0
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +6 -2
- data/lib/chef/cookbook/metadata.rb +1 -1
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -3
- data/lib/chef/cookbook/synchronizer.rb +2 -2
- data/lib/chef/cookbook/syntax_check.rb +1 -2
- data/lib/chef/cookbook_loader.rb +15 -29
- data/lib/chef/cookbook_manifest.rb +2 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +30 -11
- data/lib/chef/data_bag.rb +5 -6
- data/lib/chef/data_collector/config_validation.rb +22 -13
- data/lib/chef/data_collector/run_end_message.rb +15 -5
- data/lib/chef/data_collector/run_start_message.rb +1 -1
- data/lib/chef/data_collector.rb +7 -6
- data/lib/chef/deprecated.rb +27 -5
- data/lib/chef/deprecation/warnings.rb +2 -2
- data/lib/chef/digester.rb +4 -3
- data/lib/chef/dsl/chef_vault.rb +1 -1
- data/lib/chef/dsl/data_query.rb +2 -2
- data/lib/chef/dsl/platform_introspection.rb +10 -8
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/assertions.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
- data/lib/chef/encrypted_data_bag_item.rb +3 -4
- data/lib/chef/environment.rb +6 -7
- data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
- data/lib/chef/exceptions.rb +16 -6
- data/lib/chef/file_access_control/windows.rb +12 -11
- data/lib/chef/file_access_control.rb +1 -1
- data/lib/chef/file_cache.rb +4 -4
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/file_content_management/tempfile.rb +10 -10
- data/lib/chef/formatters/doc.rb +7 -6
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +8 -8
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
- data/lib/chef/formatters/error_mapper.rb +2 -2
- data/lib/chef/formatters/indentable_output_stream.rb +2 -2
- data/lib/chef/formatters/minimal.rb +5 -4
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +28 -39
- data/lib/chef/handler/json_file.rb +1 -1
- data/lib/chef/handler.rb +2 -0
- data/lib/chef/http/auth_credentials.rb +5 -1
- data/lib/chef/http/authenticator.rb +4 -2
- data/lib/chef/http/basic_client.rb +4 -2
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +8 -6
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
- data/lib/chef/http/ssl_policies.rb +52 -15
- data/lib/chef/http.rb +38 -31
- data/lib/chef/json_compat.rb +4 -9
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +12 -12
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +9 -9
- data/lib/chef/knife/bootstrap/train_connector.rb +2 -1
- data/lib/chef/knife/bootstrap.rb +93 -40
- data/lib/chef/knife/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/client_create.rb +3 -3
- data/lib/chef/knife/config_get.rb +8 -96
- data/lib/chef/knife/config_get_profile.rb +9 -9
- data/lib/chef/knife/config_list.rb +139 -0
- data/lib/chef/knife/config_list_profiles.rb +8 -95
- data/lib/chef/knife/config_show.rb +127 -0
- data/lib/chef/knife/config_use.rb +61 -0
- data/lib/chef/knife/config_use_profile.rb +12 -17
- data/lib/chef/knife/configure.rb +5 -3
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/cookbook_download.rb +1 -1
- data/lib/chef/knife/cookbook_metadata.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +29 -37
- data/lib/chef/knife/core/bootstrap_context.rb +3 -3
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
- data/lib/chef/knife/core/formatting_options.rb +49 -0
- data/lib/chef/knife/core/gem_glob_loader.rb +2 -2
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +3 -2
- data/lib/chef/knife/core/node_presenter.rb +0 -25
- data/lib/chef/knife/core/object_loader.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -26
- data/lib/chef/knife/core/subcommand_loader.rb +20 -1
- data/lib/chef/knife/core/ui.rb +12 -3
- data/lib/chef/knife/core/windows_bootstrap_context.rb +51 -42
- data/lib/chef/knife/data_bag_create.rb +1 -1
- data/lib/chef/knife/delete.rb +15 -15
- data/lib/chef/knife/exec.rb +4 -4
- data/lib/chef/knife/node_bulk_delete.rb +1 -1
- data/lib/chef/knife/node_policy_set.rb +2 -2
- data/lib/chef/knife/node_run_list_add.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +2 -2
- data/lib/chef/knife/node_run_list_set.rb +1 -1
- data/lib/chef/knife/node_show.rb +4 -3
- data/lib/chef/knife/rehash.rb +3 -21
- data/lib/chef/knife/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/role_env_run_list_add.rb +1 -1
- data/lib/chef/knife/role_env_run_list_set.rb +1 -1
- data/lib/chef/knife/role_run_list_add.rb +1 -1
- data/lib/chef/knife/role_run_list_set.rb +1 -1
- data/lib/chef/knife/search.rb +2 -2
- data/lib/chef/knife/serve.rb +3 -3
- data/lib/chef/knife/ssh.rb +33 -12
- data/lib/chef/knife/ssl_check.rb +3 -3
- data/lib/chef/knife/status.rb +10 -13
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/knife/tag_create.rb +1 -1
- data/lib/chef/knife/tag_delete.rb +1 -1
- data/lib/chef/knife/user_create.rb +2 -2
- data/lib/chef/knife/xargs.rb +19 -19
- data/lib/chef/knife/yaml_convert.rb +1 -1
- data/lib/chef/knife.rb +9 -9
- data/lib/chef/local_mode.rb +2 -2
- data/lib/chef/log/syslog.rb +2 -2
- data/lib/chef/log/winevt.rb +2 -2
- data/lib/chef/log.rb +8 -3
- data/lib/chef/mixin/checksum.rb +5 -0
- data/{spec/functional/resource/base.rb → lib/chef/mixin/chef_utils_wiring.rb} +24 -12
- data/lib/chef/mixin/convert_to_class_name.rb +0 -56
- data/lib/chef/mixin/deep_merge.rb +35 -18
- data/{spec/unit/monkey_patches/uri_spec.rb → lib/chef/mixin/default_paths.rb} +11 -13
- data/lib/chef/mixin/openssl_helper.rb +32 -11
- data/lib/chef/mixin/path_sanity.rb +5 -4
- data/lib/chef/mixin/powershell_exec.rb +17 -22
- data/lib/chef/mixin/powershell_out.rb +12 -5
- data/lib/chef/mixin/properties.rb +2 -0
- data/lib/chef/mixin/securable.rb +2 -2
- data/lib/chef/mixin/shell_out.rb +4 -188
- data/lib/chef/mixin/template.rb +4 -3
- data/lib/chef/mixin/unformatter.rb +1 -1
- data/lib/chef/mixin/uris.rb +4 -2
- data/lib/chef/mixin/versioned_api.rb +1 -2
- data/lib/chef/mixin/which.rb +6 -3
- data/lib/chef/mixins.rb +1 -0
- data/lib/chef/monkey_patches/webrick-utils.rb +10 -10
- data/lib/chef/node/attribute.rb +22 -7
- data/lib/chef/node/attribute_collections.rb +2 -6
- data/lib/chef/node/mixin/deep_merge_cache.rb +4 -4
- data/lib/chef/node/mixin/immutablize_hash.rb +2 -0
- data/lib/chef/node.rb +43 -18
- data/lib/chef/node_map.rb +21 -18
- data/lib/chef/platform/query_helpers.rb +4 -4
- data/lib/chef/platform/service_helpers.rb +31 -28
- data/lib/chef/policy_builder/dynamic.rb +2 -0
- data/lib/chef/policy_builder/policyfile.rb +8 -3
- data/lib/chef/powershell.rb +10 -4
- data/lib/chef/property.rb +2 -2
- data/lib/chef/provider/batch.rb +3 -10
- data/lib/chef/provider/cron/unix.rb +0 -2
- data/lib/chef/provider/cron.rb +9 -28
- data/lib/chef/provider/dsc_resource.rb +12 -24
- data/lib/chef/provider/dsc_script.rb +16 -20
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/file.rb +5 -5
- data/lib/chef/provider/git.rb +22 -14
- data/lib/chef/provider/group/dscl.rb +3 -3
- data/lib/chef/provider/group/suse.rb +5 -5
- data/lib/chef/provider/group/windows.rb +13 -2
- data/lib/chef/provider/group.rb +14 -8
- data/lib/chef/provider/ifconfig/debian.rb +38 -22
- data/lib/chef/provider/ifconfig/redhat.rb +54 -18
- data/lib/chef/provider/ifconfig.rb +16 -19
- data/lib/chef/provider/launchd.rb +3 -13
- data/lib/chef/provider/link.rb +0 -9
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/linux.rb +67 -0
- data/lib/chef/provider/mount/mount.rb +41 -43
- data/lib/chef/provider/mount/solaris.rb +0 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/mount.rb +23 -3
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/apt.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +6 -6
- data/lib/chef/provider/package/dnf/dnf_helper.py +23 -6
- data/lib/chef/provider/package/dnf/python_helper.rb +6 -6
- data/lib/chef/provider/package/dnf.rb +39 -12
- data/lib/chef/provider/package/dpkg.rb +3 -12
- data/lib/chef/provider/package/freebsd/base.rb +3 -2
- data/lib/chef/provider/package/freebsd/pkgng.rb +4 -2
- data/lib/chef/provider/package/homebrew.rb +1 -1
- data/lib/chef/provider/package/ips.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/portage.rb +2 -2
- data/lib/chef/provider/package/powershell.rb +10 -2
- data/lib/chef/provider/package/rubygems.rb +25 -22
- data/lib/chef/provider/package/snap.rb +99 -34
- data/lib/chef/provider/package/solaris.rb +0 -2
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +12 -10
- data/lib/chef/provider/package/windows.rb +12 -7
- data/lib/chef/provider/package/yum/rpm_utils.rb +1 -1
- data/lib/chef/provider/package/yum/yum_helper.py +4 -10
- data/lib/chef/provider/package/zypper.rb +99 -73
- data/lib/chef/provider/package.rb +53 -18
- data/lib/chef/provider/powershell_script.rb +40 -17
- data/lib/chef/provider/registry_key.rb +4 -3
- data/lib/chef/provider/remote_file/content.rb +3 -0
- data/lib/chef/provider/remote_file/ftp.rb +6 -4
- data/lib/chef/provider/remote_file/http.rb +4 -1
- data/lib/chef/provider/remote_file/sftp.rb +6 -4
- data/lib/chef/provider/route.rb +4 -8
- data/lib/chef/provider/script.rb +4 -75
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +5 -4
- data/lib/chef/provider/service/gentoo.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +7 -7
- data/lib/chef/provider/service/openbsd.rb +5 -8
- data/lib/chef/provider/service/redhat.rb +4 -4
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +11 -11
- data/lib/chef/provider/service.rb +2 -2
- data/lib/chef/provider/subversion.rb +2 -2
- data/lib/chef/provider/systemd_unit.rb +0 -2
- data/lib/chef/provider/template/content.rb +2 -1
- data/lib/chef/provider/template_finder.rb +2 -10
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +10 -10
- data/lib/chef/provider/user/linux.rb +3 -3
- data/lib/chef/provider/user/mac.rb +29 -21
- data/lib/chef/provider/user/solaris.rb +1 -1
- data/lib/chef/provider/user/windows.rb +10 -3
- data/lib/chef/provider/user.rb +17 -9
- data/lib/chef/provider/windows_script.rb +87 -25
- data/lib/chef/provider/yum_repository.rb +3 -3
- data/lib/chef/provider/zypper_repository.rb +33 -14
- data/lib/chef/provider.rb +1 -5
- data/lib/chef/provider_resolver.rb +1 -1
- data/lib/chef/providers.rb +1 -4
- data/lib/chef/pwsh.rb +71 -0
- data/lib/chef/recipe.rb +2 -2
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/apt_repository.rb +7 -15
- data/lib/chef/resource/archive_file.rb +28 -8
- data/lib/chef/resource/bash.rb +119 -2
- data/lib/chef/resource/batch.rb +5 -3
- data/lib/chef/resource/bff_package.rb +22 -0
- data/lib/chef/resource/breakpoint.rb +59 -2
- data/lib/chef/resource/build_essential.rb +7 -10
- data/lib/chef/resource/cab_package.rb +29 -0
- data/lib/chef/resource/chef_client_config.rb +313 -0
- data/lib/chef/resource/chef_client_cron.rb +36 -29
- data/lib/chef/resource/chef_client_launchd.rb +194 -0
- data/lib/chef/resource/chef_client_scheduled_task.rb +36 -21
- data/lib/chef/resource/chef_client_systemd_timer.rb +29 -22
- data/lib/chef/resource/chef_client_trusted_certificate.rb +102 -0
- data/lib/chef/resource/chef_gem.rb +58 -22
- data/lib/chef/resource/chef_handler.rb +149 -4
- data/lib/chef/resource/chef_sleep.rb +3 -3
- data/lib/chef/resource/chef_vault_secret.rb +14 -14
- data/lib/chef/resource/chocolatey_feature.rb +1 -2
- data/lib/chef/resource/cookbook_file.rb +2 -2
- data/lib/chef/resource/cron/_cron_shared.rb +99 -0
- data/lib/chef/resource/cron/cron.rb +46 -0
- data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +9 -89
- data/lib/chef/resource/cron_access.rb +13 -5
- data/lib/chef/resource/csh.rb +2 -3
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/dnf_package.rb +2 -2
- data/lib/chef/resource/dsc_resource.rb +0 -1
- data/lib/chef/resource/dsc_script.rb +9 -2
- data/lib/chef/resource/execute.rb +486 -15
- data/lib/chef/resource/file.rb +5 -5
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +36 -3
- data/lib/chef/resource/helpers/cron_validations.rb +6 -3
- data/lib/chef/resource/homebrew_cask.rb +16 -10
- data/lib/chef/resource/homebrew_package.rb +32 -3
- data/lib/chef/resource/homebrew_update.rb +110 -0
- data/lib/chef/resource/hostname.rb +27 -40
- data/lib/chef/resource/http_request.rb +1 -1
- data/lib/chef/resource/ifconfig.rb +52 -5
- data/lib/chef/resource/kernel_module.rb +15 -2
- data/lib/chef/resource/ksh.rb +3 -3
- data/lib/chef/resource/launchd.rb +18 -17
- data/lib/chef/resource/locale.rb +4 -4
- data/lib/chef/resource/lwrp_base.rb +4 -5
- data/lib/chef/resource/macos_userdefaults.rb +176 -61
- data/lib/chef/resource/mdadm.rb +2 -2
- data/lib/chef/resource/mount.rb +9 -3
- data/lib/chef/resource/notify_group.rb +0 -1
- data/lib/chef/resource/ohai.rb +46 -3
- data/lib/chef/resource/ohai_hint.rb +33 -0
- data/lib/chef/resource/openssl_dhparam.rb +29 -5
- data/lib/chef/resource/openssl_ec_private_key.rb +8 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +4 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +8 -3
- data/lib/chef/resource/openssl_rsa_public_key.rb +2 -0
- data/lib/chef/resource/openssl_x509_certificate.rb +49 -49
- data/lib/chef/resource/openssl_x509_crl.rb +22 -12
- data/lib/chef/resource/openssl_x509_request.rb +37 -36
- data/lib/chef/resource/osx_profile.rb +292 -6
- data/lib/chef/resource/perl.rb +2 -3
- data/lib/chef/resource/plist.rb +26 -11
- data/lib/chef/resource/powershell_package_source.rb +25 -24
- data/lib/chef/resource/powershell_script.rb +40 -41
- data/lib/chef/resource/python.rb +2 -3
- data/lib/chef/resource/reboot.rb +2 -2
- data/lib/chef/resource/registry_key.rb +93 -2
- data/lib/chef/resource/remote_directory.rb +1 -1
- data/lib/chef/resource/remote_file.rb +26 -10
- data/lib/chef/resource/rhsm_register.rb +39 -10
- data/lib/chef/resource/rhsm_subscription.rb +5 -5
- data/lib/chef/resource/route.rb +1 -1
- data/lib/chef/resource/ruby.rb +1 -6
- data/lib/chef/resource/ruby_block.rb +2 -2
- data/lib/chef/resource/scm/_scm.rb +2 -1
- data/lib/chef/resource/scm/git.rb +82 -1
- data/lib/chef/resource/scm/subversion.rb +14 -2
- data/lib/chef/resource/script.rb +2 -2
- data/lib/chef/resource/service.rb +5 -5
- data/lib/chef/resource/solaris_package.rb +0 -2
- data/lib/chef/resource/ssh_known_hosts_entry.rb +18 -3
- data/lib/chef/resource/sudo.rb +32 -5
- data/lib/chef/resource/support/client.erb +68 -0
- data/lib/chef/resource/support/cron.d.erb +1 -1
- data/lib/chef/resource/support/cron_access.erb +1 -1
- data/lib/chef/resource/support/sudoer.erb +1 -1
- data/lib/chef/resource/support/ulimit.erb +1 -1
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/sysctl.rb +6 -10
- data/lib/chef/resource/systemd_unit.rb +45 -4
- data/lib/chef/resource/template.rb +4 -4
- data/lib/chef/resource/timezone.rb +122 -68
- data/lib/chef/resource/user/windows_user.rb +5 -0
- data/lib/chef/resource/user_ulimit.rb +2 -1
- data/lib/chef/resource/windows_ad_join.rb +51 -13
- data/lib/chef/resource/windows_audit_policy.rb +232 -0
- data/lib/chef/resource/windows_auto_run.rb +13 -0
- data/lib/chef/resource/windows_certificate.rb +95 -39
- data/lib/chef/resource/windows_dfs_folder.rb +2 -0
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -0
- data/lib/chef/resource/windows_dfs_server.rb +9 -4
- data/lib/chef/resource/windows_dns_record.rb +25 -5
- data/lib/chef/resource/windows_dns_zone.rb +12 -7
- data/lib/chef/resource/windows_env.rb +173 -0
- data/lib/chef/resource/windows_feature.rb +4 -0
- data/lib/chef/resource/windows_feature_dism.rb +10 -0
- data/lib/chef/resource/windows_feature_powershell.rb +14 -2
- data/lib/chef/resource/windows_firewall_profile.rb +196 -0
- data/lib/chef/resource/windows_firewall_rule.rb +14 -14
- data/lib/chef/resource/windows_font.rb +7 -5
- data/lib/chef/resource/windows_package.rb +30 -6
- data/lib/chef/resource/windows_pagefile.rb +5 -1
- data/lib/chef/resource/windows_path.rb +38 -0
- data/lib/chef/resource/windows_printer.rb +22 -21
- data/lib/chef/resource/windows_printer_port.rb +20 -17
- data/lib/chef/resource/windows_script.rb +2 -16
- data/lib/chef/resource/windows_security_policy.rb +98 -49
- data/lib/chef/resource/windows_service.rb +108 -0
- data/lib/chef/resource/windows_share.rb +23 -21
- data/lib/chef/resource/windows_shortcut.rb +3 -2
- data/lib/chef/resource/windows_task.rb +633 -32
- data/lib/chef/resource/windows_uac.rb +5 -1
- data/lib/chef/resource/windows_user_privilege.rb +111 -77
- data/lib/chef/resource/windows_workgroup.rb +11 -10
- data/lib/chef/resource/yum_package.rb +2 -2
- data/lib/chef/resource/yum_repository.rb +15 -10
- data/lib/chef/resource.rb +60 -27
- data/lib/chef/resource_collection/resource_set.rb +2 -6
- data/lib/chef/resource_collection/stepable_iterator.rb +1 -2
- data/lib/chef/resource_inspector.rb +82 -70
- data/lib/chef/resource_reporter.rb +1 -3
- data/lib/chef/resources.rb +9 -3
- data/lib/chef/role.rb +3 -4
- data/lib/chef/run_context/cookbook_compiler.rb +21 -21
- data/lib/chef/run_context.rb +2 -2
- data/lib/chef/run_lock.rb +3 -3
- data/lib/chef/run_status.rb +2 -6
- data/lib/chef/search/query.rb +7 -6
- data/lib/chef/server_api.rb +0 -4
- data/lib/chef/server_api_versions.rb +4 -0
- data/lib/chef/shell/ext.rb +15 -15
- data/lib/chef/shell/shell_session.rb +4 -2
- data/lib/chef/shell.rb +63 -27
- data/lib/chef/train_transport.rb +5 -104
- data/lib/chef/util/backup.rb +2 -2
- data/lib/chef/util/diff.rb +16 -17
- data/lib/chef/util/dsc/configuration_generator.rb +53 -12
- data/lib/chef/util/dsc/lcm_output_parser.rb +4 -7
- data/lib/chef/util/dsc/local_configuration_manager.rb +18 -15
- data/lib/chef/util/dsc/resource_store.rb +5 -11
- data/lib/chef/util/powershell/ps_credential.rb +18 -14
- data/lib/chef/util/threaded_job_queue.rb +0 -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 +2 -2
- data/lib/chef/version_string.rb +1 -1
- data/lib/chef/win32/api/file.rb +4 -0
- data/lib/chef/win32/api.rb +9 -2
- data/lib/chef/win32/crypto.rb +1 -1
- data/lib/chef/win32/file/version_info.rb +5 -5
- data/lib/chef/win32/file.rb +4 -4
- data/lib/chef/win32/registry.rb +4 -6
- data/lib/chef/win32/security/sid.rb +1 -1
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/unicode.rb +1 -1
- data/lib/chef/win32/version.rb +4 -2
- 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/data/rubygems.org/latest_specs.4.8.gz +0 -0
- data/spec/data/rubygems.org/nonexistent_gem +0 -0
- data/spec/data/rubygems.org/sexp_processor +0 -0
- data/spec/data/rubygems.org/sexp_processor-4.15.1.gemspec.rz +0 -0
- data/spec/data/shef-config.rb +1 -1
- data/spec/data/ssl/binary/chef-rspec-der.cert +0 -0
- data/spec/data/ssl/binary/chef-rspec-der.key +0 -0
- data/spec/data/ssl/chef-rspec.cert +15 -15
- data/spec/functional/assets/yumrepo-empty/repodata/01a3b-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/401dc-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/5dc1e-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/6bf96-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/7c365-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/dabe2-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +55 -0
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
- data/spec/functional/knife/configure_spec.rb +1 -1
- data/spec/functional/knife/ssh_spec.rb +5 -16
- data/spec/functional/mixin/powershell_out_spec.rb +11 -3
- data/spec/functional/resource/aix_service_spec.rb +11 -4
- data/spec/functional/resource/aixinit_service_spec.rb +9 -10
- data/spec/functional/resource/apt_package_spec.rb +4 -7
- data/spec/functional/resource/bash_spec.rb +3 -2
- data/spec/functional/resource/bff_spec.rb +3 -3
- data/spec/functional/resource/chocolatey_package_spec.rb +11 -3
- data/spec/functional/resource/cookbook_file_spec.rb +1 -1
- data/spec/functional/resource/cron_spec.rb +24 -6
- data/spec/functional/resource/dnf_package_spec.rb +323 -17
- data/spec/functional/resource/dsc_resource_spec.rb +1 -1
- data/spec/functional/resource/dsc_script_spec.rb +6 -10
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +23 -1
- data/spec/functional/resource/group_spec.rb +26 -10
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +8 -8
- data/spec/functional/resource/link_spec.rb +30 -25
- data/spec/functional/resource/mount_spec.rb +19 -3
- data/spec/functional/resource/msu_package_spec.rb +9 -3
- data/spec/functional/resource/ohai_spec.rb +2 -10
- data/spec/functional/resource/powershell_package_source_spec.rb +107 -0
- data/spec/functional/resource/powershell_script_spec.rb +65 -22
- data/spec/functional/resource/remote_file_spec.rb +9 -15
- data/spec/functional/resource/rpm_spec.rb +3 -3
- data/spec/functional/resource/timezone_spec.rb +2 -0
- data/spec/functional/resource/user/dscl_spec.rb +1 -1
- data/spec/functional/resource/user/mac_user_spec.rb +1 -1
- data/spec/functional/resource/windows_certificate_spec.rb +206 -382
- data/spec/functional/resource/windows_firewall_rule_spec.rb +93 -0
- data/spec/functional/resource/windows_font_spec.rb +50 -0
- data/spec/functional/resource/windows_package_spec.rb +36 -11
- data/spec/functional/resource/windows_path_spec.rb +4 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -4
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_share_spec.rb +103 -0
- data/spec/functional/resource/windows_task_spec.rb +27 -27
- data/spec/functional/resource/windows_user_privilege_spec.rb +1 -2
- data/spec/functional/resource/yum_package_spec.rb +16 -1
- data/spec/functional/resource/zypper_package_spec.rb +15 -1
- data/spec/functional/run_lock_spec.rb +26 -25
- data/spec/functional/shell_spec.rb +10 -6
- data/spec/functional/version_spec.rb +4 -4
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/functional/win32/service_manager_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +6 -5
- data/spec/integration/client/exit_code_spec.rb +3 -2
- data/spec/integration/client/fips_spec.rb +21 -0
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/compliance/compliance_spec.rb +82 -0
- data/spec/integration/knife/client_key_create_spec.rb +1 -1
- data/spec/integration/knife/common_options_spec.rb +12 -12
- data/spec/integration/knife/config_list_spec.rb +220 -0
- data/spec/integration/knife/config_show_spec.rb +192 -0
- data/spec/integration/knife/config_use_spec.rb +198 -0
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
- 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/delete_spec.rb +1 -1
- data/spec/integration/knife/diff_spec.rb +3 -1
- data/spec/integration/knife/download_spec.rb +5 -3
- data/spec/integration/knife/environment_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_create_spec.rb +1 -1
- data/spec/integration/knife/node_environment_set_spec.rb +1 -1
- data/spec/integration/knife/node_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_add_spec.rb +4 -4
- data/spec/integration/knife/node_run_list_remove_spec.rb +1 -1
- data/spec/integration/knife/node_run_list_set_spec.rb +1 -1
- data/spec/integration/knife/node_show_spec.rb +1 -1
- data/spec/integration/knife/role_from_file_spec.rb +1 -1
- data/spec/integration/knife/serve_spec.rb +5 -5
- data/spec/integration/knife/upload_spec.rb +8 -7
- data/spec/integration/ohai/ohai_spec.rb +61 -0
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +2 -2
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +2 -2
- data/spec/integration/recipes/notifying_block_spec.rb +1 -1
- data/spec/integration/recipes/provider_choice.rb +2 -2
- data/spec/integration/recipes/recipe_dsl_spec.rb +6 -1
- data/spec/integration/recipes/remote_directory.rb +1 -1
- data/spec/integration/recipes/resource_action_spec.rb +14 -0
- 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/integration/solo/solo_spec.rb +5 -5
- data/spec/spec_helper.rb +30 -17
- data/spec/stress/win32/file_spec.rb +1 -1
- data/spec/support/chef_helpers.rb +3 -22
- data/spec/support/lib/chef/resource/cat.rb +1 -1
- data/spec/support/lib/chef/resource/one_two_three_four.rb +1 -1
- data/spec/support/matchers/leak.rb +2 -2
- data/spec/support/mock/platform.rb +24 -16
- data/spec/support/platform_helpers.rb +36 -41
- data/spec/support/platforms/win32/spec_service.rb +2 -2
- data/spec/support/shared/functional/directory_resource.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +2 -2
- data/spec/support/shared/functional/file_resource.rb +20 -21
- data/spec/support/shared/functional/securable_resource.rb +109 -29
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/win32_service.rb +2 -2
- data/spec/support/shared/functional/windows_script.rb +5 -5
- data/spec/support/shared/integration/integration_helper.rb +22 -52
- data/spec/support/shared/integration/knife_support.rb +2 -9
- data/spec/support/shared/unit/application_dot_d.rb +5 -4
- data/spec/support/shared/unit/execute_resource.rb +1 -1
- data/spec/support/shared/unit/knife_shared.rb +1 -1
- data/spec/support/shared/unit/provider/file.rb +26 -8
- data/spec/support/shared/unit/script_resource.rb +10 -24
- data/spec/support/shared/unit/windows_script_resource.rb +16 -29
- data/spec/tiny_server.rb +0 -1
- data/spec/unit/application/client_spec.rb +2 -2
- data/spec/unit/application/exit_code_spec.rb +10 -0
- data/spec/unit/application/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +15 -8
- data/spec/unit/chef_fs/config_spec.rb +3 -3
- data/spec/unit/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- 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} +6 -2
- data/spec/unit/chef_fs/path_util_spec.rb +1 -1
- data/spec/unit/client_spec.rb +25 -5
- data/spec/unit/compliance/fetcher/automate_spec.rb +142 -0
- data/spec/unit/compliance/fetcher/chef_server_spec.rb +93 -0
- data/spec/unit/compliance/reporter/automate_spec.rb +427 -0
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +177 -0
- data/spec/unit/compliance/reporter/compliance_enforcer_spec.rb +48 -0
- data/spec/unit/compliance/runner_spec.rb +215 -0
- data/spec/unit/cookbook/gem_installer_spec.rb +2 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +28 -26
- data/spec/unit/cookbook_spec.rb +2 -2
- data/spec/unit/cookbook_version_spec.rb +52 -0
- data/spec/unit/daemon_spec.rb +1 -5
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/data_collector/config_validation_spec.rb +208 -0
- data/spec/unit/data_collector_spec.rb +100 -120
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/dsl/declare_resource_spec.rb +1 -1
- data/spec/unit/dsl/platform_introspection_spec.rb +1 -0
- data/spec/unit/dsl/reboot_pending_spec.rb +2 -2
- data/spec/unit/environment_spec.rb +12 -8
- data/spec/unit/event_dispatch/dispatcher_spec.rb +3 -0
- data/spec/unit/file_access_control_spec.rb +1 -1
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +2 -2
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +11 -11
- data/spec/unit/guard_interpreter_spec.rb +1 -1
- data/spec/unit/http/api_versions_spec.rb +20 -2
- data/spec/unit/http/ssl_policies_spec.rb +125 -66
- data/spec/unit/json_compat_spec.rb +1 -1
- data/spec/unit/knife/bootstrap_spec.rb +69 -45
- data/spec/unit/knife/client_create_spec.rb +2 -2
- data/spec/unit/knife/configure_client_spec.rb +5 -5
- data/spec/unit/knife/configure_spec.rb +3 -3
- data/spec/unit/knife/cookbook_delete_spec.rb +2 -2
- data/spec/unit/knife/cookbook_download_spec.rb +8 -8
- data/spec/unit/knife/cookbook_list_spec.rb +2 -2
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +1 -1
- data/spec/unit/knife/cookbook_metadata_spec.rb +3 -3
- 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/hashed_command_loader_spec.rb +3 -3
- data/spec/unit/knife/core/node_editor_spec.rb +1 -1
- data/spec/unit/knife/core/status_presenter_spec.rb +54 -0
- data/spec/unit/knife/core/ui_spec.rb +1 -0
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +24 -15
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
- data/spec/unit/knife/environment_compare_spec.rb +3 -3
- data/spec/unit/knife/ssh_spec.rb +2 -2
- data/spec/unit/knife/supermarket_download_spec.rb +8 -8
- data/spec/unit/knife/supermarket_list_spec.rb +3 -3
- data/spec/unit/knife/supermarket_search_spec.rb +1 -1
- data/spec/unit/knife/supermarket_share_spec.rb +6 -7
- data/spec/unit/knife/tag_create_spec.rb +1 -1
- data/spec/unit/knife/tag_delete_spec.rb +1 -1
- data/spec/unit/knife/user_create_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 +12 -9
- data/spec/unit/mixin/checksum_spec.rb +28 -0
- data/spec/unit/mixin/deep_merge_spec.rb +15 -0
- data/spec/unit/mixin/{path_sanity_spec.rb → default_paths_spec.rb} +14 -14
- data/spec/unit/mixin/openssl_helper_spec.rb +1 -8
- data/spec/unit/mixin/powershell_exec_spec.rb +43 -6
- data/spec/unit/mixin/powershell_out_spec.rb +16 -4
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +2 -3
- data/spec/unit/mixin/shell_out_spec.rb +25 -26
- data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
- data/spec/unit/mixin/template_spec.rb +30 -30
- 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 +9 -1
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +4 -4
- data/spec/unit/node/immutable_collections_spec.rb +8 -4
- data/spec/unit/node_spec.rb +103 -16
- data/spec/unit/platform/query_helpers_spec.rb +13 -14
- data/spec/unit/policy_builder/policyfile_spec.rb +11 -1
- 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 +43 -49
- data/spec/unit/provider/dsc_resource_spec.rb +30 -63
- data/spec/unit/provider/dsc_script_spec.rb +11 -11
- data/spec/unit/provider/execute_spec.rb +1 -8
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/group/windows_spec.rb +6 -0
- data/spec/unit/provider/group_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/mount/linux_spec.rb +107 -0
- data/spec/unit/provider/mount/mount_spec.rb +73 -10
- data/spec/unit/provider/mount/solaris_spec.rb +1 -1
- data/spec/unit/provider/mount/windows_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +31 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +2 -3
- data/spec/unit/provider/package/dnf/python_helper_spec.rb +8 -2
- data/spec/unit/provider/package/freebsd/pkgng_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/powershell_spec.rb +162 -99
- data/spec/unit/provider/package/rubygems_spec.rb +50 -20
- 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/package/zypper_spec.rb +0 -25
- data/spec/unit/provider/package_spec.rb +2 -2
- data/spec/unit/provider/powershell_script_spec.rb +20 -44
- data/spec/unit/provider/remote_directory_spec.rb +9 -9
- data/spec/unit/provider/route_spec.rb +0 -2
- data/spec/unit/provider/script_spec.rb +20 -110
- data/spec/unit/provider/service/arch_service_spec.rb +3 -2
- data/spec/unit/provider/service/debian_service_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_service_spec.rb +7 -7
- data/spec/unit/provider/service/macosx_spec.rb +6 -6
- data/spec/unit/provider/service/redhat_spec.rb +3 -3
- data/spec/unit/provider/service/upstart_service_spec.rb +3 -3
- data/spec/unit/provider/service/windows_spec.rb +2 -6
- data/spec/unit/provider/subversion_spec.rb +0 -3
- data/spec/unit/provider/systemd_unit_spec.rb +29 -25
- data/spec/unit/provider/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/user_spec.rb +7 -1
- data/spec/unit/provider/windows_env_spec.rb +22 -37
- data/spec/unit/provider/windows_path_spec.rb +6 -11
- data/spec/unit/provider/windows_task_spec.rb +7 -6
- data/spec/unit/provider/zypper_repository_spec.rb +60 -10
- data/spec/unit/provider_spec.rb +1 -0
- data/spec/unit/recipe_spec.rb +1 -1
- data/spec/unit/resource/archive_file_spec.rb +23 -2
- data/spec/unit/resource/batch_spec.rb +6 -6
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/build_essential_spec.rb +0 -12
- data/spec/unit/resource/chef_client_config_spec.rb +137 -0
- data/spec/unit/resource/chef_client_cron_spec.rb +51 -14
- data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +43 -5
- data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +68 -0
- data/spec/unit/resource/cron_spec.rb +2 -2
- data/spec/unit/resource/execute_spec.rb +123 -118
- 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_cask_spec.rb +29 -11
- data/spec/unit/resource/homebrew_update_spec.rb +30 -0
- data/spec/unit/resource/ifconfig_spec.rb +2 -10
- data/spec/unit/resource/launchd_spec.rb +8 -0
- data/spec/unit/resource/macos_user_defaults_spec.rb +103 -2
- data/spec/unit/resource/mount_spec.rb +28 -5
- data/spec/unit/resource/osx_profile_spec.rb +299 -0
- data/spec/unit/resource/powershell_package_source_spec.rb +20 -20
- data/spec/unit/resource/powershell_script_spec.rb +15 -108
- data/spec/unit/resource/rhsm_register_spec.rb +56 -18
- data/spec/unit/resource/rhsm_subscription_spec.rb +50 -3
- data/spec/unit/resource/script_spec.rb +6 -1
- data/spec/unit/resource/service_spec.rb +2 -2
- data/spec/unit/resource/solaris_package_spec.rb +8 -10
- data/spec/unit/resource/systemd_unit_spec.rb +1 -1
- data/spec/unit/resource/timezone_spec.rb +64 -1
- data/spec/unit/{log_spec.rb → resource/user/windows_user_spec.rb} +16 -4
- data/spec/unit/resource/user_ulimit_spec.rb +14 -1
- data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
- data/spec/unit/resource/windows_certificate_spec.rb +12 -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_feature_powershell_spec.rb +30 -4
- 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 +3 -3
- data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_inspector_spec.rb +10 -5
- data/spec/unit/resource_reporter_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +137 -3
- data/spec/unit/role_spec.rb +30 -28
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -1
- data/spec/unit/run_lock_spec.rb +6 -2
- data/spec/unit/runner_spec.rb +1 -2
- data/spec/unit/scan_access_control_spec.rb +1 -1
- data/spec/unit/server_api_spec.rb +43 -16
- data/spec/unit/shell/shell_ext_spec.rb +46 -3
- data/spec/unit/shell/shell_session_spec.rb +35 -64
- data/spec/unit/shell_spec.rb +18 -21
- data/spec/unit/train_transport_spec.rb +14 -13
- 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 +80 -1
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +27 -35
- data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +4 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
- data/spec/unit/win32/security_spec.rb +4 -3
- data/tasks/rspec.rb +2 -4
- metadata +172 -104
- data/lib/chef/dist.rb +0 -68
- data/lib/chef/monkey_patches/net_http.rb +0 -22
- data/lib/chef/provider/osx_profile.rb +0 -255
- data/lib/chef/provider/windows_env.rb +0 -210
- data/lib/chef/provider/windows_path.rb +0 -61
- data/lib/chef/provider/windows_task.rb +0 -635
- data/lib/chef/resource/cron.rb +0 -157
- data/lib/chef/util/powershell/cmdlet.rb +0 -173
- data/lib/chef/util/powershell/cmdlet_result.rb +0 -61
- data/spec/data/trusted_certs_empty/.gitkeep +0 -0
- data/spec/data/trusted_certs_empty/README.md +0 -1
- data/spec/functional/assets/yumrepo/repodata/4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo/repodata/bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo/repodata/c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz +0 -0
- data/spec/functional/util/powershell/cmdlet_spec.rb +0 -111
- data/spec/integration/knife/config_get_profile_spec.rb +0 -113
- data/spec/integration/knife/config_get_spec.rb +0 -191
- data/spec/integration/knife/config_list_profiles_spec.rb +0 -190
- data/spec/integration/knife/config_use_profile_spec.rb +0 -101
- data/spec/scripts/ssl-serve.rb +0 -47
- data/spec/support/mock/constant.rb +0 -52
- data/spec/unit/provider/osx_profile_spec.rb +0 -255
- data/spec/unit/provider_resolver_spec.rb +0 -885
- data/spec/unit/resource/data/InstallHistory_with_CLT.plist +0 -92
- data/spec/unit/resource/data/InstallHistory_without_CLT.plist +0 -38
- data/spec/unit/util/powershell/cmdlet_spec.rb +0 -106
@@ -17,6 +17,10 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require_relative "../resource"
|
20
|
+
require_relative "../log"
|
21
|
+
require_relative "../resource/file"
|
22
|
+
autoload :UUIDTools, "uuidtools"
|
23
|
+
autoload :Plist, "plist"
|
20
24
|
|
21
25
|
class Chef
|
22
26
|
class Resource
|
@@ -26,11 +30,72 @@ class Chef
|
|
26
30
|
provides :osx_profile
|
27
31
|
provides :osx_config_profile
|
28
32
|
|
29
|
-
description "Use the **osx_profile** resource to manage configuration profiles (
|
33
|
+
description "Use the **osx_profile** resource to manage configuration profiles (`.mobileconfig` files) on the macOS platform. The **osx_profile** resource installs profiles by using the uuidgen library to generate a unique `ProfileUUID`, and then using the `profiles` command to install the profile on the system."
|
30
34
|
introduced "12.7"
|
35
|
+
examples <<~DOC
|
36
|
+
**Install a profile from a cookbook file**
|
31
37
|
|
32
|
-
|
33
|
-
|
38
|
+
```ruby
|
39
|
+
osx_profile 'com.company.screensaver.mobileconfig'
|
40
|
+
```
|
41
|
+
|
42
|
+
**Install profile from a hash**
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
profile_hash = {
|
46
|
+
'PayloadIdentifier' => 'com.company.screensaver',
|
47
|
+
'PayloadRemovalDisallowed' => false,
|
48
|
+
'PayloadScope' => 'System',
|
49
|
+
'PayloadType' => 'Configuration',
|
50
|
+
'PayloadUUID' => '1781fbec-3325-565f-9022-8aa28135c3cc',
|
51
|
+
'PayloadOrganization' => 'Chef',
|
52
|
+
'PayloadVersion' => 1,
|
53
|
+
'PayloadDisplayName' => 'Screensaver Settings',
|
54
|
+
'PayloadContent'=> [
|
55
|
+
{
|
56
|
+
'PayloadType' => 'com.apple.ManagedClient.preferences',
|
57
|
+
'PayloadVersion' => 1,
|
58
|
+
'PayloadIdentifier' => 'com.company.screensaver',
|
59
|
+
'PayloadUUID' => '73fc30e0-1e57-0131-c32d-000c2944c108',
|
60
|
+
'PayloadEnabled' => true,
|
61
|
+
'PayloadDisplayName' => 'com.apple.screensaver',
|
62
|
+
'PayloadContent' => {
|
63
|
+
'com.apple.screensaver' => {
|
64
|
+
'Forced' => [
|
65
|
+
{
|
66
|
+
'mcx_preference_settings' => {
|
67
|
+
'idleTime' => 0,
|
68
|
+
},
|
69
|
+
},
|
70
|
+
],
|
71
|
+
},
|
72
|
+
},
|
73
|
+
},
|
74
|
+
],
|
75
|
+
}
|
76
|
+
|
77
|
+
osx_profile 'Install screensaver profile' do
|
78
|
+
profile profile_hash
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
82
|
+
**Remove profile using identifier in resource name**
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
osx_profile 'com.company.screensaver' do
|
86
|
+
action :remove
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
**Remove profile by identifier and user friendly resource name**
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
osx_profile 'Remove screensaver profile' do
|
94
|
+
identifier 'com.company.screensaver'
|
95
|
+
action :remove
|
96
|
+
end
|
97
|
+
```
|
98
|
+
DOC
|
34
99
|
|
35
100
|
property :profile_name, String,
|
36
101
|
description: "Use to specify the name of the profile, if different from the name of the resource block.",
|
@@ -40,10 +105,231 @@ class Chef
|
|
40
105
|
description: "Use to specify a profile. This may be the name of a profile contained in a cookbook or a Hash that contains the contents of the profile."
|
41
106
|
|
42
107
|
property :identifier, String,
|
43
|
-
description: "Use to specify the identifier for the profile, such as com.company.screensaver
|
108
|
+
description: "Use to specify the identifier for the profile, such as `com.company.screensaver`."
|
109
|
+
|
110
|
+
# this is not a property it is necessary for the tempfile this resource uses to work (FIXME: this is terrible)
|
111
|
+
#
|
112
|
+
# @api private
|
113
|
+
#
|
114
|
+
def path(path = nil)
|
115
|
+
@path ||= path
|
116
|
+
@path
|
117
|
+
end
|
118
|
+
|
119
|
+
action_class do
|
120
|
+
def load_current_resource
|
121
|
+
@current_resource = Chef::Resource::OsxProfile.new(new_resource.name)
|
122
|
+
current_resource.profile_name(new_resource.profile_name)
|
123
|
+
|
124
|
+
if new_profile_hash
|
125
|
+
new_profile_hash["PayloadUUID"] = config_uuid(new_profile_hash)
|
126
|
+
end
|
127
|
+
|
128
|
+
current_resource.profile(current_profile)
|
129
|
+
end
|
130
|
+
|
131
|
+
def current_profile
|
132
|
+
all_profiles = get_installed_profiles
|
133
|
+
|
134
|
+
if all_profiles && all_profiles.key?("_computerlevel")
|
135
|
+
return all_profiles["_computerlevel"].find do |item|
|
136
|
+
item["ProfileIdentifier"] == new_profile_identifier
|
137
|
+
end
|
138
|
+
end
|
139
|
+
nil
|
140
|
+
end
|
141
|
+
|
142
|
+
def invalid_profile_name?(name_or_identifier)
|
143
|
+
name_or_identifier.end_with?(".mobileconfig") || !/^\w+(?:(\.| )\w+)+$/.match(name_or_identifier)
|
144
|
+
end
|
145
|
+
|
146
|
+
def check_resource_semantics!
|
147
|
+
if action == :remove
|
148
|
+
if new_profile_identifier
|
149
|
+
if invalid_profile_name?(new_profile_identifier)
|
150
|
+
raise "when removing using the identifier property, it must match the profile identifier"
|
151
|
+
end
|
152
|
+
else
|
153
|
+
if invalid_profile_name?(new_resource.profile_name)
|
154
|
+
raise "When removing by resource name, it must match the profile identifier"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
if action == :install
|
160
|
+
# we only do this check for the install action so that profiles can still be removed on macOS 11+
|
161
|
+
if mac? && node["platform_version"] =~ ">= 11.0"
|
162
|
+
raise "The osx_profile resource is not available on macOS Big Sur or above due to Apple's removal of support for CLI profile installation"
|
163
|
+
end
|
164
|
+
|
165
|
+
if new_profile_hash.is_a?(Hash) && !new_profile_hash.include?("PayloadIdentifier")
|
166
|
+
raise "The specified profile does not seem to be valid"
|
167
|
+
end
|
168
|
+
if new_profile_hash.is_a?(String) && !new_profile_hash.end_with?(".mobileconfig")
|
169
|
+
raise "#{new_profile_hash}' is not a valid profile"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
action :install do
|
176
|
+
unless profile_installed?
|
177
|
+
converge_by("install profile #{new_profile_identifier}") do
|
178
|
+
profile_path = write_profile_to_disk
|
179
|
+
install_profile(profile_path)
|
180
|
+
get_installed_profiles(true)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
action :remove do
|
186
|
+
# Clean up profile after removing it
|
187
|
+
if profile_installed?
|
188
|
+
converge_by("remove profile #{new_profile_identifier}") do
|
189
|
+
remove_profile
|
190
|
+
get_installed_profiles(true)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
action_class do
|
196
|
+
private
|
197
|
+
|
198
|
+
def profile
|
199
|
+
@profile ||= new_resource.profile || new_resource.profile_name
|
200
|
+
end
|
201
|
+
|
202
|
+
def new_profile_hash
|
203
|
+
@new_profile_hash ||= get_profile_hash(profile)
|
204
|
+
end
|
205
|
+
|
206
|
+
def new_profile_identifier
|
207
|
+
@new_profile_identifier ||= if new_profile_hash
|
208
|
+
new_profile_hash["PayloadIdentifier"]
|
209
|
+
else
|
210
|
+
new_resource.identifier || new_resource.profile_name
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def load_profile_hash(new_profile)
|
215
|
+
# file must exist in cookbook
|
216
|
+
return nil unless new_profile.end_with?(".mobileconfig")
|
217
|
+
|
218
|
+
unless cookbook_file_available?(new_profile)
|
219
|
+
raise Chef::Exceptions::FileNotFound, "#{self}: '#{new_profile}' not found in cookbook"
|
220
|
+
end
|
221
|
+
|
222
|
+
cookbook_profile = cache_cookbook_profile(new_profile)
|
223
|
+
::Plist.parse_xml(cookbook_profile)
|
224
|
+
end
|
225
|
+
|
226
|
+
def cookbook_file_available?(cookbook_file)
|
227
|
+
run_context.has_cookbook_file_in_cookbook?(
|
228
|
+
new_resource.cookbook_name, cookbook_file
|
229
|
+
)
|
230
|
+
end
|
231
|
+
|
232
|
+
def get_cache_dir
|
233
|
+
Chef::FileCache.create_cache_path(
|
234
|
+
"profiles/#{new_resource.cookbook_name}"
|
235
|
+
)
|
236
|
+
end
|
237
|
+
|
238
|
+
def cache_cookbook_profile(cookbook_file)
|
239
|
+
Chef::FileCache.create_cache_path(
|
240
|
+
::File.join(
|
241
|
+
"profiles",
|
242
|
+
new_resource.cookbook_name,
|
243
|
+
::File.dirname(cookbook_file)
|
244
|
+
)
|
245
|
+
)
|
246
|
+
|
247
|
+
path = ::File.join( get_cache_dir, "#{cookbook_file}.remote")
|
248
|
+
|
249
|
+
cookbook_file path do
|
250
|
+
cookbook_name = new_resource.cookbook_name
|
251
|
+
source(cookbook_file)
|
252
|
+
backup(false)
|
253
|
+
run_action(:create)
|
254
|
+
end
|
255
|
+
|
256
|
+
path
|
257
|
+
end
|
258
|
+
|
259
|
+
def get_profile_hash(new_profile)
|
260
|
+
if new_profile.is_a?(Hash)
|
261
|
+
new_profile
|
262
|
+
elsif new_profile.is_a?(String)
|
263
|
+
load_profile_hash(new_profile)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def config_uuid(profile)
|
268
|
+
# Make a UUID of the profile contents and return as string
|
269
|
+
UUIDTools::UUID.sha1_create(
|
270
|
+
UUIDTools::UUID_DNS_NAMESPACE,
|
271
|
+
profile.to_s
|
272
|
+
).to_s
|
273
|
+
end
|
274
|
+
|
275
|
+
def write_profile_to_disk
|
276
|
+
# FIXME: this is kind of terrible, the resource needs a tempfile to use and
|
277
|
+
# wants it created similarly to the file providers (with all the magic necessary
|
278
|
+
# for determining if it should go in the cwd or into a tmpdir), but it abuses
|
279
|
+
# the Chef::FileContentManagement::Tempfile API to do that, which requires setting
|
280
|
+
# a `path` method on the resource because of tight-coupling to the file provider
|
281
|
+
# pattern. We don't just want to use a file here because the point is to get
|
282
|
+
# at the tempfile pattern from the file provider, but to feed that into a shell
|
283
|
+
# command rather than deploying the file to somewhere on disk. There's some
|
284
|
+
# better API that needs extracting here.
|
285
|
+
new_resource.path(Chef::FileCache.create_cache_path("profiles"))
|
286
|
+
tempfile = Chef::FileContentManagement::Tempfile.new(new_resource).tempfile
|
287
|
+
tempfile.write(new_profile_hash.to_plist)
|
288
|
+
tempfile.close
|
289
|
+
tempfile.path
|
290
|
+
end
|
291
|
+
|
292
|
+
def install_profile(profile_path)
|
293
|
+
cmd = [ "/usr/bin/profiles", "-I", "-F", profile_path ]
|
294
|
+
logger.trace("cmd: #{cmd.join(" ")}")
|
295
|
+
shell_out!(*cmd)
|
296
|
+
end
|
297
|
+
|
298
|
+
def remove_profile
|
299
|
+
cmd = [ "/usr/bin/profiles", "-R", "-p", new_profile_identifier ]
|
300
|
+
logger.trace("cmd: #{cmd.join(" ")}")
|
301
|
+
shell_out!(*cmd)
|
302
|
+
end
|
303
|
+
|
304
|
+
#
|
305
|
+
# FIXME FIXME FIXME
|
306
|
+
# The node object should not be used for caching state like this and this is not a public API and may break.
|
307
|
+
# FIXME FIXME FIXME
|
308
|
+
#
|
309
|
+
|
310
|
+
def get_installed_profiles(update = nil)
|
311
|
+
logger.trace("Saving profile data to node.run_state")
|
312
|
+
if update
|
313
|
+
node.run_state[:config_profiles] = query_installed_profiles
|
314
|
+
else
|
315
|
+
node.run_state[:config_profiles] ||= query_installed_profiles
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
def query_installed_profiles
|
320
|
+
logger.trace("Running /usr/bin/profiles -P -o stdout-xml to determine profile state")
|
321
|
+
so = shell_out( "/usr/bin/profiles", "-P", "-o", "stdout-xml" )
|
322
|
+
::Plist.parse_xml(so.stdout)
|
323
|
+
end
|
324
|
+
|
325
|
+
def profile_installed?
|
326
|
+
# Profile Identifier and UUID must match a currently installed profile
|
327
|
+
return false if current_resource.profile.nil? || current_resource.profile.empty?
|
328
|
+
return true if action == :remove
|
44
329
|
|
45
|
-
|
46
|
-
|
330
|
+
current_resource.profile["ProfileUUID"] == new_profile_hash["PayloadUUID"]
|
331
|
+
end
|
332
|
+
end
|
47
333
|
end
|
48
334
|
end
|
49
335
|
end
|
data/lib/chef/resource/perl.rb
CHANGED
@@ -17,7 +17,6 @@
|
|
17
17
|
#
|
18
18
|
|
19
19
|
require_relative "script"
|
20
|
-
require_relative "../provider/script"
|
21
20
|
|
22
21
|
class Chef
|
23
22
|
class Resource
|
@@ -33,9 +32,9 @@ class Chef
|
|
33
32
|
|
34
33
|
description "Use the **perl** resource to execute scripts using the Perl interpreter."\
|
35
34
|
" This resource may also use any of the actions and properties that are"\
|
36
|
-
" available to the execute resource. Commands that are executed with this"\
|
35
|
+
" available to the **execute** resource. Commands that are executed with this"\
|
37
36
|
" resource are (by their nature) not idempotent, as they are typically"\
|
38
|
-
" unique to the environment in which they are run. Use not_if and only_if"\
|
37
|
+
" unique to the environment in which they are run. Use `not_if` and `only_if`"\
|
39
38
|
" to guard this resource for idempotence."
|
40
39
|
end
|
41
40
|
end
|
data/lib/chef/resource/plist.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
require_relative "../resource"
|
19
|
-
|
19
|
+
autoload :Plist, "plist"
|
20
20
|
|
21
21
|
class Chef
|
22
22
|
class Resource
|
@@ -28,14 +28,33 @@ class Chef
|
|
28
28
|
|
29
29
|
description "Use the **plist** resource to set config values in plist files on macOS systems."
|
30
30
|
introduced "16.0"
|
31
|
+
examples <<~DOC
|
32
|
+
**Show hidden files in finder**:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
plist 'show hidden files' do
|
36
|
+
path '/Users/vagrant/Library/Preferences/com.apple.finder.plist'
|
37
|
+
entry 'AppleShowAllFiles'
|
38
|
+
value true
|
39
|
+
end
|
40
|
+
```
|
41
|
+
DOC
|
42
|
+
|
43
|
+
property :path, String, name_property: true,
|
44
|
+
description: "The path on disk to the plist file."
|
31
45
|
|
32
|
-
property :path, String, name_property: true
|
33
46
|
property :entry, String
|
34
47
|
property :value, [TrueClass, FalseClass, String, Integer, Float, Hash]
|
35
48
|
property :encoding, String, default: "binary"
|
36
|
-
|
37
|
-
property :
|
38
|
-
|
49
|
+
|
50
|
+
property :owner, String, default: "root",
|
51
|
+
description: "The owner of the plist file."
|
52
|
+
|
53
|
+
property :group, String, default: "wheel",
|
54
|
+
description: "The group of the plist file."
|
55
|
+
|
56
|
+
property :mode, [String, Integer],
|
57
|
+
description: "The file mode of the plist file. Ex: '644'"
|
39
58
|
|
40
59
|
PLISTBUDDY_EXECUTABLE = "/usr/libexec/PlistBuddy".freeze
|
41
60
|
DEFAULTS_EXECUTABLE = "/usr/bin/defaults".freeze
|
@@ -132,9 +151,7 @@ class Chef
|
|
132
151
|
value.to_i
|
133
152
|
when "float"
|
134
153
|
value.to_f
|
135
|
-
when "string"
|
136
|
-
value
|
137
|
-
when "dictionary"
|
154
|
+
when "string", "dictionary"
|
138
155
|
value
|
139
156
|
when nil
|
140
157
|
""
|
@@ -149,9 +166,7 @@ class Chef
|
|
149
166
|
"array"
|
150
167
|
when Integer
|
151
168
|
"integer"
|
152
|
-
when FalseClass
|
153
|
-
"bool"
|
154
|
-
when TrueClass
|
169
|
+
when FalseClass, TrueClass
|
155
170
|
"bool"
|
156
171
|
when Hash
|
157
172
|
"dict"
|
@@ -16,7 +16,6 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "../resource"
|
19
|
-
require_relative "../json_compat"
|
20
19
|
|
21
20
|
class Chef
|
22
21
|
class Resource
|
@@ -33,8 +32,8 @@ class Chef
|
|
33
32
|
name_property: true
|
34
33
|
|
35
34
|
property :url, String,
|
36
|
-
description: "The
|
37
|
-
required:
|
35
|
+
description: "The URL to the package source.",
|
36
|
+
required: [:register]
|
38
37
|
|
39
38
|
property :trusted, [TrueClass, FalseClass],
|
40
39
|
description: "Whether or not to trust packages from this source.",
|
@@ -43,25 +42,25 @@ class Chef
|
|
43
42
|
property :provider_name, String,
|
44
43
|
equal_to: %w{ Programs msi NuGet msu PowerShellGet psl chocolatey },
|
45
44
|
validation_message: "The following providers are supported: 'Programs', 'msi', 'NuGet', 'msu', 'PowerShellGet', 'psl' or 'chocolatey'",
|
46
|
-
description: "The package management provider for the source.
|
45
|
+
description: "The package management provider for the source.",
|
47
46
|
default: "NuGet"
|
48
47
|
|
49
48
|
property :publish_location, String,
|
50
|
-
description: "The
|
49
|
+
description: "The URL where modules will be published to for this source. Only valid if the provider is `PowerShellGet`."
|
51
50
|
|
52
51
|
property :script_source_location, String,
|
53
|
-
description: "The
|
52
|
+
description: "The URL where scripts are located for this source. Only valid if the provider is `PowerShellGet`."
|
54
53
|
|
55
54
|
property :script_publish_location, String,
|
56
|
-
description: "The location where scripts will be published to for this source. Only valid if the provider is
|
55
|
+
description: "The location where scripts will be published to for this source. Only valid if the provider is `PowerShellGet`."
|
57
56
|
|
58
57
|
load_current_value do
|
59
58
|
cmd = load_resource_state_script(source_name)
|
60
|
-
repo =
|
61
|
-
if repo.
|
59
|
+
repo = powershell_exec!(cmd)
|
60
|
+
if repo.result.empty?
|
62
61
|
current_value_does_not_exist!
|
63
62
|
else
|
64
|
-
status =
|
63
|
+
status = repo.result
|
65
64
|
end
|
66
65
|
url status["url"]
|
67
66
|
trusted status["trusted"]
|
@@ -78,28 +77,28 @@ class Chef
|
|
78
77
|
if package_source_exists?
|
79
78
|
converge_if_changed :url, :trusted, :publish_location, :script_source_location, :script_publish_location do
|
80
79
|
update_cmd = build_ps_repository_command("Set", new_resource)
|
81
|
-
res =
|
82
|
-
raise "Failed to update #{new_resource.source_name}: #{res.
|
80
|
+
res = powershell_exec(update_cmd)
|
81
|
+
raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
|
83
82
|
end
|
84
83
|
else
|
85
84
|
converge_by("register source: #{new_resource.source_name}") do
|
86
85
|
register_cmd = build_ps_repository_command("Register", new_resource)
|
87
|
-
res =
|
88
|
-
raise "Failed to register #{new_resource.source_name}: #{res.
|
86
|
+
res = powershell_exec(register_cmd)
|
87
|
+
raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
|
89
88
|
end
|
90
89
|
end
|
91
90
|
else
|
92
91
|
if package_source_exists?
|
93
92
|
converge_if_changed :url, :trusted, :provider_name do
|
94
93
|
update_cmd = build_package_source_command("Set", new_resource)
|
95
|
-
res =
|
96
|
-
raise "Failed to update #{new_resource.source_name}: #{res.
|
94
|
+
res = powershell_exec(update_cmd)
|
95
|
+
raise "Failed to update #{new_resource.source_name}: #{res.errors}" if res.error?
|
97
96
|
end
|
98
97
|
else
|
99
98
|
converge_by("register source: #{new_resource.source_name}") do
|
100
99
|
register_cmd = build_package_source_command("Register", new_resource)
|
101
|
-
res =
|
102
|
-
raise "Failed to register #{new_resource.source_name}: #{res.
|
100
|
+
res = powershell_exec(register_cmd)
|
101
|
+
raise "Failed to register #{new_resource.source_name}: #{res.errors}" if res.error?
|
103
102
|
end
|
104
103
|
end
|
105
104
|
end
|
@@ -110,16 +109,16 @@ class Chef
|
|
110
109
|
if package_source_exists?
|
111
110
|
unregister_cmd = "Get-PackageSource -Name '#{new_resource.source_name}' | Unregister-PackageSource"
|
112
111
|
converge_by("unregister source: #{new_resource.source_name}") do
|
113
|
-
res =
|
114
|
-
raise "Failed to unregister #{new_resource.source_name}: #{res.
|
112
|
+
res = powershell_exec(unregister_cmd)
|
113
|
+
raise "Failed to unregister #{new_resource.source_name}: #{res.errors}" if res.error?
|
115
114
|
end
|
116
115
|
end
|
117
116
|
end
|
118
117
|
|
119
118
|
action_class do
|
120
119
|
def package_source_exists?
|
121
|
-
cmd =
|
122
|
-
cmd.
|
120
|
+
cmd = powershell_exec!("(Get-PackageSource -Name '#{new_resource.source_name}' -ErrorAction SilentlyContinue).Name")
|
121
|
+
!cmd.result.empty? && cmd.result.to_s.downcase.strip == new_resource.source_name.downcase
|
123
122
|
end
|
124
123
|
|
125
124
|
def psrepository_cmdlet_appropriate?
|
@@ -133,6 +132,7 @@ class Chef
|
|
133
132
|
cmd << " -PublishLocation '#{new_resource.publish_location}'" if new_resource.publish_location
|
134
133
|
cmd << " -ScriptSourceLocation '#{new_resource.script_source_location}'" if new_resource.script_source_location
|
135
134
|
cmd << " -ScriptPublishLocation '#{new_resource.script_publish_location}'" if new_resource.script_publish_location
|
135
|
+
cmd << " | Out-Null"
|
136
136
|
cmd
|
137
137
|
end
|
138
138
|
|
@@ -141,6 +141,7 @@ class Chef
|
|
141
141
|
cmd << " -Location '#{new_resource.url}'" if new_resource.url
|
142
142
|
cmd << " -Trusted:#{new_resource.trusted ? "$true" : "$false"}"
|
143
143
|
cmd << " -ProviderName '#{new_resource.provider_name}'" if new_resource.provider_name
|
144
|
+
cmd << " | Out-Null"
|
144
145
|
cmd
|
145
146
|
end
|
146
147
|
end
|
@@ -157,11 +158,11 @@ class Chef
|
|
157
158
|
if ((Get-PackageSource -Name '#{name}').ProviderName -eq 'PowerShellGet') {
|
158
159
|
(Get-PSRepository -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.SourceLocation}},
|
159
160
|
@{n='trusted';e={$_.Trusted}}, @{n='provider_name';e={$_.PackageManagementProvider}}, @{n='publish_location';e={$_.PublishLocation}},
|
160
|
-
@{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
|
161
|
+
@{n='script_source_location';e={$_.ScriptSourceLocation}}, @{n='script_publish_location';e={$_.ScriptPublishLocation}}
|
161
162
|
}
|
162
163
|
else {
|
163
164
|
(Get-PackageSource -Name '#{name}') | Select @{n='source_name';e={$_.Name}}, @{n='url';e={$_.Location}},
|
164
|
-
@{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
|
165
|
+
@{n='provider_name';e={$_.ProviderName}}, @{n='trusted';e={$_.IsTrusted}}
|
165
166
|
}
|
166
167
|
}
|
167
168
|
EOH
|
@@ -22,43 +22,51 @@ class Chef
|
|
22
22
|
class PowershellScript < Chef::Resource::WindowsScript
|
23
23
|
unified_mode true
|
24
24
|
|
25
|
+
set_guard_inherited_attributes(:interpreter)
|
26
|
+
|
25
27
|
provides :powershell_script, os: "windows"
|
26
28
|
|
29
|
+
description <<~DESC
|
30
|
+
Use the **powershell_script** resource to execute a script using the Windows PowerShell interpreter, much like how the script and script-based resources **bash**, **csh**, **perl**, **python**, and **ruby** are used. The **powershell_script** resource is specific to the Microsoft Windows platform, but may use both the the Windows PowerShell interpreter or the PowerShell Core (pwsh) interpreter as of Chef Infra Client 16.6 and later.
|
31
|
+
|
32
|
+
The **powershell_script** resource creates and executes a temporary file rather than running the command inline. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use `not_if` and `only_if` conditionals to guard this resource for idempotence.
|
33
|
+
DESC
|
34
|
+
|
27
35
|
property :flags, String,
|
28
|
-
description: "A string that is passed to the Windows PowerShell command"
|
29
|
-
default: lazy { default_flags },
|
30
|
-
coerce: proc { |input|
|
31
|
-
if input == default_flags
|
32
|
-
# Means there was no input provided,
|
33
|
-
# and should use defaults in this case
|
34
|
-
input
|
35
|
-
else
|
36
|
-
# The last occurrence of a flag would override its
|
37
|
-
# previous one at the time of command execution.
|
38
|
-
[default_flags, input].join(" ")
|
39
|
-
end
|
40
|
-
}
|
36
|
+
description: "A string that is passed to the Windows PowerShell command"
|
41
37
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
" executes a temporary file (similar to how the script resource behaves), rather than running"\
|
47
|
-
" the command inline. Commands that are executed with this resource are (by their nature) not"\
|
48
|
-
" idempotent, as they are typically unique to the environment in which they are run. Use not_if"\
|
49
|
-
" and only_if to guard this resource for idempotence."
|
38
|
+
property :interpreter, String,
|
39
|
+
default: "powershell",
|
40
|
+
equal_to: %w{powershell pwsh},
|
41
|
+
description: "The interpreter type, `powershell` or `pwsh` (PowerShell Core)"
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
43
|
+
property :convert_boolean_return, [true, false],
|
44
|
+
default: false,
|
45
|
+
description: <<~DESC
|
46
|
+
Return `0` if the last line of a command is evaluated to be true or to return `1` if the last line is evaluated to be false.
|
47
|
+
|
48
|
+
When the `guard_interpreter` common attribute is set to `:powershell_script`, a string command will be evaluated as if this value were set to `true`. This is because the behavior of this attribute is similar to the value of the `"$?"` expression common in UNIX interpreters. For example, this:
|
55
49
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
```ruby
|
51
|
+
powershell_script 'make_safe_backup' do
|
52
|
+
guard_interpreter :powershell_script
|
53
|
+
code 'cp ~/data/nodes.json ~/data/nodes.bak'
|
54
|
+
not_if 'test-path ~/data/nodes.bak'
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
is similar to:
|
59
|
+
```ruby
|
60
|
+
bash 'make_safe_backup' do
|
61
|
+
code 'cp ~/data/nodes.json ~/data/nodes.bak'
|
62
|
+
not_if 'test -e ~/data/nodes.bak'
|
63
|
+
end
|
64
|
+
```
|
65
|
+
DESC
|
66
|
+
|
67
|
+
def initialize(*args)
|
68
|
+
super
|
69
|
+
@default_guard_interpreter = resource_name
|
62
70
|
end
|
63
71
|
|
64
72
|
# Allow callers evaluating guards to request default
|
@@ -68,18 +76,9 @@ class Chef
|
|
68
76
|
# default for this resource, this method can be removed since
|
69
77
|
# guard context and recipe resource context will have the
|
70
78
|
# same behavior.
|
71
|
-
def self.get_default_attributes
|
79
|
+
def self.get_default_attributes
|
72
80
|
{ convert_boolean_return: true }
|
73
81
|
end
|
74
|
-
|
75
|
-
# Options that will be passed to Windows PowerShell command
|
76
|
-
#
|
77
|
-
# @returns [String]
|
78
|
-
def default_flags
|
79
|
-
# Set InputFormat to None as PowerShell will hang if STDIN is redirected
|
80
|
-
# http://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
|
81
|
-
"-NoLogo -NonInteractive -NoProfile -ExecutionPolicy Bypass -InputFormat None"
|
82
|
-
end
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|
data/lib/chef/resource/python.rb
CHANGED
@@ -16,7 +16,6 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "script"
|
19
|
-
require_relative "../provider/script"
|
20
19
|
|
21
20
|
class Chef
|
22
21
|
class Resource
|
@@ -32,9 +31,9 @@ class Chef
|
|
32
31
|
|
33
32
|
description "Use the **python** resource to execute scripts using the Python interpreter."\
|
34
33
|
" This resource may also use any of the actions and properties that are available"\
|
35
|
-
" to the execute resource. Commands that are executed with this resource are (by"\
|
34
|
+
" to the **execute** resource. Commands that are executed with this resource are (by"\
|
36
35
|
" their nature) not idempotent, as they are typically unique to the environment in"\
|
37
|
-
" which they are run. Use not_if and only_if to guard this resource for idempotence."
|
36
|
+
" which they are run. Use `not_if` and `only_if` to guard this resource for idempotence."
|
38
37
|
end
|
39
38
|
end
|
40
39
|
end
|