chef 12.18.31 → 13.0.118
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 +15 -11
- data/README.md +13 -13
- data/Rakefile +1 -19
- data/VERSION +1 -1
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +1 -1
- data/acceptance/Gemfile +8 -5
- data/acceptance/Gemfile.lock +90 -81
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
- data/acceptance/data-collector/.acceptance/data-collector-test/metadata.rb +1 -1
- data/acceptance/data-collector/test/integration/default/serverspec/default_spec.rb +4 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +9 -8
- data/chef-universal-mingw32.gemspec +2 -3
- data/chef.gemspec +8 -7
- data/lib/chef/api_client.rb +8 -15
- data/lib/chef/api_client_v1.rb +9 -11
- data/lib/chef/application/apply.rb +8 -10
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/exit_code.rb +11 -82
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +0 -1
- data/lib/chef/application/windows_service.rb +36 -37
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/application.rb +15 -25
- data/lib/chef/audit/audit_event_proxy.rb +2 -2
- data/lib/chef/audit/control_group_data.rb +1 -1
- data/lib/chef/blacklist.rb +81 -0
- data/lib/chef/chef_class.rb +1 -0
- data/lib/chef/chef_fs/chef_fs_data_store.rb +6 -8
- data/lib/chef/chef_fs/command_line.rb +15 -16
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
- 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/environment_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_pattern.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +6 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +18 -32
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +8 -10
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +28 -30
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +27 -29
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +29 -26
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +1 -1
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +10 -12
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +13 -16
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +9 -13
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +2 -0
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +3 -0
- data/lib/chef/chef_fs/file_system.rb +1 -1
- data/lib/chef/chef_fs/parallelizer.rb +9 -11
- data/lib/chef/client.rb +47 -11
- data/lib/chef/config_fetcher.rb +4 -4
- data/lib/chef/constants.rb +1 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +26 -115
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/gem_installer.rb +10 -6
- data/lib/chef/cookbook/manifest_v0.rb +68 -0
- data/lib/chef/cookbook/manifest_v2.rb +41 -0
- data/lib/chef/cookbook/metadata.rb +25 -134
- data/lib/chef/cookbook/remote_file_vendor.rb +3 -3
- data/lib/chef/cookbook/synchronizer.rb +24 -21
- data/lib/chef/cookbook/syntax_check.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +91 -65
- data/lib/chef/cookbook_site_streaming_uploader.rb +7 -9
- data/lib/chef/cookbook_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +69 -157
- data/lib/chef/data_bag.rb +1 -7
- data/lib/chef/data_bag_item.rb +5 -10
- data/lib/chef/data_collector/messages.rb +2 -0
- data/lib/chef/data_collector/resource_report.rb +32 -4
- data/lib/chef/data_collector.rb +3 -4
- data/lib/chef/decorator/unchain.rb +0 -16
- data/lib/chef/decorator.rb +1 -1
- data/lib/chef/deprecated.rb +53 -19
- data/lib/chef/dsl/audit.rb +2 -2
- data/lib/chef/dsl/declare_resource.rb +11 -17
- data/lib/chef/dsl/platform_introspection.rb +29 -31
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/dsl/recipe.rb +1 -4
- data/lib/chef/dsl/resources.rb +4 -13
- data/lib/chef/encrypted_data_bag_item.rb +2 -2
- data/lib/chef/environment.rb +9 -16
- data/lib/chef/event_dispatch/base.rb +16 -0
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/exceptions.rb +6 -10
- data/lib/chef/file_access_control/unix.rb +14 -14
- data/lib/chef/file_access_control/windows.rb +1 -1
- data/lib/chef/formatters/error_description.rb +18 -1
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +4 -5
- data/lib/chef/formatters/error_mapper.rb +6 -6
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +4 -2
- data/lib/chef/http/api_versions.rb +54 -0
- data/lib/chef/http/authenticator.rb +15 -6
- data/lib/chef/http/json_output.rb +4 -1
- data/lib/chef/http/socketless_chef_zero_client.rb +1 -0
- data/lib/chef/http/validate_content_length.rb +2 -2
- data/lib/chef/http.rb +39 -0
- data/lib/chef/json_compat.rb +7 -103
- data/lib/chef/key.rb +5 -10
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +6 -6
- data/lib/chef/knife/bootstrap.rb +6 -0
- data/lib/chef/knife/configure.rb +1 -3
- data/lib/chef/knife/configure_client.rb +1 -3
- data/lib/chef/knife/cookbook_create.rb +1 -434
- data/lib/chef/knife/cookbook_download.rb +3 -4
- data/lib/chef/knife/cookbook_show.rb +7 -3
- data/lib/chef/knife/cookbook_site_install.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +8 -7
- data/lib/chef/knife/core/cookbook_scm_repo.rb +2 -2
- data/lib/chef/knife/core/gem_glob_loader.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +2 -32
- data/lib/chef/knife/core/ui.rb +20 -27
- data/lib/chef/knife/data_bag_create.rb +6 -4
- data/lib/chef/knife/data_bag_secret_options.rb +1 -1
- data/lib/chef/knife/deps.rb +32 -34
- data/lib/chef/knife/edit.rb +1 -1
- data/lib/chef/knife/help.rb +1 -1
- data/lib/chef/knife/list.rb +1 -1
- data/lib/chef/knife/search.rb +9 -20
- data/lib/chef/knife/ssh.rb +62 -36
- data/lib/chef/knife/ssl_check.rb +1 -1
- data/lib/chef/knife/user_delete.rb +1 -1
- data/lib/chef/knife/xargs.rb +1 -1
- data/lib/chef/knife.rb +6 -7
- data/lib/chef/mash.rb +1 -1
- data/lib/chef/mixin/create_path.rb +3 -5
- data/lib/chef/mixin/from_file.rb +2 -2
- data/lib/chef/mixin/get_source_from_package.rb +2 -2
- data/lib/chef/mixin/notifying_block.rb +7 -9
- data/lib/chef/mixin/params_validate.rb +9 -8
- data/lib/chef/mixin/path_sanity.rb +17 -19
- data/lib/chef/mixin/securable.rb +1 -1
- data/lib/chef/mixin/shell_out.rb +33 -29
- data/lib/chef/mixin/unformatter.rb +2 -2
- data/lib/chef/mixin/uris.rb +4 -6
- data/lib/chef/mixin/versioned_api.rb +84 -0
- data/lib/chef/mixin/which.rb +25 -8
- data/lib/chef/mixin/windows_architecture_helper.rb +2 -2
- data/lib/chef/mixin/xml_escape.rb +3 -5
- data/lib/chef/mixins.rb +0 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +1 -1
- data/lib/chef/node/attribute.rb +9 -32
- data/lib/chef/node/attribute_collections.rb +1 -19
- data/lib/chef/node/common_api.rb +5 -7
- data/lib/chef/node/immutable_collections.rb +42 -38
- data/lib/chef/node/mixin/immutablize_array.rb +1 -1
- data/lib/chef/node/mixin/immutablize_hash.rb +1 -1
- data/lib/chef/node.rb +21 -20
- data/lib/chef/node_map.rb +2 -5
- data/lib/chef/org.rb +10 -17
- data/lib/chef/platform/provider_mapping.rb +2 -169
- data/lib/chef/platform/query_helpers.rb +1 -1
- data/lib/chef/platform/rebooter.rb +1 -2
- data/lib/chef/policy_builder/expand_node_object.rb +3 -29
- data/lib/chef/policy_builder/policyfile.rb +8 -6
- data/lib/chef/property.rb +66 -80
- data/lib/chef/provider/apt_repository.rb +6 -10
- data/lib/chef/provider/apt_update.rb +1 -7
- data/lib/chef/provider/batch.rb +1 -1
- data/lib/chef/provider/breakpoint.rb +2 -2
- data/lib/chef/provider/cookbook_file.rb +3 -9
- data/lib/chef/provider/cron.rb +42 -60
- data/lib/chef/provider/deploy/revision.rb +3 -5
- data/lib/chef/provider/deploy.rb +82 -88
- data/lib/chef/provider/directory.rb +33 -37
- data/lib/chef/provider/dsc_resource.rb +23 -11
- data/lib/chef/provider/dsc_script.rb +1 -5
- data/lib/chef/provider/env/windows.rb +5 -1
- data/lib/chef/provider/env.rb +32 -30
- data/lib/chef/provider/erl_call.rb +15 -47
- data/lib/chef/provider/execute.rb +7 -8
- data/lib/chef/provider/file.rb +49 -61
- data/lib/chef/provider/git.rb +56 -60
- data/lib/chef/provider/group.rb +1 -7
- data/lib/chef/provider/http_request.rb +37 -41
- data/lib/chef/provider/ifconfig/redhat.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +0 -6
- data/lib/chef/provider/launchd.rb +6 -2
- data/lib/chef/provider/link.rb +51 -55
- data/lib/chef/provider/log.rb +3 -7
- data/lib/chef/provider/lwrp_base.rb +0 -9
- data/lib/chef/provider/mdadm.rb +25 -33
- data/lib/chef/provider/mount/aix.rb +2 -2
- data/lib/chef/provider/mount/mount.rb +2 -2
- data/lib/chef/provider/mount.rb +1 -5
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/ohai.rb +1 -7
- data/lib/chef/provider/osx_profile.rb +24 -29
- data/lib/chef/provider/package/aix.rb +55 -53
- data/lib/chef/provider/package/apt.rb +15 -13
- data/lib/chef/provider/package/cab.rb +48 -20
- data/lib/chef/provider/package/chocolatey.rb +9 -10
- data/lib/chef/provider/package/dnf/dnf_helper.py +1 -1
- data/lib/chef/provider/package/dnf/python_helper.rb +63 -26
- data/lib/chef/provider/package/dnf/version.rb +1 -1
- data/lib/chef/provider/package/dnf.rb +21 -19
- data/lib/chef/provider/package/dpkg.rb +8 -9
- data/lib/chef/provider/package/freebsd/base.rb +10 -10
- data/lib/chef/provider/package/freebsd/pkg.rb +15 -15
- data/lib/chef/provider/package/freebsd/pkgng.rb +13 -15
- data/lib/chef/provider/package/freebsd/port.rb +7 -7
- data/lib/chef/provider/package/homebrew.rb +11 -10
- data/lib/chef/provider/package/ips.rb +18 -24
- data/lib/chef/provider/package/macports.rb +23 -23
- data/lib/chef/provider/package/msu.rb +11 -12
- data/lib/chef/provider/package/openbsd.rb +25 -22
- data/lib/chef/provider/package/pacman.rb +16 -17
- data/lib/chef/provider/package/paludis.rb +26 -27
- data/lib/chef/provider/package/portage.rb +22 -23
- data/lib/chef/provider/package/powershell.rb +17 -17
- data/lib/chef/provider/package/rpm.rb +25 -26
- data/lib/chef/provider/package/rubygems.rb +64 -62
- data/lib/chef/provider/package/smartos.rb +16 -16
- data/lib/chef/provider/package/solaris.rb +44 -45
- data/lib/chef/provider/package/windows/exe.rb +6 -6
- data/lib/chef/provider/package/windows/msi.rb +7 -7
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +9 -3
- data/lib/chef/provider/package/windows.rb +3 -3
- data/lib/chef/provider/package/yum/rpm_utils.rb +34 -34
- data/lib/chef/provider/package/yum/yum_cache.rb +12 -12
- data/lib/chef/provider/package/yum.rb +319 -269
- data/lib/chef/provider/package/zypper.rb +10 -20
- data/lib/chef/provider/package.rb +71 -63
- data/lib/chef/provider/powershell_script.rb +15 -7
- data/lib/chef/provider/reboot.rb +10 -14
- data/lib/chef/provider/registry_key.rb +39 -43
- data/lib/chef/provider/remote_directory.rb +3 -15
- data/lib/chef/provider/remote_file.rb +3 -9
- data/lib/chef/provider/route.rb +1 -7
- data/lib/chef/provider/ruby_block.rb +4 -8
- data/lib/chef/provider/script.rb +42 -6
- data/lib/chef/provider/service/aix.rb +1 -5
- data/lib/chef/provider/service/debian.rb +15 -21
- data/lib/chef/provider/service/freebsd.rb +0 -1
- data/lib/chef/provider/service/gentoo.rb +0 -1
- data/lib/chef/provider/service/init.rb +0 -1
- data/lib/chef/provider/service/insserv.rb +2 -2
- data/lib/chef/provider/service/openbsd.rb +0 -1
- data/lib/chef/provider/service/redhat.rb +2 -2
- data/lib/chef/provider/service/simple.rb +0 -5
- data/lib/chef/provider/service/solaris.rb +5 -4
- data/lib/chef/provider/service/systemd.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +10 -12
- data/lib/chef/provider/service/windows.rb +1 -5
- data/lib/chef/provider/service.rb +51 -58
- data/lib/chef/provider/subversion.rb +40 -46
- data/lib/chef/provider/systemd_unit.rb +2 -0
- data/lib/chef/provider/template/content.rb +24 -1
- data/lib/chef/provider/template.rb +3 -9
- data/lib/chef/provider/user/dscl.rb +3 -3
- data/lib/chef/provider/user/linux.rb +6 -5
- data/lib/chef/provider/user/pw.rb +4 -10
- data/lib/chef/provider/user/solaris.rb +2 -2
- data/lib/chef/provider/user/useradd.rb +5 -5
- data/lib/chef/provider/user.rb +43 -59
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +4 -4
- data/lib/chef/provider/windows_task.rb +418 -0
- data/lib/chef/provider/yum_repository.rb +3 -6
- data/lib/chef/provider.rb +63 -115
- data/lib/chef/provider_resolver.rb +8 -34
- data/lib/chef/providers.rb +1 -1
- data/lib/chef/recipe.rb +9 -1
- data/lib/chef/resource/action_class.rb +13 -17
- data/lib/chef/resource/apt_repository.rb +0 -1
- data/lib/chef/resource/apt_update.rb +3 -1
- data/lib/chef/resource/chef_gem.rb +4 -11
- data/lib/chef/resource/chocolatey_package.rb +4 -1
- data/lib/chef/resource/dnf_package.rb +6 -3
- data/lib/chef/resource/dsc_resource.rb +9 -1
- data/lib/chef/resource/execute.rb +66 -19
- data/lib/chef/resource/file/verification/systemd_unit.rb +67 -0
- data/lib/chef/resource/file/verification.rb +2 -7
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +16 -2
- data/lib/chef/resource/launchd.rb +3 -3
- data/lib/chef/resource/lwrp_base.rb +0 -2
- data/lib/chef/resource/mount.rb +5 -12
- data/lib/chef/resource/package.rb +2 -2
- data/lib/chef/resource/powershell_script.rb +1 -1
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/script.rb +8 -34
- data/lib/chef/resource/service.rb +15 -13
- data/lib/chef/resource/systemd_unit.rb +5 -0
- data/lib/chef/resource/user/aix_user.rb +1 -1
- data/lib/chef/resource/user/dscl_user.rb +1 -1
- data/lib/chef/resource/user/linux_user.rb +1 -10
- data/lib/chef/resource/user/pw_user.rb +1 -1
- data/lib/chef/resource/user/solaris_user.rb +1 -1
- data/lib/chef/resource/user/windows_user.rb +1 -1
- data/lib/chef/resource/user.rb +1 -19
- data/lib/chef/resource/windows_package.rb +4 -1
- data/lib/chef/resource/windows_task.rb +237 -0
- data/lib/chef/resource/yum_package.rb +13 -4
- data/lib/chef/resource/yum_repository.rb +0 -1
- data/lib/chef/resource/zypper_package.rb +2 -0
- data/lib/chef/resource.rb +90 -202
- data/lib/chef/resource_builder.rb +1 -65
- data/lib/chef/resource_collection/resource_collection_serialization.rb +11 -4
- data/lib/chef/resource_collection/resource_list.rb +6 -0
- data/lib/chef/resource_collection/resource_set.rb +44 -17
- data/lib/chef/resource_collection.rb +10 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +1 -25
- data/lib/chef/resources.rb +1 -1
- data/lib/chef/role.rb +0 -6
- data/lib/chef/run_context/cookbook_compiler.rb +49 -5
- data/lib/chef/run_context.rb +4 -25
- data/lib/chef/run_list/run_list_item.rb +1 -1
- data/lib/chef/run_list/versioned_recipe_list.rb +14 -12
- data/lib/chef/search/query.rb +26 -31
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/{resource/easy_install_package.rb → server_api_versions.rb} +18 -10
- data/lib/chef/shell/ext.rb +3 -3
- data/lib/chef/shell/shell_session.rb +14 -4
- data/lib/chef/shell.rb +32 -7
- data/lib/chef/user.rb +9 -16
- data/lib/chef/user_v1.rb +9 -16
- data/lib/chef/util/diff.rb +1 -1
- data/lib/chef/util/dsc/lcm_output_parser.rb +1 -1
- data/lib/chef/util/selinux.rb +1 -1
- data/lib/chef/util/windows/net_group.rb +18 -30
- data/lib/chef/util/windows/net_use.rb +7 -11
- data/lib/chef/util/windows/net_user.rb +12 -18
- data/lib/chef/util/windows/volume.rb +9 -15
- data/lib/chef/version.rb +1 -1
- data/lib/chef/version_class.rb +1 -1
- data/lib/chef/win32/api/file.rb +25 -31
- data/lib/chef/win32/api/installer.rb +2 -2
- data/lib/chef/win32/api.rb +4 -6
- data/lib/chef/win32/file.rb +4 -6
- data/lib/chef/win32/registry.rb +9 -9
- data/lib/chef/win32/security/acl.rb +2 -2
- data/lib/chef/win32/security/sid.rb +5 -0
- data/lib/chef/win32/security.rb +2 -2
- data/lib/chef/win32/unicode.rb +2 -2
- data/lib/chef/win32/version.rb +1 -1
- data/lib/chef.rb +1 -2
- data/spec/data/cookbooks/openldap/templates/default/openldap_nested_variable_stuff.erb +1 -0
- 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/lwrp/providers/inline_compiler.rb +0 -2
- data/spec/data/lwrp/resources/buck_passer.rb +5 -0
- data/spec/data/lwrp/resources/buck_passer_2.rb +3 -0
- data/spec/data/lwrp/resources/embedded_resource_accesses_providers_scope.rb +3 -0
- data/spec/data/lwrp/resources/inline_compiler.rb +3 -0
- data/spec/data/lwrp/resources/monkey_name_printer.rb +5 -0
- data/spec/data/lwrp/resources/paint_drying_watcher.rb +3 -0
- data/spec/data/lwrp/resources/thumb_twiddler.rb +3 -0
- data/spec/data/prefer_metadata_json/metadata.json +51 -0
- data/spec/data/prefer_metadata_json/metadata.rb +6 -0
- data/spec/data/prefer_metadata_json/recipes/default.rb +0 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes/default.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_attr/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_attr/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipe.rb +3 -0
- data/spec/data/root_alias_cookbooks/dup_recipe/recipes/default.rb +3 -0
- data/spec/data/root_alias_cookbooks/simple/attributes.rb +1 -0
- data/spec/data/root_alias_cookbooks/simple/metadata.rb +2 -0
- data/spec/data/root_alias_cookbooks/simple/recipe.rb +3 -0
- data/spec/data/shef-config.rb +11 -10
- data/spec/functional/knife/ssh_spec.rb +34 -6
- data/spec/functional/rebooter_spec.rb +1 -0
- data/spec/functional/resource/bash_spec.rb +11 -45
- data/spec/functional/resource/batch_spec.rb +5 -1
- data/spec/functional/resource/cron_spec.rb +2 -2
- data/spec/functional/resource/dsc_script_spec.rb +2 -4
- data/spec/functional/resource/execute_spec.rb +17 -0
- data/spec/functional/resource/link_spec.rb +3 -3
- data/spec/functional/resource/template_spec.rb +33 -0
- data/spec/functional/resource/user/dscl_spec.rb +2 -4
- data/spec/functional/root_alias_spec.rb +78 -0
- data/spec/functional/shell_spec.rb +38 -40
- data/spec/integration/client/client_spec.rb +109 -16
- data/spec/integration/client/exit_code_spec.rb +1 -105
- data/spec/integration/knife/chef_repository_file_system_spec.rb +0 -97
- data/spec/integration/knife/cookbook_download_spec.rb +0 -24
- data/spec/integration/knife/cookbook_show_spec.rb +12 -23
- data/spec/integration/knife/deps_spec.rb +5 -9
- data/spec/integration/knife/search_node_spec.rb +39 -0
- data/spec/integration/knife/serve_spec.rb +58 -22
- data/spec/integration/knife/upload_spec.rb +3 -11
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +7 -11
- data/spec/integration/recipes/notifies_spec.rb +60 -0
- data/spec/integration/recipes/recipe_dsl_spec.rb +76 -226
- data/spec/integration/recipes/resource_action_spec.rb +37 -30
- data/spec/spec_helper.rb +7 -0
- data/spec/support/chef_helpers.rb +5 -7
- data/spec/support/platform_helpers.rb +10 -3
- data/spec/support/platforms/prof/gc.rb +4 -6
- data/spec/support/shared/context/client.rb +9 -2
- data/spec/support/shared/functional/execute_resource.rb +150 -0
- data/spec/support/shared/functional/windows_script.rb +74 -4
- data/spec/support/shared/integration/knife_support.rb +1 -1
- data/spec/support/shared/unit/execute_resource.rb +37 -9
- data/spec/support/shared/unit/provider/file.rb +10 -0
- data/spec/support/shared/unit/script_resource.rb +1 -9
- data/spec/unit/application/exit_code_spec.rb +4 -89
- data/spec/unit/application_spec.rb +39 -29
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +1 -1
- data/spec/unit/client_spec.rb +72 -31
- data/spec/unit/config_fetcher_spec.rb +2 -2
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +31 -19
- data/spec/unit/cookbook/file_vendor_spec.rb +20 -9
- data/spec/unit/cookbook/gem_installer_spec.rb +85 -0
- data/spec/unit/cookbook/manifest_v0_spec.rb +133 -0
- data/spec/unit/cookbook/manifest_v2_spec.rb +70 -0
- data/spec/unit/cookbook/metadata_spec.rb +29 -108
- data/spec/unit/cookbook/synchronizer_spec.rb +5 -6
- data/spec/unit/cookbook/syntax_check_spec.rb +9 -2
- data/spec/unit/cookbook_loader_spec.rb +17 -19
- data/spec/unit/cookbook_manifest_spec.rb +12 -44
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +0 -4
- data/spec/unit/cookbook_spec.rb +10 -14
- data/spec/unit/cookbook_uploader_spec.rb +1 -1
- data/spec/unit/cookbook_version_file_specificity_spec.rb +55 -28
- data/spec/unit/cookbook_version_spec.rb +19 -128
- data/spec/unit/data_bag_item_spec.rb +4 -0
- data/spec/unit/data_collector/messages_spec.rb +137 -0
- data/spec/unit/data_collector/resource_report_spec.rb +145 -0
- data/spec/unit/deprecation_spec.rb +0 -14
- data/spec/unit/encrypted_data_bag_item_spec.rb +6 -6
- data/spec/unit/formatters/error_description_spec.rb +52 -7
- data/spec/unit/http/api_versions_spec.rb +79 -0
- data/spec/unit/http/authenticator_spec.rb +20 -0
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +2 -1
- data/spec/unit/json_compat_spec.rb +0 -32
- data/spec/unit/knife/bootstrap_spec.rb +34 -0
- data/spec/unit/knife/configure_client_spec.rb +0 -2
- data/spec/unit/knife/cookbook_create_spec.rb +1 -220
- data/spec/unit/knife/cookbook_download_spec.rb +46 -28
- data/spec/unit/knife/cookbook_show_spec.rb +42 -9
- data/spec/unit/knife/core/bootstrap_context_spec.rb +17 -0
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +1 -1
- data/spec/unit/knife/core/subcommand_loader_spec.rb +0 -6
- data/spec/unit/knife/core/ui_spec.rb +21 -11
- data/spec/unit/knife/data_bag_create_spec.rb +65 -45
- data/spec/unit/knife/ssh_spec.rb +34 -36
- data/spec/unit/knife_spec.rb +2 -2
- data/spec/unit/lwrp_spec.rb +38 -127
- data/spec/unit/mixin/path_sanity_spec.rb +7 -7
- data/spec/unit/mixin/shell_out_spec.rb +18 -84
- data/spec/unit/mixin/versioned_api_spec.rb +128 -0
- data/spec/unit/mixin/which.rb +160 -0
- data/spec/unit/node/attribute_spec.rb +65 -33
- data/spec/unit/node/immutable_collections_spec.rb +104 -1
- data/spec/unit/node_map_spec.rb +1 -23
- data/spec/unit/node_spec.rb +81 -98
- data/spec/unit/policy_builder/expand_node_object_spec.rb +2 -27
- data/spec/unit/policy_builder/policyfile_spec.rb +12 -12
- data/spec/unit/property/validation_spec.rb +51 -69
- data/spec/unit/property_spec.rb +105 -125
- data/spec/unit/provider/apt_repository_spec.rb +33 -27
- data/spec/unit/provider/cron_spec.rb +15 -39
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +10 -0
- data/spec/unit/provider/dsc_resource_spec.rb +175 -0
- data/spec/unit/provider/erl_call_spec.rb +5 -13
- data/spec/unit/provider/execute_spec.rb +3 -14
- data/spec/unit/provider/launchd_spec.rb +2 -2
- data/spec/unit/provider/package/aix_spec.rb +22 -22
- data/spec/unit/provider/package/apt_spec.rb +37 -27
- data/spec/unit/provider/package/cab_spec.rb +59 -5
- data/{lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb → spec/unit/provider/package/dnf/python_helper_spec.rb} +10 -15
- data/spec/unit/provider/package/dpkg_spec.rb +16 -16
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +15 -15
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +9 -9
- data/spec/unit/provider/package/homebrew_spec.rb +9 -9
- data/spec/unit/provider/package/ips_spec.rb +37 -31
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +6 -6
- data/spec/unit/provider/package/paludis_spec.rb +7 -7
- data/spec/unit/provider/package/portage_spec.rb +6 -7
- data/spec/unit/provider/package/rpm_spec.rb +23 -23
- data/spec/unit/provider/package/rubygems_spec.rb +135 -46
- data/spec/unit/provider/package/solaris_spec.rb +15 -15
- data/spec/unit/provider/package/windows/msi_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +25 -0
- data/spec/unit/provider/package/windows_spec.rb +2 -1
- data/spec/unit/provider/package/yum_spec.rb +58 -50
- data/spec/unit/provider/package/zypper_spec.rb +54 -97
- data/spec/unit/provider/package_spec.rb +8 -0
- data/spec/unit/provider/powershell_script_spec.rb +14 -4
- data/spec/unit/provider/remote_file/sftp_spec.rb +3 -3
- data/spec/unit/provider/route_spec.rb +7 -1
- data/spec/unit/provider/script_spec.rb +49 -6
- data/spec/unit/provider/service/debian_service_spec.rb +14 -20
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +37 -1
- data/spec/unit/provider/service/upstart_service_spec.rb +12 -25
- data/spec/unit/provider/subversion_spec.rb +2 -2
- data/spec/unit/provider/user/linux_spec.rb +5 -43
- data/spec/unit/provider/user/pw_spec.rb +7 -27
- data/spec/unit/provider/windows_task_spec.rb +392 -0
- data/spec/unit/provider_resolver_spec.rb +0 -1
- data/spec/unit/provider_spec.rb +10 -3
- data/spec/unit/recipe_spec.rb +3 -172
- data/spec/unit/resource/chef_gem_spec.rb +16 -62
- data/spec/unit/resource/conditional_spec.rb +4 -4
- data/spec/unit/resource/cookbook_file_spec.rb +2 -2
- data/spec/unit/resource/cron_spec.rb +1 -1
- data/spec/unit/resource/deploy_spec.rb +4 -4
- data/spec/unit/resource/directory_spec.rb +2 -2
- data/spec/unit/resource/dsc_resource_spec.rb +6 -0
- data/spec/unit/resource/env_spec.rb +1 -1
- data/spec/unit/resource/execute_spec.rb +215 -1
- data/spec/unit/resource/file/verification/systemd_unit_spec.rb +103 -0
- data/spec/unit/resource/file/verification_spec.rb +8 -14
- data/spec/unit/resource/file_spec.rb +3 -3
- data/spec/unit/resource/freebsd_package_spec.rb +2 -2
- data/spec/unit/resource/group_spec.rb +2 -2
- data/spec/unit/resource/ifconfig_spec.rb +1 -1
- data/spec/unit/resource/link_spec.rb +2 -2
- data/spec/unit/resource/mdadm_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +3 -3
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/package_spec.rb +14 -4
- data/spec/unit/resource/registry_key_spec.rb +2 -2
- data/spec/unit/resource/remote_directory_spec.rb +2 -2
- data/spec/unit/resource/remote_file_spec.rb +2 -2
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/scm_spec.rb +2 -2
- data/spec/unit/resource/script_spec.rb +1 -1
- data/spec/unit/resource/service_spec.rb +25 -5
- data/spec/unit/resource/systemd_unit_spec.rb +1 -1
- data/spec/unit/resource/template_spec.rb +2 -2
- data/spec/unit/resource/user_spec.rb +6 -6
- data/spec/unit/resource/windows_task_spec.rb +213 -0
- data/spec/unit/resource/yum_package_spec.rb +42 -1
- data/spec/unit/resource_collection/resource_set_spec.rb +46 -1
- data/spec/unit/resource_collection_spec.rb +4 -3
- data/spec/unit/resource_reporter_spec.rb +6 -6
- data/spec/unit/resource_spec.rb +55 -71
- data/spec/unit/run_context/cookbook_compiler_spec.rb +1 -3
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +7 -4
- data/spec/unit/runner_spec.rb +10 -28
- data/spec/unit/search/query_spec.rb +32 -34
- data/spec/unit/server_api_versions_spec.rb +44 -0
- data/spec/unit/shell/shell_session_spec.rb +33 -2
- data/spec/unit/util/selinux_spec.rb +3 -14
- data/spec/unit/win32/error_spec.rb +67 -0
- data/spec/unit/win32/security_spec.rb +66 -0
- data/tasks/bundle.rb +36 -52
- data/tasks/changelog.rb +1 -1
- data/tasks/dependencies.rb +54 -52
- data/tasks/version.rb +41 -0
- metadata +91 -76
- data/lib/chef/deprecation/mixin/template.rb +0 -48
- data/lib/chef/deprecation/provider/cookbook_file.rb +0 -54
- data/lib/chef/deprecation/provider/file.rb +0 -198
- data/lib/chef/deprecation/provider/remote_directory.rb +0 -52
- data/lib/chef/deprecation/provider/remote_file.rb +0 -85
- data/lib/chef/deprecation/provider/template.rb +0 -63
- data/lib/chef/dsl/method_missing.rb +0 -75
- data/lib/chef/knife/cookbook_site_vendor.rb +0 -46
- data/lib/chef/knife/core/custom_manifest_loader.rb +0 -69
- data/lib/chef/mixin/command/unix.rb +0 -220
- data/lib/chef/mixin/command/windows.rb +0 -71
- data/lib/chef/mixin/command.rb +0 -194
- data/lib/chef/monkey_patches/net-ssh-multi.rb +0 -141
- data/lib/chef/provider/package/easy_install.rb +0 -135
- data/lib/chef/rest.rb +0 -210
- data/lib/chef/shell_out.rb +0 -13
- data/lib/chef/tasks/chef_repo.rake +0 -200
- data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +0 -20
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +0 -5
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +0 -6
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +0 -5
- data/spec/functional/rest_spec.rb +0 -95
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +0 -41
- data/spec/unit/lib_backcompat_spec.rb +0 -34
- data/spec/unit/mixin/command_spec.rb +0 -107
- data/spec/unit/platform_spec.rb +0 -242
- data/spec/unit/provider/package/easy_install_spec.rb +0 -114
- data/spec/unit/resource/easy_install_package_spec.rb +0 -39
- data/spec/unit/rest/auth_credentials_spec.rb +0 -292
- data/spec/unit/rest_spec.rb +0 -753
- data/spec/unit/shell_out_spec.rb +0 -18
- data/tasks/bin/bundle-platform +0 -20
- data/tasks/bin/bundle-platform.bat +0 -2
- data/tasks/bin/bundler_patch.rb +0 -27
- data/tasks/bin/gem-version-diff +0 -37
- data/tasks/bundle_util.rb +0 -110
|
@@ -53,13 +53,11 @@ end
|
|
|
53
53
|
# This is a temporary fix to get tests passing on systems that have no `diff`
|
|
54
54
|
# until we can replace shelling out to `diff` with ruby diff-lcs
|
|
55
55
|
def has_diff?
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
false
|
|
62
|
-
end
|
|
56
|
+
diff_cmd = Mixlib::ShellOut.new("diff -v")
|
|
57
|
+
diff_cmd.run_command
|
|
58
|
+
true
|
|
59
|
+
rescue Errno::ENOENT
|
|
60
|
+
false
|
|
63
61
|
end
|
|
64
62
|
|
|
65
63
|
# This is a helper to determine if the ruby in the PATH contains
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require "fcntl"
|
|
2
2
|
require "chef/mixin/shell_out"
|
|
3
|
+
require "ohai/mixin/http_helper"
|
|
3
4
|
require "ohai/mixin/gce_metadata"
|
|
4
5
|
|
|
5
6
|
class ShellHelpers
|
|
@@ -92,6 +93,12 @@ def windows_nano_server?
|
|
|
92
93
|
Chef::Platform.windows_nano_server?
|
|
93
94
|
end
|
|
94
95
|
|
|
96
|
+
def windows_user_right?(right)
|
|
97
|
+
return false unless windows?
|
|
98
|
+
require "chef/win32/security"
|
|
99
|
+
Chef::ReservedNames::Win32::Security.get_account_right(ENV["USERNAME"]).include?(right)
|
|
100
|
+
end
|
|
101
|
+
|
|
95
102
|
def mac_osx_106?
|
|
96
103
|
if File.exists? "/usr/bin/sw_vers"
|
|
97
104
|
result = ShellHelpers.shell_out("/usr/bin/sw_vers")
|
|
@@ -215,12 +222,12 @@ def fips?
|
|
|
215
222
|
ENV["CHEF_FIPS"] == "1"
|
|
216
223
|
end
|
|
217
224
|
|
|
218
|
-
class
|
|
219
|
-
extend Ohai::Mixin::
|
|
225
|
+
class HttpHelper
|
|
226
|
+
extend Ohai::Mixin::HttpHelper
|
|
220
227
|
end
|
|
221
228
|
|
|
222
229
|
def gce?
|
|
223
|
-
|
|
230
|
+
HttpHelper.can_socket_connect?(Ohai::Mixin::GCEMetadata::GCE_METADATA_ADDR, 80)
|
|
224
231
|
rescue SocketError
|
|
225
232
|
false
|
|
226
233
|
end
|
|
@@ -35,12 +35,10 @@ module RSpec
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def working_set_size
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
::GC::Profiler.clear
|
|
43
|
-
end
|
|
38
|
+
::GC.start
|
|
39
|
+
::GC::Profiler.result.scan(LINE_PATTERN)[-1][2].to_i if ::GC::Profiler.enabled?
|
|
40
|
+
ensure
|
|
41
|
+
::GC::Profiler.clear
|
|
44
42
|
end
|
|
45
43
|
|
|
46
44
|
def handle_count
|
|
@@ -95,7 +95,7 @@ shared_context "a client run" do
|
|
|
95
95
|
|
|
96
96
|
def stub_for_data_collector_init
|
|
97
97
|
expect(Chef::ServerAPI).to receive(:new).
|
|
98
|
-
with(Chef::Config[:data_collector][:server_url]).
|
|
98
|
+
with(Chef::Config[:data_collector][:server_url], validate_utf8: false).
|
|
99
99
|
exactly(:once).
|
|
100
100
|
and_return(http_data_collector)
|
|
101
101
|
end
|
|
@@ -129,12 +129,18 @@ shared_context "a client run" do
|
|
|
129
129
|
# ---Client#sync_cookbooks -- downloads the list of cookbooks to sync
|
|
130
130
|
#
|
|
131
131
|
expect_any_instance_of(Chef::CookbookSynchronizer).to receive(:sync_cookbooks)
|
|
132
|
-
expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url]).and_return(http_cookbook_sync)
|
|
132
|
+
expect(Chef::ServerAPI).to receive(:new).with(Chef::Config[:chef_server_url], version_class: Chef::CookbookManifestVersions).and_return(http_cookbook_sync)
|
|
133
133
|
expect(http_cookbook_sync).to receive(:post).
|
|
134
134
|
with("environments/_default/cookbook_versions", { :run_list => [] }).
|
|
135
135
|
and_return({})
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
+
def stub_for_required_recipe
|
|
139
|
+
response = Net::HTTPNotFound.new("1.1", "404", "Not Found")
|
|
140
|
+
exception = Net::HTTPServerException.new('404 "Not Found"', response)
|
|
141
|
+
expect(http_node_load).to receive(:get).with("required_recipe").and_raise(exception)
|
|
142
|
+
end
|
|
143
|
+
|
|
138
144
|
def stub_for_converge
|
|
139
145
|
# define me
|
|
140
146
|
end
|
|
@@ -165,6 +171,7 @@ shared_context "a client run" do
|
|
|
165
171
|
stub_for_data_collector_init
|
|
166
172
|
stub_for_node_load
|
|
167
173
|
stub_for_sync_cookbooks
|
|
174
|
+
stub_for_required_recipe
|
|
168
175
|
stub_for_converge
|
|
169
176
|
stub_for_audit
|
|
170
177
|
stub_for_node_save
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author:: Adam Edwards (<adamed@chef.io>)
|
|
3
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
shared_context "a non-admin Windows user" do
|
|
20
|
+
include Chef::Mixin::ShellOut
|
|
21
|
+
|
|
22
|
+
let(:windows_nonadmin_user_domain) { ENV["COMPUTERNAME"] }
|
|
23
|
+
let(:windows_nonadmin_user_qualified) { "#{windows_nonadmin_user_domain}\\#{windows_nonadmin_user}" }
|
|
24
|
+
let(:temp_profile_path) { "#{ENV['USERPROFILE']}\\..\\cheftesttempuser" }
|
|
25
|
+
before do
|
|
26
|
+
shell_out!("net.exe user /delete #{windows_nonadmin_user}", returns: [0, 2])
|
|
27
|
+
|
|
28
|
+
# Supply a profile path when creating a user to avoid an apparent Windows bug where deleting
|
|
29
|
+
# the user actually creates the profile when it did not immediately exist before executing
|
|
30
|
+
# net user /delete! For some reason, specifying an explicit path ensures that the path
|
|
31
|
+
# profile doesn't get created at deletion.
|
|
32
|
+
shell_out!("net.exe user /add #{windows_nonadmin_user} \"#{windows_nonadmin_user_password}\" /profilepath:#{temp_profile_path}")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
after do
|
|
36
|
+
shell_out!("net.exe user /delete #{windows_nonadmin_user}", returns: [0, 2])
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
shared_context "alternate user identity" do
|
|
41
|
+
let(:windows_alternate_user) { "chef%02d%02d%02d" % [Time.now.year % 100, Time.now.month, Time.now.day] }
|
|
42
|
+
let(:windows_alternate_user_password) { "lj28;fx3T!x,2" }
|
|
43
|
+
let(:windows_alternate_user_qualified) { "#{ENV['COMPUTERNAME']}\\#{windows_alternate_user}" }
|
|
44
|
+
|
|
45
|
+
let(:windows_nonadmin_user) { windows_alternate_user }
|
|
46
|
+
let(:windows_nonadmin_user_password) { windows_alternate_user_password }
|
|
47
|
+
|
|
48
|
+
include_context "a non-admin Windows user"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
shared_context "a command that can be executed as an alternate user" do
|
|
52
|
+
include_context "alternate user identity"
|
|
53
|
+
|
|
54
|
+
let(:script_output_dir) { Dir.mktmpdir }
|
|
55
|
+
let(:script_output_path) { File.join(script_output_dir, make_tmpname("chef_execute_identity_test")) }
|
|
56
|
+
let(:script_output) { File.read(script_output_path) }
|
|
57
|
+
|
|
58
|
+
include Chef::Mixin::ShellOut
|
|
59
|
+
|
|
60
|
+
before do
|
|
61
|
+
shell_out!("icacls \"#{script_output_dir.gsub(/\//, '\\')}\" /grant \"authenticated users:(F)\"")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
after do
|
|
65
|
+
File.delete(script_output_path) if File.exists?(script_output_path)
|
|
66
|
+
Dir.rmdir(script_output_dir) if Dir.exists?(script_output_dir)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
shared_examples_for "an execute resource that supports alternate user identity" do
|
|
71
|
+
context "when running on Windows", :windows_only, :windows_service_requires_assign_token do
|
|
72
|
+
|
|
73
|
+
include_context "a command that can be executed as an alternate user"
|
|
74
|
+
|
|
75
|
+
let(:windows_current_user) { ENV["USERNAME"] }
|
|
76
|
+
let(:windows_current_user_qualified) { "#{ENV['USERDOMAIN'] || ENV['COMPUTERNAME']}\\#{windows_current_user}" }
|
|
77
|
+
let(:resource_identity_command) { "powershell.exe -noprofile -command \"import-module microsoft.powershell.utility;([Security.Principal.WindowsPrincipal]([Security.Principal.WindowsIdentity]::GetCurrent())).identity.name | out-file -encoding ASCII '#{script_output_path}'\"" }
|
|
78
|
+
|
|
79
|
+
let(:execute_resource) do
|
|
80
|
+
resource.user(windows_alternate_user)
|
|
81
|
+
resource.password(windows_alternate_user_password)
|
|
82
|
+
resource.send(resource_command_property, resource_identity_command)
|
|
83
|
+
resource
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "executes the process as an alternate user" do
|
|
87
|
+
expect(windows_current_user.length).to be > 0
|
|
88
|
+
expect { execute_resource.run_action(:run) }.not_to raise_error
|
|
89
|
+
expect(script_output.chomp.length).to be > 0
|
|
90
|
+
expect(script_output.chomp.downcase).to eq(windows_alternate_user_qualified.downcase)
|
|
91
|
+
expect(script_output.chomp.downcase).not_to eq(windows_current_user.downcase)
|
|
92
|
+
expect(script_output.chomp.downcase).not_to eq(windows_current_user_qualified.downcase)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
let(:windows_alternate_user_password_invalid) { "#{windows_alternate_user_password}x" }
|
|
96
|
+
|
|
97
|
+
it "raises an exception if the user's password is invalid" do
|
|
98
|
+
execute_resource.password(windows_alternate_user_password_invalid)
|
|
99
|
+
expect { execute_resource.run_action(:run) }.to raise_error(SystemCallError)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
shared_examples_for "a resource with a guard specifying an alternate user identity" do
|
|
105
|
+
context "when running on Windows", :windows_only, :windows_service_requires_assign_token do
|
|
106
|
+
include_context "alternate user identity"
|
|
107
|
+
|
|
108
|
+
let(:resource_command_property) { :command }
|
|
109
|
+
|
|
110
|
+
let(:powershell_equal_to_alternate_user) { "-eq" }
|
|
111
|
+
let(:powershell_not_equal_to_alternate_user) { "-ne" }
|
|
112
|
+
let(:guard_identity_command) { "powershell.exe -noprofile -command \"import-module microsoft.powershell.utility;exit @(392,0)[[int32](([Security.Principal.WindowsPrincipal]([Security.Principal.WindowsIdentity]::GetCurrent())).Identity.Name #{comparison_to_alternate_user} '#{windows_alternate_user_qualified}')]\"" }
|
|
113
|
+
|
|
114
|
+
before do
|
|
115
|
+
resource.guard_interpreter(guard_interpreter_resource)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
context "when the guard expression is true if the user is alternate and false otherwise" do
|
|
119
|
+
let(:comparison_to_alternate_user) { powershell_equal_to_alternate_user }
|
|
120
|
+
|
|
121
|
+
it "causes the resource to be updated for only_if" do
|
|
122
|
+
resource.only_if(guard_identity_command, { user: windows_alternate_user, password: windows_alternate_user_password })
|
|
123
|
+
resource.run_action(:run)
|
|
124
|
+
expect(resource).to be_updated_by_last_action
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "causes the resource to not be updated for not_if" do
|
|
128
|
+
resource.not_if(guard_identity_command, { user: windows_alternate_user, password: windows_alternate_user_password })
|
|
129
|
+
resource.run_action(:run)
|
|
130
|
+
expect(resource).not_to be_updated_by_last_action
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context "when the guard expression is false if the user is alternate and true otherwise" do
|
|
135
|
+
let(:comparison_to_alternate_user) { powershell_not_equal_to_alternate_user }
|
|
136
|
+
|
|
137
|
+
it "causes the resource not to be updated for only_if" do
|
|
138
|
+
resource.only_if(guard_identity_command, { user: windows_alternate_user, password: windows_alternate_user_password })
|
|
139
|
+
resource.run_action(:run)
|
|
140
|
+
expect(resource).not_to be_updated_by_last_action
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "causes the resource to be updated for not_if" do
|
|
144
|
+
resource.not_if(guard_identity_command, { user: windows_alternate_user, password: windows_alternate_user_password })
|
|
145
|
+
resource.run_action(:run)
|
|
146
|
+
expect(resource).to be_updated_by_last_action
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
@@ -46,10 +46,6 @@ shared_context Chef::Resource::WindowsScript do
|
|
|
46
46
|
File.delete(script_output_path) if File.exists?(script_output_path)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
let!(:resource) do
|
|
50
|
-
Chef::Resource::WindowsScript::Batch.new("Batch resource functional test", @run_context)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
49
|
shared_examples_for "a script resource with architecture attribute" do
|
|
54
50
|
context "with the given architecture attribute value" do
|
|
55
51
|
let(:expected_architecture) do
|
|
@@ -125,6 +121,55 @@ shared_context Chef::Resource::WindowsScript do
|
|
|
125
121
|
end
|
|
126
122
|
|
|
127
123
|
shared_examples_for "a Windows script running on Windows" do
|
|
124
|
+
shared_examples_for "a script that cannot be accessed by other users if they are not administrators" do
|
|
125
|
+
include Chef::Mixin::ShellOut
|
|
126
|
+
|
|
127
|
+
let(:script_provider) { resource.provider_for_action(:run) }
|
|
128
|
+
let(:script_file) { script_provider.script_file }
|
|
129
|
+
let(:script_file_path) { script_file.to_path }
|
|
130
|
+
|
|
131
|
+
let(:read_access_denied_command) { "::File.read('#{script_file_path}')" }
|
|
132
|
+
let(:modify_access_denied_command) { "::File.write('#{script_file_path}', 'stuff')" }
|
|
133
|
+
let(:delete_access_denied_command) { "::File.delete('#{script_file_path}')" }
|
|
134
|
+
let(:access_denied_sentinel) { 7334 }
|
|
135
|
+
let(:access_allowed_sentinel) { 1586 }
|
|
136
|
+
let(:access_command_invalid) { 0 }
|
|
137
|
+
|
|
138
|
+
let(:ruby_interpreter_path) { RbConfig.ruby }
|
|
139
|
+
let(:ruby_command_template) { "require 'FileUtils';status = 0;begin; #{ruby_access_command};rescue Exception => e; puts e; status = e.class == Errno::EACCES ? #{access_denied_sentinel} : #{access_allowed_sentinel};end;exit status" }
|
|
140
|
+
let(:command_template) { "set BUNDLE_GEMFILE=&#{ruby_interpreter_path} -e \"#{ruby_command_template}\"" }
|
|
141
|
+
let(:access_command) { command_template }
|
|
142
|
+
|
|
143
|
+
before do
|
|
144
|
+
expect(script_provider).to receive(:unlink_script_file)
|
|
145
|
+
resource.code("echo hi")
|
|
146
|
+
script_provider.action_run
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
after do
|
|
150
|
+
script_file.close! if script_file
|
|
151
|
+
::File.delete(script_file.to_path) if script_file && ::File.exists?(script_file.to_path)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
include_context "alternate user identity"
|
|
155
|
+
|
|
156
|
+
shared_examples_for "a script whose file system location cannot be accessed by other non-admin users" do
|
|
157
|
+
let(:ruby_access_command) { file_access_command }
|
|
158
|
+
it "generates a script in the local file system that prevents read access to other non-admin users" do
|
|
159
|
+
shell_out!(access_command, { user: windows_nonadmin_user, password: windows_nonadmin_user_password, returns: [access_denied_sentinel] })
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
context "when a different non-admin user attempts write (modify) to access the script" do
|
|
164
|
+
let(:file_access_command) { modify_access_denied_command }
|
|
165
|
+
it_behaves_like "a script whose file system location cannot be accessed by other non-admin users"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context "when a different non-admin user attempts write (delete) to access the script" do
|
|
169
|
+
let(:file_access_command) { delete_access_denied_command }
|
|
170
|
+
it_behaves_like "a script whose file system location cannot be accessed by other non-admin users"
|
|
171
|
+
end
|
|
172
|
+
end
|
|
128
173
|
|
|
129
174
|
describe "when the run action is invoked on Windows" do
|
|
130
175
|
it "executes the script code" do
|
|
@@ -132,6 +177,21 @@ shared_context Chef::Resource::WindowsScript do
|
|
|
132
177
|
resource.returns(0)
|
|
133
178
|
resource.run_action(:run)
|
|
134
179
|
end
|
|
180
|
+
|
|
181
|
+
context "the script is executed with the identity of the current user", :windows_service_requires_assign_token do
|
|
182
|
+
it_behaves_like "a script that cannot be accessed by other users if they are not administrators"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
context "the script is executed with an alternate non-admin identity", :windows_service_requires_assign_token do
|
|
186
|
+
include_context "alternate user identity"
|
|
187
|
+
|
|
188
|
+
before do
|
|
189
|
+
resource.user(windows_alternate_user)
|
|
190
|
+
resource.password(windows_alternate_user_password)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it_behaves_like "a script that cannot be accessed by other users if they are not administrators"
|
|
194
|
+
end
|
|
135
195
|
end
|
|
136
196
|
|
|
137
197
|
context "when $env:TMP has a space" do
|
|
@@ -165,6 +225,11 @@ shared_context Chef::Resource::WindowsScript do
|
|
|
165
225
|
expect(resource.class).to receive(:new).and_call_original
|
|
166
226
|
expect(resource.should_skip?(:run)).to be_falsey
|
|
167
227
|
end
|
|
228
|
+
|
|
229
|
+
context "when this resource is used as a guard and it is specified with an alternate user identity" do
|
|
230
|
+
let(:guard_interpreter_resource) { resource.resource_name }
|
|
231
|
+
it_behaves_like "a resource with a guard specifying an alternate user identity"
|
|
232
|
+
end
|
|
168
233
|
end
|
|
169
234
|
|
|
170
235
|
context "when the architecture attribute is not set" do
|
|
@@ -181,6 +246,11 @@ shared_context Chef::Resource::WindowsScript do
|
|
|
181
246
|
let(:resource_architecture) { :x86_64 }
|
|
182
247
|
it_behaves_like "a script resource with architecture attribute"
|
|
183
248
|
end
|
|
249
|
+
|
|
250
|
+
describe "when running with an alternate user identity" do
|
|
251
|
+
let(:resource_command_property) { :code }
|
|
252
|
+
it_behaves_like "an execute resource that supports alternate user identity"
|
|
253
|
+
end
|
|
184
254
|
end
|
|
185
255
|
|
|
186
256
|
def get_windows_script_output(suffix = "")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: John Keiser (<jkeiser@chef.io>)
|
|
3
|
-
# Copyright:: Copyright 2013-
|
|
3
|
+
# Copyright:: Copyright 2013-2017, Chef Software Inc.
|
|
4
4
|
# License:: Apache License, Version 2.0
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
3
|
# Author:: Tyler Cloke (<tyler@chef.io>)
|
|
4
|
-
# Copyright:: Copyright 2008-
|
|
4
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
5
5
|
# License:: Apache License, Version 2.0
|
|
6
6
|
#
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -76,14 +76,8 @@ shared_examples_for "an execute resource" do
|
|
|
76
76
|
expect(@resource.group).to eql(1)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
it "
|
|
80
|
-
expect
|
|
81
|
-
@resource.path ["woot"]
|
|
82
|
-
expect(@resource.path).to eql(["woot"])
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should raise an exception in chef-13", chef: ">= 13" do
|
|
86
|
-
expect(@resource.path [ "woot" ]).to raise_error
|
|
79
|
+
it "the old path property (that never worked) is not supported in chef >= 13" do
|
|
80
|
+
expect { @resource.path [ "woot" ] }.to raise_error
|
|
87
81
|
end
|
|
88
82
|
|
|
89
83
|
it "should accept an integer for the return code" do
|
|
@@ -106,6 +100,16 @@ shared_examples_for "an execute resource" do
|
|
|
106
100
|
expect(@resource.user).to eql(1)
|
|
107
101
|
end
|
|
108
102
|
|
|
103
|
+
it "should accept a string for the domain" do
|
|
104
|
+
@resource.domain "mothership"
|
|
105
|
+
expect(@resource.domain).to eql("mothership")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should accept a string for the password" do
|
|
109
|
+
@resource.password "we.funk!"
|
|
110
|
+
expect(@resource.password).to eql("we.funk!")
|
|
111
|
+
end
|
|
112
|
+
|
|
109
113
|
it "should accept a string for creates" do
|
|
110
114
|
@resource.creates "something"
|
|
111
115
|
expect(@resource.creates).to eql("something")
|
|
@@ -116,6 +120,30 @@ shared_examples_for "an execute resource" do
|
|
|
116
120
|
expect(@resource.live_stream).to be true
|
|
117
121
|
end
|
|
118
122
|
|
|
123
|
+
describe "the resource's sensitive attribute" do
|
|
124
|
+
it "should be false by default" do
|
|
125
|
+
expect(@resource.sensitive).to eq(false)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should be true if set to true" do
|
|
129
|
+
expect(@resource.sensitive).to eq(false)
|
|
130
|
+
@resource.sensitive true
|
|
131
|
+
expect(@resource.sensitive).to eq(true)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "should be true if the password is non-nil" do
|
|
135
|
+
@resource.password("we.funk!")
|
|
136
|
+
expect(@resource.sensitive).to eq(true)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should be true if the password is non-nil but the value is explicitly set to false" do
|
|
140
|
+
@resource.password("we.funk!")
|
|
141
|
+
@resource.sensitive false
|
|
142
|
+
expect(@resource.sensitive).to eq(true)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
119
147
|
describe "when it has cwd, environment, group, path, return value, and a user" do
|
|
120
148
|
before do
|
|
121
149
|
@resource.command("grep")
|
|
@@ -683,6 +683,16 @@ shared_examples_for Chef::Provider::File do
|
|
|
683
683
|
end
|
|
684
684
|
end
|
|
685
685
|
|
|
686
|
+
context "in why run mode" do
|
|
687
|
+
before { Chef::Config[:why_run] = true }
|
|
688
|
+
after { Chef::Config[:why_run] = false }
|
|
689
|
+
|
|
690
|
+
it "does not modify new_resource" do
|
|
691
|
+
setup_missing_file
|
|
692
|
+
expect(provider).not_to receive(:load_resource_attributes_from_file).with(provider.new_resource)
|
|
693
|
+
provider.run_action(:create)
|
|
694
|
+
end
|
|
695
|
+
end
|
|
686
696
|
end
|
|
687
697
|
|
|
688
698
|
context "action delete" do
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#
|
|
2
2
|
# Author:: Adam Jacob (<adam@chef.io>)
|
|
3
3
|
# Author:: Tyler Cloke (<tyler@chef.io>)
|
|
4
|
-
# Copyright:: Copyright 2008-
|
|
4
|
+
# Copyright:: Copyright 2008-2017, Chef Software Inc.
|
|
5
5
|
# License:: Apache License, Version 2.0
|
|
6
6
|
#
|
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -34,10 +34,6 @@ shared_examples_for "a script resource" do
|
|
|
34
34
|
expect(script_resource.command).to be nil
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
it "should set command to the name on the resource", chef: "< 13" do
|
|
38
|
-
expect(script_resource.command).to eql script_resource.name
|
|
39
|
-
end
|
|
40
|
-
|
|
41
37
|
it "should accept a string for the code" do
|
|
42
38
|
script_resource.code "hey jude"
|
|
43
39
|
expect(script_resource.code).to eql("hey jude")
|
|
@@ -52,10 +48,6 @@ shared_examples_for "a script resource" do
|
|
|
52
48
|
expect { script_resource.command("foo") }.to raise_error(Chef::Exceptions::Script)
|
|
53
49
|
end
|
|
54
50
|
|
|
55
|
-
it "should not raise an exception if users set command on the resource", chef: "< 13" do
|
|
56
|
-
expect { script_resource.command("foo") }.not_to raise_error
|
|
57
|
-
end
|
|
58
|
-
|
|
59
51
|
describe "when executing guards" do
|
|
60
52
|
let(:resource) do
|
|
61
53
|
resource = script_resource
|
|
@@ -70,92 +70,11 @@ describe Chef::Application::ExitCode do
|
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
context "when Chef
|
|
74
|
-
before do
|
|
75
|
-
allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(nil)
|
|
76
|
-
allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "writes a deprecation warning" do
|
|
80
|
-
expect(Chef).to receive(:deprecated).with(:exit_code, /^Chef RFC 062/)
|
|
81
|
-
expect(exit_codes.normalize_exit_code(151)).to eq(151)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "does not modify non-RFC exit codes" do
|
|
85
|
-
expect(exit_codes.normalize_exit_code(151)).to eq(151)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "returns DEPRECATED_FAILURE when no exit code is specified" do
|
|
89
|
-
expect(exit_codes.normalize_exit_code()).to eq(-1)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "returns SIGINT_RECEIVED when a SIGINT is received" do
|
|
93
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigInt.new("BOOM"))).to eq(2)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "returns SIGTERM_RECEIVED when a SIGTERM is received" do
|
|
97
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "returns SIGINT_RECEIVED when a deprecated exit code error is received" do
|
|
101
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(2)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "returns GENERIC_FAILURE when an exception is specified" do
|
|
105
|
-
expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
context "when Chef::Config :exit_status is configured to not validate exit codes" do
|
|
111
|
-
before do
|
|
112
|
-
allow(Chef::Config).to receive(:[]).with(:exit_status).and_return(:disabled)
|
|
113
|
-
allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "does not write a deprecation warning" do
|
|
117
|
-
expect(Chef).not_to receive(:deprecated).with(:exit_code, /^Chef RFC 062/)
|
|
118
|
-
expect(exit_codes.normalize_exit_code(151)).to eq(151)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "does not modify non-RFC exit codes" do
|
|
122
|
-
expect(exit_codes.normalize_exit_code(151)).to eq(151)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "returns DEPRECATED_FAILURE when no exit code is specified" do
|
|
126
|
-
expect(exit_codes.normalize_exit_code()).to eq(-1)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "returns GENERIC_FAILURE when an exception is specified" do
|
|
130
|
-
expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "returns SUCCESS when a reboot is pending" do
|
|
134
|
-
allow(Chef::DSL::RebootPending).to receive(:reboot_pending?).and_return(true)
|
|
135
|
-
expect(exit_codes.normalize_exit_code(0)).to eq(0)
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "returns SIGINT_RECEIVED when a SIGINT is received" do
|
|
139
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigInt.new("BOOM"))).to eq(2)
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
it "returns SIGTERM_RECEIVED when a SIGTERM is received" do
|
|
143
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "returns SIGINT_RECEIVED when a deprecated exit code error is received" do
|
|
147
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(2)
|
|
148
|
-
end
|
|
149
|
-
end
|
|
73
|
+
context "when Chef validates exit codes" do
|
|
150
74
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
allow(Chef::Config).to receive(:[]).with(:treat_deprecation_warnings_as_errors).and_return(false)
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "does write a deprecation warning" do
|
|
158
|
-
expect(Chef).to receive(:deprecated).with(:exit_code, /^Chef RFC 062/)
|
|
75
|
+
it "does write a warning on non-standard exit codes" do
|
|
76
|
+
expect(Chef::Log).to receive(:warn).with(
|
|
77
|
+
/^Chef attempted to exit with a non-standard exit code of 151/)
|
|
159
78
|
expect(exit_codes.normalize_exit_code(151)).to eq(1)
|
|
160
79
|
end
|
|
161
80
|
|
|
@@ -175,10 +94,6 @@ describe Chef::Application::ExitCode do
|
|
|
175
94
|
expect(exit_codes.normalize_exit_code(Chef::Exceptions::SigTerm.new("BOOM"))).to eq(3)
|
|
176
95
|
end
|
|
177
96
|
|
|
178
|
-
it "returns GENERIC_FAILURE when a deprecated exit code error is received" do
|
|
179
|
-
expect(exit_codes.normalize_exit_code(Chef::Exceptions::DeprecatedExitCode.new("BOOM"))).to eq(1)
|
|
180
|
-
end
|
|
181
|
-
|
|
182
97
|
it "returns GENERIC_FAILURE when an exception is specified" do
|
|
183
98
|
expect(exit_codes.normalize_exit_code(Exception.new("BOOM"))).to eq(1)
|
|
184
99
|
end
|