chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +21 -25
- data/Gemfile +46 -0
- data/README.md +4 -4
- data/Rakefile +4 -110
- data/bin/chef-service-manager +3 -1
- data/distro/common/html/knife_cookbook_site.html +18 -18
- data/distro/common/man/man1/knife-cookbook-site.1 +11 -11
- data/lib/chef.rb +1 -1
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/apply.rb +19 -1
- data/lib/chef/application/client.rb +11 -5
- data/lib/chef/application/knife.rb +2 -2
- data/lib/chef/application/solo.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +19 -12
- data/lib/chef/chef_class.rb +46 -0
- data/lib/chef/chef_fs/config.rb +22 -24
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +3 -1
- data/lib/chef/chef_fs/file_pattern.rb +4 -15
- data/lib/chef/chef_fs/file_system/acl_dir.rb +3 -4
- data/lib/chef/chef_fs/file_system/acls_dir.rb +5 -1
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +0 -5
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +5 -2
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +2 -9
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +10 -17
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -12
- data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +15 -11
- data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +8 -2
- data/lib/chef/chef_fs/file_system/cookbook_dir.rb +4 -4
- data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -11
- data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -5
- data/lib/chef/chef_fs/file_system/environments_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +7 -4
- data/lib/chef/chef_fs/file_system/memory_dir.rb +2 -3
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +15 -0
- data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -2
- data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -9
- data/lib/chef/chef_fs/knife.rb +35 -7
- data/lib/chef/chef_fs/path_utils.rb +65 -34
- data/lib/chef/client.rb +2 -3
- data/lib/chef/config.rb +34 -2
- data/lib/chef/{mixin/wstring.rb → constants.rb} +9 -13
- data/lib/chef/cookbook/metadata.rb +25 -3
- data/lib/chef/cookbook/synchronizer.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +3 -3
- data/lib/chef/delayed_evaluator.rb +21 -0
- data/lib/chef/deprecation/mixin/template.rb +1 -2
- data/lib/chef/deprecation/provider/cookbook_file.rb +1 -1
- data/lib/chef/deprecation/provider/file.rb +1 -1
- data/lib/chef/deprecation/provider/remote_directory.rb +52 -0
- data/lib/chef/deprecation/provider/remote_file.rb +1 -2
- data/lib/chef/deprecation/provider/template.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +3 -4
- data/lib/chef/dsl/reboot_pending.rb +3 -2
- data/lib/chef/dsl/recipe.rb +26 -7
- data/lib/chef/dsl/resources.rb +2 -2
- data/lib/chef/event_dispatch/base.rb +51 -22
- data/lib/chef/event_dispatch/dispatcher.rb +21 -6
- data/lib/chef/event_dispatch/dsl.rb +64 -0
- data/lib/chef/exceptions.rb +28 -1
- data/lib/chef/file_content_management/tempfile.rb +1 -1
- data/lib/chef/formatters/base.rb +3 -0
- data/lib/chef/formatters/doc.rb +56 -6
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +36 -0
- data/lib/chef/formatters/minimal.rb +2 -2
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/knife.rb +35 -55
- data/lib/chef/knife/bootstrap.rb +41 -0
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -0
- data/lib/chef/knife/bootstrap/client_builder.rb +16 -0
- data/lib/chef/knife/bootstrap/templates/README.md +3 -4
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
- data/lib/chef/knife/cookbook_create.rb +1 -1
- data/lib/chef/knife/cookbook_site_download.rb +1 -1
- data/lib/chef/knife/cookbook_site_install.rb +1 -1
- data/lib/chef/knife/cookbook_site_share.rb +6 -6
- data/lib/chef/knife/cookbook_site_unshare.rb +2 -2
- data/lib/chef/knife/core/bootstrap_context.rb +12 -4
- data/lib/chef/knife/core/custom_manifest_loader.rb +69 -0
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -0
- data/lib/chef/knife/core/hashed_command_loader.rb +80 -0
- data/lib/chef/knife/core/node_presenter.rb +24 -1
- data/lib/chef/knife/core/object_loader.rb +1 -0
- data/lib/chef/knife/core/subcommand_loader.rb +131 -146
- data/lib/chef/knife/node_run_list_remove.rb +12 -1
- data/lib/chef/knife/null.rb +10 -0
- data/lib/chef/knife/rehash.rb +62 -0
- data/lib/chef/knife/search.rb +3 -3
- data/lib/chef/knife/ssh.rb +52 -30
- data/lib/chef/knife/ssl_check.rb +3 -2
- data/lib/chef/knife/user_edit.rb +1 -2
- data/lib/chef/local_mode.rb +5 -0
- data/lib/chef/log.rb +5 -1
- data/lib/chef/mixin/deprecation.rb +8 -8
- data/lib/chef/mixin/params_validate.rb +362 -135
- data/lib/chef/mixin/template.rb +48 -0
- data/lib/chef/mixin/which.rb +1 -1
- data/lib/chef/mixin/wide_string.rb +72 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +15 -39
- data/lib/chef/mixin/windows_env_helper.rb +4 -1
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -0
- data/lib/chef/monkey_patches/win32/registry.rb +72 -0
- data/lib/chef/node.rb +116 -3
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/platform/handler_map.rb +0 -5
- data/lib/chef/platform/provider_mapping.rb +5 -6
- data/lib/chef/platform/query_helpers.rb +46 -4
- data/lib/chef/platform/rebooter.rb +1 -1
- data/lib/chef/platform/service_helpers.rb +30 -32
- data/lib/chef/policy_builder.rb +1 -8
- data/lib/chef/policy_builder/dynamic.rb +186 -0
- data/lib/chef/policy_builder/expand_node_object.rb +30 -15
- data/lib/chef/policy_builder/policyfile.rb +155 -18
- data/lib/chef/property.rb +568 -0
- data/lib/chef/provider.rb +222 -13
- data/lib/chef/provider/batch.rb +8 -0
- data/lib/chef/provider/deploy.rb +5 -7
- data/lib/chef/provider/directory.rb +14 -2
- data/lib/chef/provider/dsc_resource.rb +5 -9
- data/lib/chef/provider/group/pw.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -2
- data/lib/chef/provider/lwrp_base.rb +1 -75
- data/lib/chef/provider/mount.rb +7 -3
- data/lib/chef/provider/package.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +5 -11
- data/lib/chef/provider/package/rpm.rb +2 -2
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/yum.rb +17 -5
- data/lib/chef/provider/powershell_script.rb +59 -23
- data/lib/chef/provider/registry_key.rb +5 -5
- data/lib/chef/provider/remote_directory.rb +190 -102
- data/lib/chef/provider/service.rb +12 -2
- data/lib/chef/provider/service/aix.rb +1 -1
- data/lib/chef/provider/service/debian.rb +3 -5
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/gentoo.rb +3 -3
- data/lib/chef/provider/service/init.rb +3 -3
- data/lib/chef/provider/service/insserv.rb +2 -4
- data/lib/chef/provider/service/invokercd.rb +2 -4
- data/lib/chef/provider/service/macosx.rb +5 -1
- data/lib/chef/provider/service/openbsd.rb +2 -1
- data/lib/chef/provider/service/redhat.rb +52 -16
- data/lib/chef/provider/service/simple.rb +2 -2
- data/lib/chef/provider/service/systemd.rb +3 -5
- data/lib/chef/provider/service/upstart.rb +4 -6
- data/lib/chef/provider/subversion.rb +13 -7
- data/lib/chef/provider/template/content.rb +16 -6
- data/lib/chef/provider/user/solaris.rb +32 -4
- data/lib/chef/provider/windows_script.rb +3 -5
- data/lib/chef/provider_resolver.rb +2 -2
- data/lib/chef/recipe.rb +1 -8
- data/lib/chef/resource.rb +563 -90
- data/lib/chef/resource/action_class.rb +83 -0
- data/lib/chef/resource/chef_gem.rb +3 -3
- data/lib/chef/resource/deploy.rb +8 -2
- data/lib/chef/resource/dsc_script.rb +2 -0
- data/lib/chef/resource/file/verification.rb +7 -1
- data/lib/chef/resource/lwrp_base.rb +1 -7
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/service.rb +10 -2
- data/lib/chef/resource/subversion.rb +5 -0
- data/lib/chef/resource/windows_script.rb +6 -2
- data/lib/chef/resource/yum_package.rb +10 -1
- data/lib/chef/resource_resolver.rb +3 -3
- data/lib/chef/run_context.rb +402 -83
- data/lib/chef/run_list/versioned_recipe_list.rb +15 -0
- data/lib/chef/run_lock.rb +30 -21
- data/lib/chef/util/powershell/ps_credential.rb +4 -0
- data/lib/chef/util/windows.rb +0 -32
- data/lib/chef/util/windows/net_group.rb +85 -106
- data/lib/chef/util/windows/net_use.rb +35 -71
- data/lib/chef/util/windows/net_user.rb +0 -1
- data/lib/chef/util/windows/volume.rb +19 -19
- data/lib/chef/version.rb +3 -3
- data/lib/chef/win32/api.rb +1 -0
- data/lib/chef/win32/api/file.rb +20 -0
- data/lib/chef/win32/api/net.rb +163 -43
- data/lib/chef/win32/api/registry.rb +51 -0
- data/lib/chef/win32/api/system.rb +23 -0
- data/lib/chef/win32/api/unicode.rb +0 -43
- data/lib/chef/win32/crypto.rb +2 -1
- data/lib/chef/win32/file.rb +28 -3
- data/lib/chef/win32/mutex.rb +1 -2
- data/lib/chef/win32/net.rb +162 -8
- data/lib/chef/win32/process.rb +13 -0
- data/lib/chef/win32/registry.rb +35 -30
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/security/token.rb +1 -1
- data/lib/chef/win32/system.rb +62 -0
- data/lib/chef/win32/unicode.rb +7 -2
- data/lib/chef/win32/version.rb +0 -4
- data/lib/chef/workstation_config_loader.rb +3 -158
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -0
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -0
- data/spec/data/dsc_lcm.pfx +0 -0
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -0
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -0
- data/spec/functional/dsl/reboot_pending_spec.rb +33 -43
- data/spec/functional/knife/cookbook_delete_spec.rb +17 -7
- data/spec/functional/knife/ssh_spec.rb +16 -0
- data/spec/functional/rebooter_spec.rb +1 -1
- data/spec/functional/resource/deploy_revision_spec.rb +1 -1
- data/spec/functional/resource/dsc_resource_spec.rb +2 -0
- data/spec/functional/resource/dsc_script_spec.rb +91 -2
- data/spec/functional/resource/group_spec.rb +67 -44
- data/spec/functional/resource/{powershell_spec.rb → powershell_script_spec.rb} +107 -18
- data/spec/functional/resource/windows_service_spec.rb +1 -1
- data/spec/functional/run_lock_spec.rb +368 -189
- data/spec/functional/win32/{registry_helper_spec.rb → registry_spec.rb} +16 -23
- data/spec/functional/win32/service_manager_spec.rb +2 -2
- data/spec/integration/client/client_spec.rb +51 -0
- data/spec/integration/knife/chef_repo_path_spec.rb +13 -11
- data/spec/integration/knife/download_spec.rb +4 -0
- data/spec/integration/knife/list_spec.rb +8 -0
- data/spec/integration/knife/upload_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +1 -16
- data/spec/integration/recipes/remote_directory.rb +74 -0
- data/spec/integration/recipes/resource_action_spec.rb +363 -0
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +423 -0
- data/spec/integration/recipes/resource_load_spec.rb +206 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/platform_helpers.rb +13 -0
- data/spec/support/shared/context/win32.rb +34 -0
- data/spec/support/shared/functional/win32_service.rb +2 -1
- data/spec/support/shared/functional/windows_script.rb +63 -26
- data/spec/support/shared/unit/mock_shellout.rb +46 -0
- data/spec/support/shared/unit/provider/file.rb +10 -4
- data/spec/unit/application/client_spec.rb +16 -3
- data/spec/unit/application/knife_spec.rb +2 -2
- data/spec/unit/application/solo_spec.rb +4 -3
- data/spec/unit/chef_class_spec.rb +23 -4
- data/spec/unit/chef_fs/path_util_spec.rb +108 -0
- data/spec/unit/client_spec.rb +6 -1
- data/spec/unit/config_spec.rb +31 -0
- data/spec/unit/cookbook/metadata_spec.rb +23 -3
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
- data/spec/unit/deprecation_spec.rb +3 -6
- data/spec/unit/dsl/reboot_pending_spec.rb +12 -6
- data/spec/unit/event_dispatch/dispatcher_spec.rb +65 -3
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -0
- data/spec/unit/formatters/doc_spec.rb +32 -0
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +26 -0
- data/spec/unit/json_compat_spec.rb +4 -3
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +27 -0
- data/spec/unit/knife/bootstrap_spec.rb +55 -3
- data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
- data/spec/unit/knife/core/bootstrap_context_spec.rb +21 -4
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -0
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +210 -0
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +93 -0
- data/spec/unit/knife/core/subcommand_loader_spec.rb +16 -192
- data/spec/unit/knife/node_run_list_remove_spec.rb +17 -0
- data/spec/unit/knife/ssl_check_spec.rb +4 -0
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +10 -10
- data/spec/unit/mixin/params_validate_spec.rb +4 -2
- data/spec/unit/mixin/template_spec.rb +5 -1
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +13 -8
- data/spec/unit/node_spec.rb +220 -0
- data/spec/unit/platform/query_helpers_spec.rb +146 -3
- data/spec/unit/policy_builder/dynamic_spec.rb +275 -0
- data/spec/unit/policy_builder/expand_node_object_spec.rb +37 -38
- data/spec/unit/policy_builder/policyfile_spec.rb +260 -46
- data/spec/unit/property/state_spec.rb +506 -0
- data/spec/unit/property/validation_spec.rb +663 -0
- data/spec/unit/property_spec.rb +1094 -0
- data/spec/unit/provider/deploy_spec.rb +5 -5
- data/spec/unit/provider/directory_spec.rb +35 -0
- data/spec/unit/provider/dsc_resource_spec.rb +3 -10
- data/spec/unit/provider/ifconfig_spec.rb +22 -2
- data/spec/unit/provider/mount/aix_spec.rb +2 -1
- data/spec/unit/provider/mount/mount_spec.rb +6 -0
- data/spec/unit/provider/mount/windows_spec.rb +14 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/package/dpkg_spec.rb +8 -1
- data/spec/unit/provider/package/rpm_spec.rb +18 -1
- data/spec/unit/provider/package/rubygems_spec.rb +18 -0
- data/spec/unit/provider/package/yum_spec.rb +97 -24
- data/spec/unit/provider/powershell_script_spec.rb +106 -0
- data/spec/unit/provider/registry_key_spec.rb +12 -0
- data/spec/unit/provider/remote_directory_spec.rb +1 -2
- data/spec/unit/provider/service/aix_service_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_service_spec.rb +4 -4
- data/spec/unit/provider/service/macosx_spec.rb +4 -4
- data/spec/unit/provider/service/openbsd_service_spec.rb +10 -8
- data/spec/unit/provider/service/redhat_spec.rb +88 -8
- data/spec/unit/provider/service/upstart_service_spec.rb +11 -7
- data/spec/unit/provider/service/windows_spec.rb +211 -200
- data/spec/unit/provider/subversion_spec.rb +50 -31
- data/spec/unit/provider/template/content_spec.rb +93 -2
- data/spec/unit/provider/user/solaris_spec.rb +66 -9
- data/spec/unit/provider_resolver_spec.rb +707 -650
- data/spec/unit/provider_spec.rb +1 -3
- data/spec/unit/recipe_spec.rb +0 -4
- data/spec/unit/resource/deploy_spec.rb +7 -1
- data/spec/unit/resource/dsc_script_spec.rb +4 -0
- data/spec/unit/resource/file/verification_spec.rb +33 -5
- data/spec/unit/resource/{powershell_spec.rb → powershell_script_spec.rb} +17 -13
- data/spec/unit/resource/service_spec.rb +4 -4
- data/spec/unit/resource/subversion_spec.rb +4 -0
- data/spec/unit/resource/yum_package_spec.rb +10 -1
- data/spec/unit/resource_spec.rb +2 -2
- data/spec/unit/run_context/child_run_context_spec.rb +133 -0
- data/spec/unit/run_context_spec.rb +7 -0
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +5 -0
- data/spec/unit/win32/registry_spec.rb +394 -0
- data/tasks/external_tests.rb +47 -23
- data/tasks/maintainers.rb +155 -14
- metadata +64 -53
- data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +0 -76
- data/lib/chef/knife/bootstrap/templates/chef-aix.erb +0 -72
- data/spec/unit/provider/powershell_spec.rb +0 -80
- data/spec/unit/registry_helper_spec.rb +0 -376
- data/spec/unit/workstation_config_loader_spec.rb +0 -283
@@ -40,20 +40,30 @@ describe Chef::Knife::CookbookDelete do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
context "when the cookbook doesn't exist" do
|
43
|
-
|
44
|
-
@log_output = StringIO.new
|
45
|
-
|
46
|
-
Chef::Log.logger = Logger.new(@log_output)
|
47
|
-
Chef::Log.level = :debug
|
43
|
+
let(:log_output) { StringIO.new }
|
48
44
|
|
45
|
+
before do
|
49
46
|
@knife.name_args = %w{no-such-cookbook}
|
50
47
|
@api.get("/cookbooks/no-such-cookbook", 404, Chef::JSONCompat.to_json({'error'=>'dear Tim, no. -Sent from my iPad'}))
|
51
48
|
end
|
52
49
|
|
50
|
+
around do |ex|
|
51
|
+
old_logger = Chef::Log.logger
|
52
|
+
old_level = Chef::Log.level
|
53
|
+
begin
|
54
|
+
Chef::Log.logger = Logger.new(log_output)
|
55
|
+
Chef::Log.level = :debug
|
56
|
+
ex.run
|
57
|
+
ensure
|
58
|
+
Chef::Log.logger = old_logger
|
59
|
+
Chef::Log.level = old_level
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
53
63
|
it "logs an error and exits" do
|
54
|
-
allow(@knife.ui).to receive(:stderr).and_return(
|
64
|
+
allow(@knife.ui).to receive(:stderr).and_return(log_output)
|
55
65
|
expect {@knife.run}.to raise_error(SystemExit)
|
56
|
-
expect(
|
66
|
+
expect(log_output.string).to match(/Cannot find a cookbook named no-such-cookbook to delete/)
|
57
67
|
end
|
58
68
|
|
59
69
|
end
|
@@ -31,6 +31,22 @@ describe Chef::Knife::Ssh do
|
|
31
31
|
@server.stop
|
32
32
|
end
|
33
33
|
|
34
|
+
let(:ssh_config) { Hash.new }
|
35
|
+
before do
|
36
|
+
allow(Net::SSH).to receive(:configuration_for).and_return(ssh_config)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Force log level to info.
|
40
|
+
around do |ex|
|
41
|
+
old_level = Chef::Log.level
|
42
|
+
begin
|
43
|
+
Chef::Log.level = :info
|
44
|
+
ex.run
|
45
|
+
ensure
|
46
|
+
Chef::Log.level = old_level
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
34
50
|
describe "identity file" do
|
35
51
|
context "when knife[:ssh_identity_file] is set" do
|
36
52
|
before do
|
@@ -819,7 +819,7 @@ describe Chef::Resource::DeployRevision, :unix_only => true do
|
|
819
819
|
end
|
820
820
|
|
821
821
|
before do
|
822
|
-
expect { deploy_that_fails.run_action(:deploy) }.to raise_error(
|
822
|
+
expect { deploy_that_fails.run_action(:deploy) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
823
823
|
deploy_to_latest_with_callback_tracking.run_action(:deploy)
|
824
824
|
end
|
825
825
|
|
@@ -43,6 +43,8 @@ describe Chef::Resource::DscResource, :windows_powershell_dsc_only do
|
|
43
43
|
before do
|
44
44
|
if !Chef::Platform.supports_dsc_invoke_resource?(node)
|
45
45
|
skip 'Requires Powershell >= 5.0.10018.0'
|
46
|
+
elsif !Chef::Platform.dsc_refresh_mode_disabled?(node)
|
47
|
+
skip 'Requires LCM RefreshMode is Disabled'
|
46
48
|
end
|
47
49
|
end
|
48
50
|
context 'with an invalid dsc resource' do
|
@@ -19,6 +19,7 @@
|
|
19
19
|
require 'spec_helper'
|
20
20
|
require 'chef/mixin/shell_out'
|
21
21
|
require 'chef/mixin/windows_architecture_helper'
|
22
|
+
require 'support/shared/integration/integration_helper'
|
22
23
|
|
23
24
|
describe Chef::Resource::DscScript, :windows_powershell_dsc_only do
|
24
25
|
include Chef::Mixin::WindowsArchitectureHelper
|
@@ -67,8 +68,7 @@ describe Chef::Resource::DscScript, :windows_powershell_dsc_only do
|
|
67
68
|
node = Chef::Node.new
|
68
69
|
node.automatic['platform'] = 'windows'
|
69
70
|
node.automatic['platform_version'] = '6.1'
|
70
|
-
node.automatic['kernel'][:machine] =
|
71
|
-
is_i386_process_on_x86_64_windows? ? :x86_64 : :i386
|
71
|
+
node.automatic['kernel'][:machine] = :x86_64 # Only 64-bit architecture is supported
|
72
72
|
node.automatic[:languages][:powershell][:version] = '4.0'
|
73
73
|
empty_events = Chef::EventDispatch::Dispatcher.new
|
74
74
|
Chef::RunContext.new(node, {}, empty_events)
|
@@ -379,4 +379,93 @@ EOH
|
|
379
379
|
it_behaves_like 'a dsc_script with configuration data that takes parameters'
|
380
380
|
it_behaves_like 'a dsc_script without configuration data that takes parameters'
|
381
381
|
end
|
382
|
+
|
383
|
+
context 'when using ps_credential' do
|
384
|
+
include IntegrationSupport
|
385
|
+
|
386
|
+
before(:each) do
|
387
|
+
delete_user(dsc_user)
|
388
|
+
ohai_reader = Ohai::System.new
|
389
|
+
ohai_reader.all_plugins(["platform", "os", "languages/powershell"])
|
390
|
+
dsc_test_run_context.node.consume_external_attrs(ohai_reader.data,{})
|
391
|
+
end
|
392
|
+
|
393
|
+
let(:configuration_data_path) { 'C:\\configurationdata.psd1' }
|
394
|
+
|
395
|
+
let(:self_signed_cert_path) do
|
396
|
+
File.join(CHEF_SPEC_DATA, 'dsc_lcm.pfx')
|
397
|
+
end
|
398
|
+
|
399
|
+
let(:dsc_configuration_script) do
|
400
|
+
<<-MYCODE
|
401
|
+
cd c:\\
|
402
|
+
configuration LCM
|
403
|
+
{
|
404
|
+
param ($thumbprint)
|
405
|
+
localconfigurationmanager
|
406
|
+
{
|
407
|
+
RebootNodeIfNeeded = $false
|
408
|
+
ConfigurationMode = 'ApplyOnly'
|
409
|
+
CertificateID = $thumbprint
|
410
|
+
}
|
411
|
+
}
|
412
|
+
$cert = ls Cert:\\LocalMachine\\My\\ |
|
413
|
+
Where-Object {$_.Subject -match "ChefTest"} |
|
414
|
+
Select -first 1
|
415
|
+
|
416
|
+
if($cert -eq $null) {
|
417
|
+
$pfxpath = '#{self_signed_cert_path}'
|
418
|
+
$password = ''
|
419
|
+
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($pfxpath, $password, ([System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::PersistKeySet -bor [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeyset))
|
420
|
+
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store "My", ([System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)
|
421
|
+
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
|
422
|
+
$store.Add($cert)
|
423
|
+
$store.Close()
|
424
|
+
}
|
425
|
+
|
426
|
+
lcm -thumbprint $cert.thumbprint
|
427
|
+
set-dsclocalconfigurationmanager -path ./LCM
|
428
|
+
$ConfigurationData = @"
|
429
|
+
@{
|
430
|
+
AllNodes = @(
|
431
|
+
@{
|
432
|
+
NodeName = "localhost";
|
433
|
+
CertificateID = '$($cert.thumbprint)';
|
434
|
+
};
|
435
|
+
);
|
436
|
+
}
|
437
|
+
"@
|
438
|
+
$ConfigurationData | out-file '#{configuration_data_path}' -force
|
439
|
+
MYCODE
|
440
|
+
end
|
441
|
+
|
442
|
+
let(:powershell_script_resource) do
|
443
|
+
Chef::Resource::PowershellScript.new('configure-lcm', dsc_test_run_context).tap do |r|
|
444
|
+
r.code(dsc_configuration_script)
|
445
|
+
r.architecture(:x86_64)
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
let(:dsc_script_resource) do
|
450
|
+
dsc_test_resource_base.tap do |r|
|
451
|
+
r.code <<-EOF
|
452
|
+
User dsctestusercreate
|
453
|
+
{
|
454
|
+
UserName = '#{dsc_user}'
|
455
|
+
Password = #{r.ps_credential('jf9a8m49jrajf4#')}
|
456
|
+
Ensure = "Present"
|
457
|
+
}
|
458
|
+
EOF
|
459
|
+
r.configuration_data_script(configuration_data_path)
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
it 'allows the use of ps_credential' do
|
464
|
+
expect(user_exists?(dsc_user)).to eq(false)
|
465
|
+
powershell_script_resource.run_action(:run)
|
466
|
+
expect(File).to exist(configuration_data_path)
|
467
|
+
dsc_script_resource.run_action(:run)
|
468
|
+
expect(user_exists?(dsc_user)).to eq(true)
|
469
|
+
end
|
470
|
+
end
|
382
471
|
end
|
@@ -95,7 +95,7 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
95
95
|
|
96
96
|
def create_user(username)
|
97
97
|
user(username).run_action(:create) if ! windows_domain_user?(username)
|
98
|
-
# TODO: User
|
98
|
+
# TODO: User should exist
|
99
99
|
end
|
100
100
|
|
101
101
|
def remove_user(username)
|
@@ -135,44 +135,75 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
135
135
|
group_should_not_exist(group_name)
|
136
136
|
end
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
create_user(spec_members[0])
|
144
|
-
add_members_to_group([spec_members[0]])
|
145
|
-
end
|
138
|
+
# dscl doesn't perform any error checking and will let you add users that don't exist.
|
139
|
+
describe "when no users exist", :not_supported_on_mac_osx do
|
140
|
+
describe "when append is not set" do
|
141
|
+
# excluded_members can only be used when append is set. It is ignored otherwise.
|
142
|
+
let(:excluded_members) { [] }
|
146
143
|
|
147
|
-
|
148
|
-
|
149
|
-
|
144
|
+
it "should raise an error" do
|
145
|
+
expect { group_resource.run_action(tested_action) }.to raise_error()
|
146
|
+
end
|
150
147
|
end
|
151
148
|
|
152
|
-
|
153
|
-
|
149
|
+
describe "when append is set" do
|
150
|
+
before do
|
151
|
+
group_resource.append(true)
|
152
|
+
end
|
154
153
|
|
155
|
-
|
156
|
-
|
154
|
+
it "should raise an error" do
|
155
|
+
expect { group_resource.run_action(tested_action) }.to raise_error()
|
156
|
+
end
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
-
describe "when
|
161
|
-
before
|
162
|
-
|
160
|
+
describe "when the users exist" do
|
161
|
+
before do
|
162
|
+
(spec_members).each do |member|
|
163
|
+
create_user(member)
|
164
|
+
end
|
163
165
|
end
|
164
166
|
|
165
|
-
|
166
|
-
|
167
|
-
(
|
168
|
-
|
167
|
+
after do
|
168
|
+
(spec_members).each do |member|
|
169
|
+
remove_user(member)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe "when append is not set" do
|
174
|
+
it "should set the group to to contain given members" do
|
175
|
+
group_resource.run_action(tested_action)
|
176
|
+
|
177
|
+
included_members.each do |member|
|
178
|
+
expect(user_exist_in_group?(member)).to eq(true)
|
179
|
+
end
|
180
|
+
(spec_members - included_members).each do |member|
|
181
|
+
expect(user_exist_in_group?(member)).to eq(false)
|
169
182
|
end
|
170
183
|
end
|
171
184
|
|
172
|
-
|
173
|
-
|
174
|
-
|
185
|
+
describe "when group already contains some users" do
|
186
|
+
before do
|
187
|
+
add_members_to_group([included_members[0]])
|
188
|
+
add_members_to_group(spec_members - included_members)
|
175
189
|
end
|
190
|
+
|
191
|
+
it "should remove all existing users and only add the new users to the group" do
|
192
|
+
group_resource.run_action(tested_action)
|
193
|
+
|
194
|
+
included_members.each do |member|
|
195
|
+
expect(user_exist_in_group?(member)).to eq(true)
|
196
|
+
end
|
197
|
+
(spec_members - included_members).each do |member|
|
198
|
+
expect(user_exist_in_group?(member)).to eq(false)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
describe "when append is set" do
|
205
|
+
before(:each) do
|
206
|
+
group_resource.append(true)
|
176
207
|
end
|
177
208
|
|
178
209
|
it "should add included members to the group" do
|
@@ -186,9 +217,9 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
186
217
|
end
|
187
218
|
end
|
188
219
|
|
189
|
-
describe "when group contains some users" do
|
220
|
+
describe "when group already contains some users" do
|
190
221
|
before(:each) do
|
191
|
-
add_members_to_group([
|
222
|
+
add_members_to_group([included_members[0], excluded_members[0]])
|
192
223
|
end
|
193
224
|
|
194
225
|
it "should add the included users and remove excluded users" do
|
@@ -203,20 +234,6 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
203
234
|
end
|
204
235
|
end
|
205
236
|
end
|
206
|
-
|
207
|
-
describe "when the users doesn't exist" do
|
208
|
-
describe "when append is not set" do
|
209
|
-
it "should raise an error" do
|
210
|
-
expect { @grp_resource.run_action(tested_action) }.to raise_error
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
describe "when append is set" do
|
215
|
-
it "should raise an error" do
|
216
|
-
expect { @grp_resource.run_action(tested_action) }.to raise_error
|
217
|
-
end
|
218
|
-
end
|
219
|
-
end
|
220
237
|
end
|
221
238
|
end
|
222
239
|
|
@@ -231,6 +248,12 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
231
248
|
group_should_exist(group_name)
|
232
249
|
end
|
233
250
|
|
251
|
+
after(:each) do
|
252
|
+
group_resource.run_action(:remove)
|
253
|
+
end
|
254
|
+
|
255
|
+
# TODO: The ones below might actually return ArgumentError now - but I don't have
|
256
|
+
# a way to verify that. Change it and delete this comment if that's the case.
|
234
257
|
describe "when updating membership" do
|
235
258
|
it "raises an error for a non well-formed domain name" do
|
236
259
|
group_resource.members [invalid_domain_user_name]
|
@@ -256,7 +279,7 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
|
|
256
279
|
end
|
257
280
|
end
|
258
281
|
|
259
|
-
let(:group_name) { "
|
282
|
+
let(:group_name) { "group#{SecureRandom.random_number(9999)}" }
|
260
283
|
let(:included_members) { nil }
|
261
284
|
let(:excluded_members) { nil }
|
262
285
|
let(:group_resource) {
|
@@ -300,7 +323,7 @@ theoldmanwalkingdownthestreetalwayshadagoodsmileonhisfacetheoldmanwalking\
|
|
300
323
|
downthestreetalwayshadagoodsmileonhisfacetheoldmanwalkingdownthestreeQQQQQQ" }
|
301
324
|
|
302
325
|
it "should not create a group" do
|
303
|
-
expect { group_resource.run_action(:create) }.to raise_error
|
326
|
+
expect { group_resource.run_action(:create) }.to raise_error(ArgumentError)
|
304
327
|
group_should_not_exist(group_name)
|
305
328
|
end
|
306
329
|
end
|
@@ -16,6 +16,7 @@
|
|
16
16
|
# limitations under the License.
|
17
17
|
#
|
18
18
|
|
19
|
+
require 'chef/platform/query_helpers'
|
19
20
|
require 'spec_helper'
|
20
21
|
|
21
22
|
describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
@@ -27,7 +28,6 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
27
28
|
|
28
29
|
it_behaves_like "a Windows script running on Windows"
|
29
30
|
|
30
|
-
|
31
31
|
let(:successful_executable_script_content) { "#{ENV['SystemRoot']}\\system32\\attrib.exe $env:systemroot" }
|
32
32
|
let(:failed_executable_script_content) { "#{ENV['SystemRoot']}\\system32\\attrib.exe /badargument" }
|
33
33
|
let(:processor_architecture_script_content) { "echo $env:PROCESSOR_ARCHITECTURE" }
|
@@ -57,6 +57,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "returns the exit status 27 for a powershell script that exits with 27" do
|
60
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
61
|
+
|
60
62
|
file = Tempfile.new(['foo', '.ps1'])
|
61
63
|
begin
|
62
64
|
file.write "exit 27"
|
@@ -73,6 +75,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
73
75
|
let (:negative_exit_status) { -27 }
|
74
76
|
let (:unsigned_exit_status) { (-negative_exit_status ^ 65535) + 1 }
|
75
77
|
it "returns the exit status -27 as a signed integer or an unsigned 16-bit 2's complement value of 65509 for a powershell script that exits with -27" do
|
78
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
79
|
+
|
76
80
|
# Versions of PowerShell prior to 4.0 return a 16-bit unsigned value --
|
77
81
|
# PowerShell 4.0 and later versions return a 32-bit signed value.
|
78
82
|
file = Tempfile.new(['foo', '.ps1'])
|
@@ -96,6 +100,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
96
100
|
end
|
97
101
|
|
98
102
|
it "returns the process exit code" do
|
103
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
104
|
+
|
99
105
|
resource.code(arbitrary_nonzero_process_exit_code_content)
|
100
106
|
resource.returns(arbitrary_nonzero_process_exit_code)
|
101
107
|
resource.run_action(:run)
|
@@ -114,27 +120,37 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
114
120
|
end
|
115
121
|
|
116
122
|
it "returns 1 if the last command was a cmdlet that failed" do
|
123
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
124
|
+
|
117
125
|
resource.code(cmdlet_exit_code_not_found_content)
|
118
126
|
resource.returns(1)
|
119
127
|
resource.run_action(:run)
|
120
128
|
end
|
121
129
|
|
122
130
|
it "returns 1 if the last command was a cmdlet that failed and was preceded by a successfully executed non-cmdlet Windows binary" do
|
131
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
132
|
+
|
123
133
|
resource.code([windows_process_exit_code_success_content, cmdlet_exit_code_not_found_content].join(';'))
|
124
134
|
resource.returns(1)
|
125
135
|
expect { resource.run_action(:run) }.not_to raise_error
|
126
136
|
end
|
127
137
|
|
128
|
-
it "raises
|
138
|
+
it "raises a Mixlib::ShellOut::ShellCommandFailed error if the script is not syntactically correct" do
|
139
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
140
|
+
|
129
141
|
resource.code('if({)')
|
130
142
|
resource.returns(0)
|
131
143
|
expect { resource.run_action(:run) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
132
144
|
end
|
133
145
|
|
134
|
-
it "
|
146
|
+
it "raises an error if the script is not syntactically correct even if returns is set to 1 which is what powershell.exe returns for syntactically invalid scripts" do
|
147
|
+
# This test fails because shell_out expects the exit status to be 1, but it is actually 0
|
148
|
+
# The error is a false-positive.
|
149
|
+
skip "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
150
|
+
|
135
151
|
resource.code('if({)')
|
136
152
|
resource.returns(1)
|
137
|
-
expect { resource.run_action(:run) }.
|
153
|
+
expect { resource.run_action(:run) }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
|
138
154
|
end
|
139
155
|
|
140
156
|
# This somewhat ambiguous case, two failures of different types,
|
@@ -146,24 +162,32 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
146
162
|
# errors than 0 or 1, we return that instead, which is acceptable
|
147
163
|
# since callers can test for nonzero rather than testing for 1.
|
148
164
|
it "returns 1 if the last command was a cmdlet that failed and was preceded by an unsuccessfully executed non-cmdlet Windows binary" do
|
165
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
166
|
+
|
149
167
|
resource.code([arbitrary_nonzero_process_exit_code_content,cmdlet_exit_code_not_found_content].join(';'))
|
150
168
|
resource.returns(arbitrary_nonzero_process_exit_code)
|
151
169
|
resource.run_action(:run)
|
152
170
|
end
|
153
171
|
|
154
172
|
it "returns 0 if the last command was a non-cmdlet Windows binary that succeeded and was preceded by a failed cmdlet" do
|
173
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
174
|
+
|
155
175
|
resource.code([cmdlet_exit_code_success_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
156
176
|
resource.returns(arbitrary_nonzero_process_exit_code)
|
157
177
|
resource.run_action(:run)
|
158
178
|
end
|
159
179
|
|
160
180
|
it "returns a specific error code if the last command was a non-cmdlet Windows binary that failed and was preceded by cmdlet that succeeded" do
|
181
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
182
|
+
|
161
183
|
resource.code([cmdlet_exit_code_success_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
162
184
|
resource.returns(arbitrary_nonzero_process_exit_code)
|
163
185
|
resource.run_action(:run)
|
164
186
|
end
|
165
187
|
|
166
188
|
it "returns a specific error code if the last command was a non-cmdlet Windows binary that failed and was preceded by cmdlet that failed" do
|
189
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
190
|
+
|
167
191
|
resource.code([cmdlet_exit_code_not_found_content, arbitrary_nonzero_process_exit_code_content].join(';'))
|
168
192
|
resource.returns(arbitrary_nonzero_process_exit_code)
|
169
193
|
resource.run_action(:run)
|
@@ -182,6 +206,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
182
206
|
end
|
183
207
|
|
184
208
|
it "returns 1 for $false as the last line of the script when convert_boolean_return is true" do
|
209
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
210
|
+
|
185
211
|
resource.convert_boolean_return true
|
186
212
|
resource.code "$false"
|
187
213
|
resource.returns(1)
|
@@ -208,6 +234,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
208
234
|
end
|
209
235
|
|
210
236
|
it "returns 1 if an invalid flag is passed to the interpreter" do
|
237
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
238
|
+
|
211
239
|
resource.code(cmdlet_exit_code_success_content)
|
212
240
|
resource.flags(invalid_powershell_interpreter_flag)
|
213
241
|
resource.returns(1)
|
@@ -227,10 +255,25 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
227
255
|
expect { resource.should_skip?(:run) }.to raise_error(ArgumentError, /guard_interpreter does not support blocks/)
|
228
256
|
end
|
229
257
|
|
258
|
+
context "when dsc is supported", :windows_powershell_dsc_only do
|
259
|
+
it "can execute LCM configuration code" do
|
260
|
+
resource.code <<-EOF
|
261
|
+
configuration LCM
|
262
|
+
{
|
263
|
+
param ($thumbprint)
|
264
|
+
localconfigurationmanager
|
265
|
+
{
|
266
|
+
RebootNodeIfNeeded = $false
|
267
|
+
ConfigurationMode = 'ApplyOnly'
|
268
|
+
}
|
269
|
+
}
|
270
|
+
EOF
|
271
|
+
expect { resource.run_action(:run) }.not_to raise_error
|
272
|
+
end
|
273
|
+
end
|
230
274
|
end
|
231
275
|
|
232
|
-
context "when running on a 32-bit version of
|
233
|
-
|
276
|
+
context "when running on a 32-bit version of Ruby", :ruby32_only do
|
234
277
|
it "executes a script with a 32-bit process if process architecture :i386 is specified" do
|
235
278
|
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
236
279
|
resource.architecture(:i386)
|
@@ -240,15 +283,28 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
240
283
|
expect(source_contains_case_insensitive_content?( get_script_output, 'x86' )).to eq(true)
|
241
284
|
end
|
242
285
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
286
|
+
context "when running on a 64-bit version of Windows", :windows64_only do
|
287
|
+
it "executes a script with a 64-bit process if :x86_64 arch is specified" do
|
288
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
289
|
+
resource.architecture(:x86_64)
|
290
|
+
resource.returns(0)
|
291
|
+
resource.run_action(:run)
|
292
|
+
|
293
|
+
expect(source_contains_case_insensitive_content?( get_script_output, 'AMD64' )).to eq(true)
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
context "when running on a 32-bit version of Windows", :windows32_only do
|
298
|
+
it "raises an exception if :x86_64 process architecture is specified" do
|
299
|
+
begin
|
300
|
+
expect(resource.architecture(:x86_64)).to raise_error Chef::Exceptions::Win32ArchitectureIncorrect
|
301
|
+
rescue Chef::Exceptions::Win32ArchitectureIncorrect
|
302
|
+
end
|
247
303
|
end
|
248
304
|
end
|
249
305
|
end
|
250
306
|
|
251
|
-
context "when running on a 64-bit version of
|
307
|
+
context "when running on a 64-bit version of Ruby", :ruby64_only do
|
252
308
|
it "executes a script with a 64-bit process if :x86_64 arch is specified" do
|
253
309
|
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
254
310
|
resource.architecture(:x86_64)
|
@@ -258,7 +314,7 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
258
314
|
expect(source_contains_case_insensitive_content?( get_script_output, 'AMD64' )).to eq(true)
|
259
315
|
end
|
260
316
|
|
261
|
-
it "executes a script with a 32-bit process if :i386 arch is specified" do
|
317
|
+
it "executes a script with a 32-bit process if :i386 arch is specified", :not_supported_on_nano do
|
262
318
|
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
263
319
|
resource.architecture(:i386)
|
264
320
|
resource.returns(0)
|
@@ -266,6 +322,12 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
266
322
|
|
267
323
|
expect(source_contains_case_insensitive_content?( get_script_output, 'x86' )).to eq(true)
|
268
324
|
end
|
325
|
+
|
326
|
+
it "raises an error when executing a script with a 32-bit process on Windows Nano Server", :windows_nano_only do
|
327
|
+
resource.code(processor_architecture_script_content + " | out-file -encoding ASCII #{script_output_path}")
|
328
|
+
expect{ resource.architecture(:i386) }.to raise_error(Chef::Exceptions::Win32ArchitectureIncorrect,
|
329
|
+
"cannot execute script with requested architecture 'i386' on Windows Nano Server")
|
330
|
+
end
|
269
331
|
end
|
270
332
|
|
271
333
|
describe "when executing guards" do
|
@@ -319,6 +381,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
319
381
|
end
|
320
382
|
|
321
383
|
it "evaluates a powershell $false for a not_if block as true" do
|
384
|
+
pending "powershell.exe always exits with $true on nano" if Chef::Platform.windows_nano_server?
|
385
|
+
|
322
386
|
resource.not_if "$false"
|
323
387
|
expect(resource.should_skip?(:run)).to be_falsey
|
324
388
|
end
|
@@ -329,6 +393,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
329
393
|
end
|
330
394
|
|
331
395
|
it "evaluates a powershell $false for an only_if block as false" do
|
396
|
+
pending "powershell.exe always exits with $true on nano" if Chef::Platform.windows_nano_server?
|
397
|
+
|
332
398
|
resource.only_if "$false"
|
333
399
|
expect(resource.should_skip?(:run)).to be_truthy
|
334
400
|
end
|
@@ -349,6 +415,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
349
415
|
end
|
350
416
|
|
351
417
|
it "evaluates a non-zero powershell exit status for not_if as true" do
|
418
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
419
|
+
|
352
420
|
resource.not_if "exit 37"
|
353
421
|
expect(resource.should_skip?(:run)).to be_falsey
|
354
422
|
end
|
@@ -359,6 +427,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
359
427
|
end
|
360
428
|
|
361
429
|
it "evaluates a failed executable exit status for not_if as false" do
|
430
|
+
pending "powershell.exe always exits with success on nano" if Chef::Platform.windows_nano_server?
|
431
|
+
|
362
432
|
resource.not_if windows_process_exit_code_not_found_content
|
363
433
|
expect(resource.should_skip?(:run)).to be_falsey
|
364
434
|
end
|
@@ -369,6 +439,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
369
439
|
end
|
370
440
|
|
371
441
|
it "evaluates a failed executable exit status for only_if as false" do
|
442
|
+
pending "powershell.exe always exits with success on nano" if Chef::Platform.windows_nano_server?
|
443
|
+
|
372
444
|
resource.only_if windows_process_exit_code_not_found_content
|
373
445
|
expect(resource.should_skip?(:run)).to be_truthy
|
374
446
|
end
|
@@ -379,6 +451,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
379
451
|
end
|
380
452
|
|
381
453
|
it "evaluates a failed cmdlet exit status for not_if as true" do
|
454
|
+
pending "powershell.exe always exits with success on nano" if Chef::Platform.windows_nano_server?
|
455
|
+
|
382
456
|
resource.not_if "throw 'up'"
|
383
457
|
expect(resource.should_skip?(:run)).to be_falsey
|
384
458
|
end
|
@@ -389,6 +463,8 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
389
463
|
end
|
390
464
|
|
391
465
|
it "evaluates a failed cmdlet exit status for only_if as false" do
|
466
|
+
pending "powershell.exe always exits with success on nano" if Chef::Platform.windows_nano_server?
|
467
|
+
|
392
468
|
resource.only_if "throw 'up'"
|
393
469
|
expect(resource.should_skip?(:run)).to be_truthy
|
394
470
|
end
|
@@ -431,30 +507,36 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
431
507
|
end
|
432
508
|
|
433
509
|
it "evaluates a 64-bit resource with a 64-bit guard and interprets boolean true as nonzero status code", :windows64_only do
|
510
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
511
|
+
|
434
512
|
resource.architecture :x86_64
|
435
513
|
resource.only_if "exit [int32]($env:PROCESSOR_ARCHITECTURE -eq 'AMD64')"
|
436
514
|
expect(resource.should_skip?(:run)).to be_truthy
|
437
515
|
end
|
438
516
|
|
439
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code" do
|
517
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code", :not_supported_on_nano do
|
440
518
|
resource.architecture :i386
|
441
519
|
resource.only_if "exit [int32]($env:PROCESSOR_ARCHITECTURE -ne 'X86')"
|
442
520
|
expect(resource.should_skip?(:run)).to be_falsey
|
443
521
|
end
|
444
522
|
|
445
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code" do
|
523
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code", :not_supported_on_nano do
|
446
524
|
resource.architecture :i386
|
447
525
|
resource.only_if "exit [int32]($env:PROCESSOR_ARCHITECTURE -eq 'X86')"
|
448
526
|
expect(resource.should_skip?(:run)).to be_truthy
|
449
527
|
end
|
450
528
|
|
451
529
|
it "evaluates a simple boolean false as nonzero status code when convert_boolean_return is true for only_if" do
|
530
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
531
|
+
|
452
532
|
resource.convert_boolean_return true
|
453
533
|
resource.only_if "$false"
|
454
534
|
expect(resource.should_skip?(:run)).to be_truthy
|
455
535
|
end
|
456
536
|
|
457
537
|
it "evaluates a simple boolean false as nonzero status code when convert_boolean_return is true for not_if" do
|
538
|
+
pending "powershell.exe always exits with 0 on nano" if Chef::Platform.windows_nano_server?
|
539
|
+
|
458
540
|
resource.convert_boolean_return true
|
459
541
|
resource.not_if "$false"
|
460
542
|
expect(resource.should_skip?(:run)).to be_falsey
|
@@ -472,33 +554,40 @@ describe Chef::Resource::WindowsScript::PowershellScript, :windows_only do
|
|
472
554
|
expect(resource.should_skip?(:run)).to be_truthy
|
473
555
|
end
|
474
556
|
|
475
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code using convert_boolean_return for only_if" do
|
557
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code using convert_boolean_return for only_if", :not_supported_on_nano do
|
476
558
|
resource.convert_boolean_return true
|
477
559
|
resource.architecture :i386
|
478
560
|
resource.only_if "$env:PROCESSOR_ARCHITECTURE -eq 'X86'"
|
479
561
|
expect(resource.should_skip?(:run)).to be_falsey
|
480
562
|
end
|
481
563
|
|
482
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code using convert_boolean_return for not_if" do
|
564
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean false as zero status code using convert_boolean_return for not_if", :not_supported_on_nano do
|
483
565
|
resource.convert_boolean_return true
|
484
566
|
resource.architecture :i386
|
485
567
|
resource.not_if "$env:PROCESSOR_ARCHITECTURE -ne 'X86'"
|
486
568
|
expect(resource.should_skip?(:run)).to be_falsey
|
487
569
|
end
|
488
570
|
|
489
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code using convert_boolean_return for only_if" do
|
571
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code using convert_boolean_return for only_if", :not_supported_on_nano do
|
490
572
|
resource.convert_boolean_return true
|
491
573
|
resource.architecture :i386
|
492
574
|
resource.only_if "$env:PROCESSOR_ARCHITECTURE -ne 'X86'"
|
493
575
|
expect(resource.should_skip?(:run)).to be_truthy
|
494
576
|
end
|
495
577
|
|
496
|
-
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code using convert_boolean_return for not_if" do
|
578
|
+
it "evaluates a 32-bit resource with a 32-bit guard and interprets boolean true as nonzero status code using convert_boolean_return for not_if", :not_supported_on_nano do
|
497
579
|
resource.convert_boolean_return true
|
498
580
|
resource.architecture :i386
|
499
581
|
resource.not_if "$env:PROCESSOR_ARCHITECTURE -eq 'X86'"
|
500
582
|
expect(resource.should_skip?(:run)).to be_truthy
|
501
583
|
end
|
584
|
+
|
585
|
+
it "raises an error when a 32-bit guard is used on Windows Nano Server", :windows_nano_only do
|
586
|
+
resource.only_if "$true", :architecture => :i386
|
587
|
+
expect{resource.run_action(:run)}.to raise_error(
|
588
|
+
Chef::Exceptions::Win32ArchitectureIncorrect,
|
589
|
+
/cannot execute script with requested architecture 'i386' on Windows Nano Server/)
|
590
|
+
end
|
502
591
|
end
|
503
592
|
end
|
504
593
|
|