chef 12.16.42-universal-mingw32 → 12.17.44-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/README.md +20 -5
- data/Rakefile +17 -0
- data/VERSION +1 -1
- data/acceptance/Gemfile.lock +32 -23
- data/distro/common/markdown/man1/knife-configure.mkd +3 -2
- data/lib-backcompat/chef/chef_fs/file_system/already_exists_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/cookbook_frozen_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/file_system_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/must_delete_recursively_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/not_found_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/operation_failed_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/operation_not_allowed_error.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +1 -1
- data/lib-backcompat/chef/chef_fs/file_system/repository/file_system_root_dir.rb +1 -1
- data/lib/chef/api_client.rb +1 -1
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/exit_code.rb +3 -3
- data/lib/chef/chef_class.rb +15 -5
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +12 -1
- data/lib/chef/chef_fs/file_system/repository/nodes_dir.rb +19 -0
- data/lib/chef/client.rb +1 -0
- data/lib/chef/cookbook/metadata.rb +2 -2
- data/lib/chef/cookbook_version.rb +4 -4
- data/lib/chef/data_bag.rb +1 -1
- data/lib/chef/data_bag_item.rb +1 -1
- data/lib/chef/data_collector.rb +20 -13
- data/lib/chef/data_collector/messages.rb +0 -1
- data/lib/chef/data_collector/messages/helpers.rb +2 -2
- data/lib/chef/decorator/unchain.rb +2 -2
- data/lib/chef/deprecated.rb +190 -0
- data/lib/chef/deprecation/provider/remote_directory.rb +1 -1
- data/lib/chef/deprecation/warnings.rb +3 -4
- data/lib/chef/dsl/method_missing.rb +2 -2
- data/lib/chef/dsl/resources.rb +2 -2
- data/lib/chef/environment.rb +1 -1
- data/lib/chef/exceptions.rb +1 -1
- data/lib/chef/formatters/base.rb +11 -1
- data/lib/chef/formatters/doc.rb +13 -4
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife/client_delete.rb +12 -9
- data/lib/chef/knife/configure.rb +1 -1
- data/lib/chef/knife/core/bootstrap_context.rb +25 -1
- data/lib/chef/knife/core/subcommand_loader.rb +3 -3
- data/lib/chef/knife/core/ui.rb +1 -1
- data/lib/chef/knife/node_delete.rb +6 -6
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/deprecation.rb +4 -10
- data/lib/chef/mixin/powershell_type_coercions.rb +19 -19
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/node.rb +2 -2
- data/lib/chef/node/attribute.rb +3 -4
- data/lib/chef/node/common_api.rb +1 -1
- data/lib/chef/node/mixin/state_tracking.rb +5 -2
- data/lib/chef/node_map.rb +2 -2
- data/lib/chef/org.rb +1 -1
- data/lib/chef/platform/rebooter.rb +3 -1
- data/lib/chef/policy_builder/expand_node_object.rb +1 -1
- data/lib/chef/property.rb +5 -5
- data/lib/chef/provider.rb +4 -4
- data/lib/chef/provider/launchd.rb +1 -1
- data/lib/chef/provider/link.rb +6 -0
- data/lib/chef/provider/mount.rb +2 -0
- data/lib/chef/provider/mount/mount.rb +1 -1
- data/lib/chef/provider/ohai.rb +5 -3
- data/lib/chef/provider/package/cab.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +2 -2
- data/lib/chef/provider/package/easy_install.rb +2 -2
- data/lib/chef/provider/package/msu.rb +162 -0
- data/lib/chef/provider/package/powershell.rb +114 -0
- data/lib/chef/provider/package/yum.rb +1 -1
- data/lib/chef/provider/yum_repository.rb +6 -7
- data/lib/chef/provider_resolver.rb +2 -2
- data/lib/chef/providers.rb +2 -0
- data/lib/chef/resource.rb +3 -5
- data/lib/chef/resource/apt_update.rb +1 -1
- data/lib/chef/resource/chef_gem.rb +2 -3
- data/lib/chef/resource/file/verification.rb +1 -1
- data/lib/chef/resource/launchd.rb +48 -8
- data/lib/chef/resource/mount.rb +1 -1
- data/lib/chef/resource/msu_package.rb +47 -0
- data/lib/chef/resource/ohai.rb +5 -25
- data/lib/chef/resource/powershell_package.rb +41 -0
- data/lib/chef/resource/reboot.rb +1 -1
- data/lib/chef/resource/user.rb +2 -2
- data/lib/chef/resource_builder.rb +4 -4
- data/lib/chef/resource_resolver.rb +2 -3
- data/lib/chef/resources.rb +2 -0
- data/lib/chef/rest.rb +1 -1
- data/lib/chef/role.rb +1 -1
- data/lib/chef/run_context.rb +3 -3
- data/lib/chef/shell/ext.rb +2 -2
- data/lib/chef/user.rb +3 -3
- data/lib/chef/user_v1.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/security.rb +12 -12
- data/spec/data/sample_msu1.xml +10 -0
- data/spec/data/sample_msu2.xml +14 -0
- data/spec/data/sample_msu3.xml +16 -0
- data/spec/functional/rebooter_spec.rb +3 -3
- data/spec/functional/resource/link_spec.rb +62 -1
- data/spec/functional/resource/msu_package_spec.rb +84 -0
- data/spec/functional/resource/registry_spec.rb +3 -3
- data/spec/functional/resource/rpm_spec.rb +7 -10
- data/spec/integration/solo/solo_spec.rb +50 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/platform_helpers.rb +16 -8
- data/spec/unit/application/exit_code_spec.rb +3 -15
- data/spec/unit/data_collector_spec.rb +6 -16
- data/spec/unit/deprecated_spec.rb +59 -0
- data/spec/unit/deprecation_spec.rb +1 -8
- data/spec/unit/handler_spec.rb +2 -2
- data/spec/unit/knife/client_delete_spec.rb +16 -0
- data/spec/unit/knife/configure_spec.rb +1 -1
- data/spec/unit/knife/cookbook_metadata_spec.rb +116 -113
- data/spec/unit/knife/core/bootstrap_context_spec.rb +55 -5
- data/spec/unit/knife/node_delete_spec.rb +19 -10
- data/spec/unit/mixin/shell_out_spec.rb +0 -1
- data/spec/unit/node/immutable_collections_spec.rb +5 -0
- data/spec/unit/node/vivid_mash_spec.rb +11 -0
- data/spec/unit/node_spec.rb +2 -2
- data/spec/unit/provider/launchd_spec.rb +81 -3
- data/spec/unit/provider/mount/mount_spec.rb +1 -1
- data/spec/unit/provider/mount_spec.rb +7 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +5 -5
- data/spec/unit/provider/package/easy_install_spec.rb +6 -6
- data/spec/unit/provider/package/msu_spec.rb +283 -0
- data/spec/unit/provider/package/powershell_spec.rb +337 -0
- data/spec/unit/provider/service/macosx_spec.rb +1 -1
- data/spec/unit/provider/subversion_spec.rb +9 -0
- data/spec/unit/provider/user/linux_spec.rb +7 -1
- data/spec/unit/recipe_spec.rb +43 -11
- data/spec/unit/resource/apt_update_spec.rb +17 -25
- data/spec/unit/resource/file/verification_spec.rb +1 -1
- data/spec/unit/resource/mount_spec.rb +2 -1
- data/spec/unit/resource/msu_package_spec.rb +49 -0
- data/spec/unit/resource/ohai_spec.rb +1 -1
- data/spec/unit/resource/powershell_package_spec.rb +68 -0
- data/spec/unit/resource_reporter_spec.rb +4 -4
- data/spec/unit/run_status_spec.rb +1 -1
- data/tasks/announce.rb +58 -0
- data/tasks/changelog.rb +26 -6
- data/tasks/templates/prerelease.md.erb +35 -0
- data/tasks/templates/release.md.erb +34 -0
- metadata +21 -4
data/lib/chef/shell/ext.rb
CHANGED
@@ -211,8 +211,8 @@ module Shell
|
|
211
211
|
def version
|
212
212
|
puts "This is the chef-shell.\n" +
|
213
213
|
" Chef Version: #{::Chef::VERSION}\n" +
|
214
|
-
"
|
215
|
-
"
|
214
|
+
" https://www.chef.io/\n" +
|
215
|
+
" https://docs.chef.io/"
|
216
216
|
:ucanhaz_automation
|
217
217
|
end
|
218
218
|
alias :shell :version
|
data/lib/chef/user.rb
CHANGED
@@ -26,13 +26,13 @@ require "chef/server_api"
|
|
26
26
|
# TODO
|
27
27
|
# DEPRECATION NOTE
|
28
28
|
# This class will be replaced by Chef::UserV1 in Chef 13. It is the code to support the User object
|
29
|
-
#
|
29
|
+
# corresponding to the Open Source Chef Server 11 and only still exists to support
|
30
30
|
# users still on OSC 11.
|
31
31
|
#
|
32
32
|
# Chef::UserV1 now supports Chef Server 12 and will be moved to this namespace in Chef 13.
|
33
33
|
#
|
34
34
|
# New development should occur in Chef::UserV1.
|
35
|
-
# This file and
|
35
|
+
# This file and corresponding osc_user knife files
|
36
36
|
# should be removed once client support for Open Source Chef Server 11 expires.
|
37
37
|
class Chef
|
38
38
|
class User
|
@@ -155,7 +155,7 @@ class Chef
|
|
155
155
|
end
|
156
156
|
|
157
157
|
def self.json_create(json)
|
158
|
-
Chef.
|
158
|
+
Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::User#from_json or Chef::User#load.")
|
159
159
|
Chef::User.from_json(json)
|
160
160
|
end
|
161
161
|
|
data/lib/chef/user_v1.rb
CHANGED
@@ -277,7 +277,7 @@ class Chef
|
|
277
277
|
end
|
278
278
|
|
279
279
|
def self.json_create(json)
|
280
|
-
Chef.
|
280
|
+
Chef.deprecated(:json_auto_inflate, "Auto inflation of JSON data is deprecated. Please use Chef::UserV1#from_json or Chef::UserV1#load.")
|
281
281
|
Chef::UserV1.from_json(json)
|
282
282
|
end
|
283
283
|
|
data/lib/chef/version.rb
CHANGED
@@ -182,18 +182,18 @@ class Chef
|
|
182
182
|
MAXDWORD = 0xffffffff
|
183
183
|
|
184
184
|
# LOGON32 constants for LogonUser
|
185
|
-
LOGON32_LOGON_INTERACTIVE = 2
|
186
|
-
LOGON32_LOGON_NETWORK = 3
|
187
|
-
LOGON32_LOGON_BATCH = 4
|
188
|
-
LOGON32_LOGON_SERVICE = 5
|
189
|
-
LOGON32_LOGON_UNLOCK = 7
|
190
|
-
LOGON32_LOGON_NETWORK_CLEARTEXT = 8
|
191
|
-
LOGON32_LOGON_NEW_CREDENTIALS = 9
|
192
|
-
|
193
|
-
LOGON32_PROVIDER_DEFAULT = 0
|
194
|
-
LOGON32_PROVIDER_WINNT35 = 1
|
195
|
-
LOGON32_PROVIDER_WINNT40 = 2
|
196
|
-
LOGON32_PROVIDER_WINNT50 = 3
|
185
|
+
LOGON32_LOGON_INTERACTIVE = 2
|
186
|
+
LOGON32_LOGON_NETWORK = 3
|
187
|
+
LOGON32_LOGON_BATCH = 4
|
188
|
+
LOGON32_LOGON_SERVICE = 5
|
189
|
+
LOGON32_LOGON_UNLOCK = 7
|
190
|
+
LOGON32_LOGON_NETWORK_CLEARTEXT = 8
|
191
|
+
LOGON32_LOGON_NEW_CREDENTIALS = 9
|
192
|
+
|
193
|
+
LOGON32_PROVIDER_DEFAULT = 0
|
194
|
+
LOGON32_PROVIDER_WINNT35 = 1
|
195
|
+
LOGON32_PROVIDER_WINNT40 = 2
|
196
|
+
LOGON32_PROVIDER_WINNT50 = 3
|
197
197
|
|
198
198
|
# LSA access policy
|
199
199
|
POLICY_VIEW_LOCAL_INFORMATION = 0x00000001
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
3
|
+
<servicing>
|
4
|
+
<package action="install">
|
5
|
+
<assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
|
6
|
+
<source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
|
7
|
+
</package>
|
8
|
+
</servicing>
|
9
|
+
</unattend>
|
10
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
3
|
+
<servicing>
|
4
|
+
<package action="install">
|
5
|
+
<assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
|
6
|
+
<source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
|
7
|
+
</package>
|
8
|
+
<package action="install">
|
9
|
+
<assemblyIdentity name="Package_for_abc" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
|
10
|
+
<source location="%configsetroot%\abc.CAB" />
|
11
|
+
</package>
|
12
|
+
</servicing>
|
13
|
+
</unattend>
|
14
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<unattend xmlns="urn:schemas-microsoft-com:unattend">
|
3
|
+
<servicing>
|
4
|
+
<package action="install">
|
5
|
+
<assemblyIdentity name="Package_for_KB2859903" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
|
6
|
+
<source location="%configsetroot%\IE10-Windows6.1-KB2859903-x86.CAB" />
|
7
|
+
</package>
|
8
|
+
</servicing>
|
9
|
+
<servicing>
|
10
|
+
<package action="install">
|
11
|
+
<assemblyIdentity name="Package_for_abc" version="10.2.1.0" language="neutral" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35"/>
|
12
|
+
<source location="%configsetroot%\abc.CAB" />
|
13
|
+
</package>
|
14
|
+
</servicing>
|
15
|
+
</unattend>
|
16
|
+
|
@@ -43,7 +43,7 @@ describe Chef::Platform::Rebooter do
|
|
43
43
|
|
44
44
|
let(:expected) do
|
45
45
|
{
|
46
|
-
:windows => 'shutdown /r /t 300 /c "rebooter spec test"
|
46
|
+
:windows => "#{ENV['SYSTEMROOT']}/System32/shutdown.exe /r /t 300 /c \"rebooter spec test\"",
|
47
47
|
:linux => 'shutdown -r +5 "rebooter spec test"',
|
48
48
|
}
|
49
49
|
end
|
@@ -80,7 +80,7 @@ describe Chef::Platform::Rebooter do
|
|
80
80
|
describe "when using #reboot_if_needed!" do
|
81
81
|
include_context "test a reboot method"
|
82
82
|
|
83
|
-
it "should produce the correct string on Windows" do
|
83
|
+
it "should produce the correct string on Windows", :windows_only do
|
84
84
|
test_rebooter_method(:reboot_if_needed!, true, expected[:windows])
|
85
85
|
end
|
86
86
|
|
@@ -92,7 +92,7 @@ describe Chef::Platform::Rebooter do
|
|
92
92
|
describe "when using #reboot!" do
|
93
93
|
include_context "test a reboot method"
|
94
94
|
|
95
|
-
it "should produce the correct string on Windows" do
|
95
|
+
it "should produce the correct string on Windows", :windows_only do
|
96
96
|
test_rebooter_method(:reboot!, true, expected[:windows])
|
97
97
|
end
|
98
98
|
|
@@ -20,6 +20,7 @@ require "spec_helper"
|
|
20
20
|
|
21
21
|
if windows?
|
22
22
|
require "chef/win32/file" #probably need this in spec_helper
|
23
|
+
require "chef/win32/security"
|
23
24
|
end
|
24
25
|
|
25
26
|
describe Chef::Resource::Link do
|
@@ -62,6 +63,18 @@ describe Chef::Resource::Link do
|
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
66
|
+
def node
|
67
|
+
node = Chef::Node.new
|
68
|
+
node.consume_external_attrs(ohai.data, {})
|
69
|
+
node
|
70
|
+
end
|
71
|
+
|
72
|
+
def user(user)
|
73
|
+
usr = Chef::Resource.resource_for_node(:user, node).new(user, run_context)
|
74
|
+
usr.password("ComplexPass11!") if windows?
|
75
|
+
usr
|
76
|
+
end
|
77
|
+
|
65
78
|
def cleanup_link(path)
|
66
79
|
if windows? && File.directory?(path)
|
67
80
|
# If the link target is a directory rm_rf doesn't work all the
|
@@ -108,6 +121,42 @@ describe Chef::Resource::Link do
|
|
108
121
|
end
|
109
122
|
end
|
110
123
|
|
124
|
+
let(:test_user) { windows? ? nil : ENV["USER"] }
|
125
|
+
|
126
|
+
def expected_owner
|
127
|
+
if windows?
|
128
|
+
get_sid(test_user)
|
129
|
+
else
|
130
|
+
test_user
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def get_sid(value)
|
135
|
+
if value.kind_of?(String)
|
136
|
+
Chef::ReservedNames::Win32::Security::SID.from_account(value)
|
137
|
+
elsif value.kind_of?(Chef::ReservedNames::Win32::Security::SID)
|
138
|
+
value
|
139
|
+
else
|
140
|
+
raise "Must specify username or SID: #{value}"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def chown(file, user)
|
145
|
+
if windows?
|
146
|
+
Chef::ReservedNames::Win32::Security::SecurableObject.new(file).owner = get_sid(user)
|
147
|
+
else
|
148
|
+
File.lchown(Etc.getpwnam(user).uid, Etc.getpwnam(user).gid, file)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def owner(file)
|
153
|
+
if windows?
|
154
|
+
Chef::ReservedNames::Win32::Security::SecurableObject.new(file).security_descriptor.owner
|
155
|
+
else
|
156
|
+
Etc.getpwuid(File.lstat(file).uid).name
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
111
160
|
def create_resource
|
112
161
|
node = Chef::Node.new
|
113
162
|
events = Chef::EventDispatch::Dispatcher.new
|
@@ -184,6 +233,7 @@ describe Chef::Resource::Link do
|
|
184
233
|
it "links to the target file" do
|
185
234
|
expect(symlink?(target_file)).to be_truthy
|
186
235
|
expect(readlink(target_file)).to eq(canonicalize(to))
|
236
|
+
expect(owner(target_file)).to eq(expected_owner) unless test_user.nil?
|
187
237
|
end
|
188
238
|
it "marks the resource updated" do
|
189
239
|
expect(resource).to be_updated
|
@@ -205,6 +255,7 @@ describe Chef::Resource::Link do
|
|
205
255
|
it "leaves the file linked" do
|
206
256
|
expect(symlink?(target_file)).to be_truthy
|
207
257
|
expect(readlink(target_file)).to eq(canonicalize(to))
|
258
|
+
expect(owner(target_file)).to eq(expected_owner) unless test_user.nil?
|
208
259
|
end
|
209
260
|
it "does not mark the resource updated" do
|
210
261
|
expect(resource).not_to be_updated
|
@@ -291,13 +342,23 @@ describe Chef::Resource::Link do
|
|
291
342
|
expect(File.exists?(to)).to be_truthy
|
292
343
|
end
|
293
344
|
end
|
294
|
-
context "pointing somewhere else" do
|
345
|
+
context "pointing somewhere else", :requires_root_or_running_windows do
|
346
|
+
let(:test_user) { "test-link-user" }
|
347
|
+
before do
|
348
|
+
user(test_user).run_action(:create)
|
349
|
+
end
|
350
|
+
after do
|
351
|
+
user(test_user).run_action(:remove)
|
352
|
+
end
|
295
353
|
before(:each) do
|
354
|
+
resource.owner(test_user)
|
296
355
|
@other_target = File.join(test_file_dir, make_tmpname("other_spec"))
|
297
356
|
File.open(@other_target, "w") { |file| file.write("eek") }
|
298
357
|
symlink(@other_target, target_file)
|
358
|
+
chown(target_file, test_user)
|
299
359
|
expect(symlink?(target_file)).to be_truthy
|
300
360
|
expect(readlink(target_file)).to eq(canonicalize(@other_target))
|
361
|
+
expect(owner(target_file)).to eq(expected_owner)
|
301
362
|
end
|
302
363
|
after(:each) do
|
303
364
|
File.delete(@other_target)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>)
|
3
|
+
# Copyright:: Copyright (c) 2016 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
|
+
require "spec_helper"
|
20
|
+
require "chef/provider/package/cab"
|
21
|
+
|
22
|
+
describe Chef::Resource::MsuPackage, :win2012r2_only do
|
23
|
+
|
24
|
+
let(:package_name) { "Package_for_KB2959977" }
|
25
|
+
let(:package_source) { "https://download.microsoft.com/download/3/B/3/3B320C07-B7B1-41E5-81F4-79EBC02DF7D3/Windows8.1-KB2959977-x64.msu" }
|
26
|
+
|
27
|
+
let(:new_resource) { Chef::Resource::CabPackage.new("windows_test_pkg") }
|
28
|
+
let(:cab_provider) do
|
29
|
+
node = Chef::Node.new
|
30
|
+
events = Chef::EventDispatch::Dispatcher.new
|
31
|
+
run_context = Chef::RunContext.new(node, {}, events)
|
32
|
+
Chef::Provider::Package::Cab.new(new_resource, run_context)
|
33
|
+
end
|
34
|
+
|
35
|
+
subject do
|
36
|
+
new_resource = Chef::Resource::MsuPackage.new("test msu package", run_context)
|
37
|
+
new_resource.package_name package_name
|
38
|
+
new_resource.source package_source
|
39
|
+
new_resource
|
40
|
+
end
|
41
|
+
|
42
|
+
context "installing package" do
|
43
|
+
after { remove_package }
|
44
|
+
|
45
|
+
it "installs the package successfully" do
|
46
|
+
subject.run_action(:install)
|
47
|
+
found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] =~ /^#{package_name}~/ }
|
48
|
+
expect(found_packages.length).to be == 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "removing a package" do
|
53
|
+
it "removes an installed package" do
|
54
|
+
subject.run_action(:install)
|
55
|
+
remove_package
|
56
|
+
found_packages = cab_provider.installed_packages.select { |p| p["package_identity"] =~ /^#{package_name}~/ }
|
57
|
+
expect(found_packages.length).to be == 0
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "when an invalid msu package is given" do
|
62
|
+
def package_name
|
63
|
+
"Package_for_KB2859903"
|
64
|
+
end
|
65
|
+
|
66
|
+
def package_source
|
67
|
+
"https://download.microsoft.com/download/5/2/B/52BE95BF-22D8-4415-B644-0FDF398F6D96/IE10-Windows6.1-KB2859903-x86.msu"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "raises error while installing" do
|
71
|
+
expect { subject.run_action(:install) }.to raise_error(Chef::Exceptions::Package)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises error while removing" do
|
75
|
+
expect { subject.run_action(:remove) }.to raise_error(Chef::Exceptions::Package)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def remove_package
|
80
|
+
pkg_to_remove = Chef::Resource::MsuPackage.new(package_name, run_context)
|
81
|
+
pkg_to_remove.source = package_source
|
82
|
+
pkg_to_remove.run_action(:remove)
|
83
|
+
end
|
84
|
+
end
|
@@ -112,9 +112,9 @@ describe Chef::Resource::RegistryKey, :windows_only, :broken => true do
|
|
112
112
|
@node.name("windowsbox")
|
113
113
|
|
114
114
|
@rest_client = double("Chef::ServerAPI (mock)")
|
115
|
-
allow(@rest_client).to receive(:create_url).and_return("reports/nodes/windowsbox/runs/#{@run_id}")
|
116
|
-
allow(@rest_client).to receive(:raw_http_request).and_return({ "result" => "ok" })
|
117
|
-
allow(@rest_client).to receive(:post_rest).and_return({ "uri" => "https://example.com/reports/nodes/windowsbox/runs/#{@run_id}" })
|
115
|
+
allow(@rest_client).to receive(:create_url).and_return("reports/nodes/windowsbox/runs/#{@run_id}")
|
116
|
+
allow(@rest_client).to receive(:raw_http_request).and_return({ "result" => "ok" })
|
117
|
+
allow(@rest_client).to receive(:post_rest).and_return({ "uri" => "https://example.com/reports/nodes/windowsbox/runs/#{@run_id}" })
|
118
118
|
|
119
119
|
@resource_reporter = Chef::ResourceReporter.new(@rest_client)
|
120
120
|
@events.register(@resource_reporter)
|
@@ -21,7 +21,7 @@ require "functional/resource/base"
|
|
21
21
|
require "chef/mixin/shell_out"
|
22
22
|
|
23
23
|
# run this test only for following platforms.
|
24
|
-
exclude_test = !%w{aix
|
24
|
+
exclude_test = !%w{aix rhel fedora suse}.include?(ohai[:platform_family])
|
25
25
|
describe Chef::Resource::RpmPackage, :requires_root, :external => exclude_test do
|
26
26
|
include Chef::Mixin::ShellOut
|
27
27
|
|
@@ -32,37 +32,34 @@ describe Chef::Resource::RpmPackage, :requires_root, :external => exclude_test d
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def rpm_pkg_should_be_installed(resource)
|
35
|
-
case ohai[:platform]
|
36
35
|
# Due to dependency issues , different rpm pkgs are used in different platforms.
|
37
36
|
# dummy rpm package works in aix, without any dependency issues.
|
38
|
-
|
37
|
+
if ohai[:platform] == "aix"
|
39
38
|
expect(shell_out("rpm -qa | grep dummy").exitstatus).to eq(0)
|
40
39
|
# mytest rpm package works in centos, redhat and in suse without any dependency issues.
|
41
|
-
|
40
|
+
else
|
42
41
|
expect(shell_out("rpm -qa | grep mytest").exitstatus).to eq(0)
|
43
42
|
::File.exists?("/opt/mytest/mytest.sh") # The mytest rpm package contains the mytest.sh file
|
44
43
|
end
|
45
44
|
end
|
46
45
|
|
47
46
|
def rpm_pkg_should_not_be_installed(resource)
|
48
|
-
|
49
|
-
when "aix"
|
47
|
+
if ohai[:platform] == "aix"
|
50
48
|
expect(shell_out("rpm -qa | grep dummy").exitstatus).to eq(1)
|
51
|
-
|
49
|
+
else
|
52
50
|
expect(shell_out("rpm -qa | grep mytest").exitstatus).to eq(1)
|
53
51
|
!::File.exists?("/opt/mytest/mytest.sh")
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
55
|
before(:all) do
|
58
|
-
case ohai[:platform]
|
59
56
|
# Due to dependency issues , different rpm pkgs are used in different platforms.
|
60
|
-
|
57
|
+
if ohai[:platform] == "aix"
|
61
58
|
@pkg_name = "dummy"
|
62
59
|
@pkg_version = "1-0"
|
63
60
|
@pkg_path = "#{Dir.tmpdir}/dummy-1-0.aix6.1.noarch.rpm"
|
64
61
|
FileUtils.cp(File.join(CHEF_SPEC_ASSETS, "dummy-1-0.aix6.1.noarch.rpm") , @pkg_path)
|
65
|
-
|
62
|
+
else
|
66
63
|
@pkg_name = "mytest"
|
67
64
|
@pkg_version = "1.0-1"
|
68
65
|
@pkg_path = "#{Dir.tmpdir}/mytest-1.0-1.noarch.rpm"
|
@@ -4,6 +4,7 @@ require "chef/run_lock"
|
|
4
4
|
require "chef/config"
|
5
5
|
require "timeout"
|
6
6
|
require "fileutils"
|
7
|
+
require "chef/win32/security" if Chef::Platform.windows?
|
7
8
|
|
8
9
|
describe "chef-solo" do
|
9
10
|
include IntegrationSupport
|
@@ -17,6 +18,55 @@ describe "chef-solo" do
|
|
17
18
|
|
18
19
|
let(:chef_solo) { "ruby bin/chef-solo --legacy-mode --minimal-ohai" }
|
19
20
|
|
21
|
+
when_the_repository "creates nodes" do
|
22
|
+
let(:nodes_dir) { File.join(@repository_dir, "nodes") }
|
23
|
+
let(:node_file) { Dir[File.join(nodes_dir, "*.json")][0] }
|
24
|
+
|
25
|
+
before do
|
26
|
+
file "config/solo.rb", <<EOM
|
27
|
+
chef_repo_path "#{@repository_dir}"
|
28
|
+
EOM
|
29
|
+
result = shell_out("ruby bin/chef-solo -c \"#{path_to('config/solo.rb')}\" -l debug", :cwd => chef_dir)
|
30
|
+
result.error!
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "on unix", :unix_only do
|
34
|
+
describe "the nodes directory" do
|
35
|
+
it "has the correct permissions" do
|
36
|
+
expect(File.stat(nodes_dir).mode.to_s(8)[2..5]).to eq("700")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "the node file" do
|
41
|
+
it "has the correct permissions" do
|
42
|
+
expect(File.stat(node_file).mode.to_s(8)[2..5]).to eq("0600")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "on windows", :windows_only do
|
48
|
+
let(:read_mask) { Chef::ReservedNames::Win32::API::Security::GENERIC_READ }
|
49
|
+
let(:write_mask) { Chef::ReservedNames::Win32::API::Security::GENERIC_WRITE }
|
50
|
+
let(:execute_mask) { Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE }
|
51
|
+
|
52
|
+
describe "the nodes directory" do
|
53
|
+
it "has the correct permissions" do
|
54
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(nodes_dir, read_mask)).to be(true)
|
55
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(nodes_dir, write_mask)).to be(true)
|
56
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(nodes_dir, execute_mask)).to be(true)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "the node file" do
|
61
|
+
it "has the correct permissions" do
|
62
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(node_file, read_mask)).to be(true)
|
63
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(node_file, write_mask)).to be(true)
|
64
|
+
expect(Chef::ReservedNames::Win32::File.file_access_check(node_file, execute_mask)).to be(false)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
20
70
|
when_the_repository "has a cookbook with a basic recipe" do
|
21
71
|
before do
|
22
72
|
file "cookbooks/x/metadata.rb", cookbook_x_100_metadata_rb
|