chef 12.5.1-universal-mingw32 → 12.6.0-universal-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +6 -1
- data/README.md +6 -4
- data/Rakefile +1 -4
- data/chef-windows.gemspec +21 -0
- data/chef.gemspec +58 -0
- data/lib/chef/api_client/registration.rb +9 -4
- data/lib/chef/application.rb +3 -84
- data/lib/chef/application/apply.rb +9 -2
- data/lib/chef/application/client.rb +8 -3
- data/lib/chef/application/solo.rb +7 -1
- data/lib/chef/application/windows_service.rb +21 -6
- data/lib/chef/application/windows_service_manager.rb +2 -3
- data/lib/chef/audit/runner.rb +1 -0
- data/lib/chef/chef_class.rb +1 -11
- data/lib/chef/chef_fs/chef_fs_data_store.rb +181 -2
- data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +5 -0
- data/lib/chef/chef_fs/file_system/file_system_entry.rb +11 -7
- data/lib/chef/client.rb +28 -1
- data/lib/chef/cookbook/cookbook_collection.rb +14 -1
- data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +115 -9
- data/lib/chef/cookbook/remote_file_vendor.rb +1 -1
- data/lib/chef/cookbook_version.rb +6 -2
- data/lib/chef/data_bag.rb +1 -1
- data/lib/chef/data_bag_item.rb +1 -1
- data/lib/chef/digester.rb +5 -1
- data/lib/chef/dsl/chef_provisioning.rb +57 -0
- data/lib/chef/dsl/cheffish.rb +64 -0
- data/lib/chef/dsl/declare_resource.rb +108 -0
- data/lib/chef/dsl/platform_introspection.rb +3 -3
- data/lib/chef/dsl/recipe.rb +3 -73
- data/lib/chef/dsl/resources.rb +27 -1
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/event_dispatch/dispatcher.rb +5 -0
- data/lib/chef/event_dispatch/events_output_stream.rb +8 -0
- data/lib/chef/exceptions.rb +21 -1
- data/lib/chef/file_access_control/unix.rb +12 -12
- data/lib/chef/file_content_management/deploy/cp.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +4 -4
- data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
- data/lib/chef/formatters/base.rb +7 -0
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
- data/lib/chef/formatters/indentable_output_stream.rb +5 -0
- data/lib/chef/http.rb +19 -3
- data/lib/chef/http/decompressor.rb +2 -2
- data/lib/chef/json_compat.rb +1 -0
- data/lib/chef/knife.rb +16 -2
- data/lib/chef/knife/bootstrap.rb +55 -10
- data/lib/chef/knife/cookbook_site_install.rb +5 -1
- data/lib/chef/knife/core/bootstrap_context.rb +2 -1
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/ssh.rb +30 -16
- data/lib/chef/knife/ssl_check.rb +4 -2
- data/lib/chef/knife/ssl_fetch.rb +3 -2
- data/lib/chef/knife/status.rb +14 -1
- data/lib/chef/log.rb +14 -0
- data/lib/chef/mixin/get_source_from_package.rb +7 -2
- data/lib/chef/mixin/properties.rb +302 -0
- data/lib/chef/mixin/proxified_socket.rb +38 -0
- data/lib/chef/mixin/subclass_directive.rb +37 -0
- data/lib/chef/node.rb +13 -5
- data/lib/chef/platform/query_helpers.rb +14 -3
- data/lib/chef/platform/service_helpers.rb +20 -38
- data/lib/chef/policy_builder/expand_node_object.rb +3 -0
- data/lib/chef/policy_builder/policyfile.rb +1 -0
- data/lib/chef/property.rb +51 -12
- data/lib/chef/provider.rb +40 -35
- data/lib/chef/provider/deploy.rb +1 -1
- data/lib/chef/provider/dsc_resource.rb +54 -20
- data/lib/chef/provider/execute.rb +25 -4
- data/lib/chef/provider/group.rb +1 -1
- data/lib/chef/provider/lwrp_base.rb +1 -0
- data/lib/chef/provider/package.rb +76 -30
- data/lib/chef/provider/package/dpkg.rb +152 -69
- data/lib/chef/provider/package/openbsd.rb +6 -8
- data/lib/chef/provider/package/solaris.rb +2 -0
- data/lib/chef/provider/package/windows.rb +95 -14
- data/lib/chef/provider/package/windows/exe.rb +129 -0
- data/lib/chef/provider/package/windows/msi.rb +37 -13
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +89 -0
- data/lib/chef/provider/package/yum.rb +13 -3
- data/lib/chef/provider/powershell_script.rb +3 -0
- data/lib/chef/provider/remote_file/cache_control_data.rb +37 -4
- data/lib/chef/provider/remote_file/http.rb +1 -1
- data/lib/chef/provider/script.rb +1 -0
- data/lib/chef/provider/service.rb +13 -10
- data/lib/chef/provider/service/solaris.rb +43 -17
- data/lib/chef/provider/service/upstart.rb +3 -3
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +111 -100
- data/lib/chef/provider/user/windows.rb +5 -3
- data/lib/chef/recipe.rb +3 -5
- data/lib/chef/resource.rb +77 -320
- data/lib/chef/resource/action_class.rb +4 -0
- data/lib/chef/resource/dpkg_package.rb +4 -3
- data/lib/chef/resource/dsc_resource.rb +40 -2
- data/lib/chef/resource/execute.rb +9 -1
- data/lib/chef/resource/ksh.rb +32 -0
- data/lib/chef/resource/lwrp_base.rb +6 -10
- data/lib/chef/resource/package.rb +8 -9
- data/lib/chef/resource/registry_key.rb +1 -1
- data/lib/chef/resource/resource_notification.rb +14 -1
- data/lib/chef/resource/script.rb +1 -1
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource_builder.rb +14 -7
- data/lib/chef/resource_reporter.rb +6 -0
- data/lib/chef/resources.rb +1 -7
- data/lib/chef/rest.rb +1 -1
- data/lib/chef/run_context.rb +45 -2
- data/lib/chef/run_list/run_list_expansion.rb +47 -0
- data/lib/chef/runner.rb +25 -0
- data/lib/chef/search/query.rb +16 -2
- data/lib/chef/util/diff.rb +2 -2
- data/lib/chef/util/powershell/ps_credential.rb +2 -3
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api/file.rb +51 -1
- data/lib/chef/win32/file.rb +5 -0
- data/lib/chef/win32/file/version_info.rb +93 -0
- data/lib/chef/win32/mutex.rb +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -0
- data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -0
- data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
- data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -0
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
- data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
- data/spec/functional/application_spec.rb +1 -1
- data/spec/functional/audit/runner_spec.rb +4 -0
- data/spec/functional/knife/ssh_spec.rb +5 -5
- data/spec/functional/notifications_spec.rb +74 -4
- data/spec/functional/resource/aix_service_spec.rb +2 -2
- data/spec/functional/resource/dpkg_package_spec.rb +339 -0
- data/spec/functional/resource/ifconfig_spec.rb +3 -1
- data/spec/functional/resource/mount_spec.rb +5 -2
- data/spec/functional/resource/package_spec.rb +1 -1
- data/spec/functional/resource/user/windows_spec.rb +8 -0
- data/spec/functional/resource/windows_package_spec.rb +177 -0
- data/spec/functional/win32/version_info_spec.rb +50 -0
- data/spec/integration/client/client_spec.rb +80 -0
- data/spec/integration/knife/download_spec.rb +9 -0
- data/spec/integration/knife/upload_spec.rb +28 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +93 -23
- data/spec/integration/recipes/resource_action_spec.rb +211 -116
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +72 -0
- data/spec/integration/solo/solo_spec.rb +34 -0
- data/spec/spec_helper.rb +11 -1
- data/spec/support/platform_helpers.rb +8 -0
- data/spec/support/shared/integration/integration_helper.rb +6 -0
- data/spec/support/shared/unit/execute_resource.rb +5 -0
- data/spec/support/shared/unit/platform_introspector.rb +7 -0
- data/spec/tiny_server.rb +6 -2
- data/spec/unit/api_client/registration_spec.rb +5 -4
- data/spec/unit/application_spec.rb +1 -181
- data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -0
- data/spec/unit/cookbook/metadata_spec.rb +122 -2
- data/spec/unit/http_spec.rb +102 -0
- data/spec/unit/knife/bootstrap_spec.rb +55 -13
- data/spec/unit/knife/core/bootstrap_context_spec.rb +10 -3
- data/spec/unit/knife/ssl_check_spec.rb +7 -3
- data/spec/unit/knife/ssl_fetch_spec.rb +2 -2
- data/spec/unit/knife/status_spec.rb +13 -13
- data/spec/unit/knife_spec.rb +26 -2
- data/spec/unit/lwrp_spec.rb +1 -1
- data/spec/unit/mixin/properties_spec.rb +97 -0
- data/spec/unit/mixin/proxified_socket_spec.rb +94 -0
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -0
- data/spec/unit/node_spec.rb +9 -1
- data/spec/unit/policy_builder/policyfile_spec.rb +2 -0
- data/spec/unit/property/validation_spec.rb +14 -12
- data/spec/unit/property_spec.rb +56 -0
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/dsc_resource_spec.rb +63 -24
- data/spec/unit/provider/execute_spec.rb +95 -28
- data/spec/unit/provider/package/dpkg_spec.rb +185 -96
- data/spec/unit/provider/package/windows/exe_spec.rb +251 -0
- data/spec/unit/provider/package/windows/msi_spec.rb +94 -10
- data/spec/unit/provider/package/windows_spec.rb +227 -26
- data/spec/unit/provider/package/yum_spec.rb +6 -0
- data/spec/unit/provider/package_spec.rb +495 -366
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +62 -36
- data/spec/unit/provider/script_spec.rb +2 -2
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +110 -39
- data/spec/unit/provider/service/upstart_service_spec.rb +19 -0
- data/spec/unit/provider/user/dscl_spec.rb +14 -0
- data/spec/unit/provider/user/windows_spec.rb +2 -2
- data/spec/unit/provider/user_spec.rb +9 -0
- data/spec/unit/provider_resolver_spec.rb +6 -30
- data/spec/unit/recipe_spec.rb +46 -20
- data/spec/unit/resource/chef_gem_spec.rb +1 -1
- data/spec/unit/resource/dsc_resource_spec.rb +14 -3
- data/spec/unit/resource/ksh_spec.rb +40 -0
- data/spec/unit/resource/registry_key_spec.rb +2 -2
- data/spec/unit/resource/resource_notification_spec.rb +44 -45
- data/spec/unit/resource_reporter_spec.rb +7 -0
- data/spec/unit/resource_spec.rb +268 -253
- data/spec/unit/rest_spec.rb +2 -2
- data/spec/unit/run_list/run_list_expansion_spec.rb +18 -3
- data/spec/unit/search/query_spec.rb +19 -1
- data/spec/unit/util/powershell/ps_credential_spec.rb +8 -1
- data/spec/unit/windows_service_spec.rb +83 -38
- data/tasks/external_tests.rb +19 -9
- data/tasks/rspec.rb +1 -1
- metadata +70 -21
- data/spec/support/pedant/Gemfile +0 -3
- data/spec/support/pedant/pedant_config.rb +0 -129
- data/spec/support/pedant/run_pedant.rb +0 -63
- data/spec/support/pedant/stickywicket.pem +0 -27
- data/spec/unit/provider/package_spec.rbe +0 -0
@@ -20,12 +20,12 @@ require 'spec_helper'
|
|
20
20
|
require 'uri'
|
21
21
|
|
22
22
|
CACHE_FILE_TRUNCATED_FRIENDLY_FILE_NAME_LENGTH = 64
|
23
|
-
|
23
|
+
CACHE_FILE_CHECKSUM_HEX_LENGTH = 32
|
24
24
|
CACHE_FILE_JSON_FILE_EXTENSION_LENGTH = 5
|
25
25
|
CACHE_FILE_PATH_LIMIT =
|
26
26
|
CACHE_FILE_TRUNCATED_FRIENDLY_FILE_NAME_LENGTH +
|
27
27
|
1 +
|
28
|
-
|
28
|
+
CACHE_FILE_CHECKSUM_HEX_LENGTH +
|
29
29
|
CACHE_FILE_JSON_FILE_EXTENSION_LENGTH # {friendly}-{md5hex}.json == 102
|
30
30
|
|
31
31
|
describe Chef::Provider::RemoteFile::CacheControlData do
|
@@ -36,7 +36,8 @@ describe Chef::Provider::RemoteFile::CacheControlData do
|
|
36
36
|
Chef::Provider::RemoteFile::CacheControlData.load_and_validate(uri, current_file_checksum)
|
37
37
|
end
|
38
38
|
|
39
|
-
let(:cache_path) { "remote_file/http___www_google_com_robots_txt-
|
39
|
+
let(:cache_path) { "remote_file/http___www_google_com_robots_txt-6dc1b24315d0cff764d30344199c6f7b.json" }
|
40
|
+
let(:old_cache_path) { "remote_file/http___www_google_com_robots_txt-9839677abeeadf0691026e0cabca2339.json" }
|
40
41
|
|
41
42
|
# the checksum of the file we have on disk already
|
42
43
|
let(:current_file_checksum) { "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
|
@@ -44,7 +45,8 @@ describe Chef::Provider::RemoteFile::CacheControlData do
|
|
44
45
|
context "when loading data for an unknown URI" do
|
45
46
|
|
46
47
|
before do
|
47
|
-
expect(Chef::FileCache).to receive(:
|
48
|
+
expect(Chef::FileCache).to receive(:has_key?).with(cache_path).and_return(false)
|
49
|
+
expect(Chef::FileCache).to receive(:has_key?).with(old_cache_path).and_return(false)
|
48
50
|
end
|
49
51
|
|
50
52
|
context "and there is no current copy of the file" do
|
@@ -64,7 +66,8 @@ describe Chef::Provider::RemoteFile::CacheControlData do
|
|
64
66
|
context "and the URI contains a password" do
|
65
67
|
|
66
68
|
let(:uri) { URI.parse("http://bob:password@example.org/") }
|
67
|
-
let(:cache_path) { "remote_file/http___bob_XXXX_example_org_-
|
69
|
+
let(:cache_path) { "remote_file/http___bob_XXXX_example_org_-44be109aa176a165ef599c12d97af792.json" }
|
70
|
+
let(:old_cache_path) { "remote_file/http___bob_XXXX_example_org_-f121caacb74c05a35bcefdf578ed5fc9.json" }
|
68
71
|
|
69
72
|
it "loads the cache data from a path based on a sanitized URI" do
|
70
73
|
Chef::Provider::RemoteFile::CacheControlData.load_and_validate(uri, current_file_checksum)
|
@@ -88,51 +91,73 @@ describe Chef::Provider::RemoteFile::CacheControlData do
|
|
88
91
|
Chef::JSONCompat.to_json(cache)
|
89
92
|
end
|
90
93
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
context "and there is no on-disk copy of the file" do
|
96
|
-
let(:current_file_checksum) { nil }
|
97
|
-
|
98
|
-
it "returns empty cache control data" do
|
99
|
-
expect(cache_control_data.etag).to be_nil
|
100
|
-
expect(cache_control_data.mtime).to be_nil
|
94
|
+
context "when the cache control data uses sha256 for its name" do
|
95
|
+
before do
|
96
|
+
expect(Chef::FileCache).to receive(:has_key?).with(cache_path).and_return(true)
|
97
|
+
expect(Chef::FileCache).to receive(:load).with(cache_path).and_return(cache_json_data)
|
101
98
|
end
|
102
|
-
end
|
103
99
|
|
104
|
-
|
105
|
-
|
100
|
+
context "and there is no on-disk copy of the file" do
|
101
|
+
let(:current_file_checksum) { nil }
|
106
102
|
|
107
|
-
|
108
|
-
|
109
|
-
|
103
|
+
it "returns empty cache control data" do
|
104
|
+
expect(cache_control_data.etag).to be_nil
|
105
|
+
expect(cache_control_data.mtime).to be_nil
|
106
|
+
end
|
110
107
|
end
|
111
|
-
end
|
112
108
|
|
113
|
-
|
109
|
+
context "and the cached checksum does not match the on-disk copy" do
|
110
|
+
let(:current_file_checksum) { "e2a8938cc31754f6c067b35aab1d0d4864272e9bf8504536ef3e79ebf8432305" }
|
114
111
|
|
115
|
-
|
116
|
-
|
117
|
-
|
112
|
+
it "returns empty cache control data" do
|
113
|
+
expect(cache_control_data.etag).to be_nil
|
114
|
+
expect(cache_control_data.mtime).to be_nil
|
115
|
+
end
|
118
116
|
end
|
119
|
-
end
|
120
|
-
|
121
|
-
context "and the cached checksum data is corrupted" do
|
122
|
-
let(:cache_json_data) { '{"foo",,"bar" []}' }
|
123
117
|
|
124
|
-
|
125
|
-
|
126
|
-
|
118
|
+
context "and the cached checksum matches the on-disk copy" do
|
119
|
+
context "when the filename uses sha256" do
|
120
|
+
before do
|
121
|
+
expect(Chef::FileCache).not_to receive(:has_key?).with(old_cache_path)
|
122
|
+
end
|
123
|
+
it "populates the cache control data" do
|
124
|
+
expect(cache_control_data.etag).to eq(etag)
|
125
|
+
expect(cache_control_data.mtime).to eq(mtime)
|
126
|
+
end
|
127
|
+
end
|
127
128
|
end
|
128
129
|
|
129
|
-
context "and
|
130
|
-
let(:cache_json_data) { '' }
|
130
|
+
context "and the cached checksum data is corrupted" do
|
131
|
+
let(:cache_json_data) { '{"foo",,"bar" []}' }
|
131
132
|
|
132
133
|
it "returns empty cache control data" do
|
133
134
|
expect(cache_control_data.etag).to be_nil
|
134
135
|
expect(cache_control_data.mtime).to be_nil
|
135
136
|
end
|
137
|
+
|
138
|
+
context "and it still is valid JSON" do
|
139
|
+
let(:cache_json_data) { '' }
|
140
|
+
|
141
|
+
it "returns empty cache control data" do
|
142
|
+
expect(cache_control_data.etag).to be_nil
|
143
|
+
expect(cache_control_data.mtime).to be_nil
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context "when the filename uses md5" do
|
150
|
+
before do
|
151
|
+
expect(Chef::FileCache).to receive(:has_key?).with(cache_path).and_return(false)
|
152
|
+
expect(Chef::FileCache).to receive(:has_key?).with(old_cache_path).and_return(true)
|
153
|
+
expect(Chef::FileCache).to receive(:load).with(old_cache_path).and_return(cache_json_data)
|
154
|
+
end
|
155
|
+
|
156
|
+
it "populates the cache control data and creates the cache control data file with the correct path" do
|
157
|
+
expect(Chef::FileCache).to receive(:store).with(cache_path, cache_json_data)
|
158
|
+
expect(Chef::FileCache).to receive(:delete).with(old_cache_path)
|
159
|
+
expect(cache_control_data.etag).to eq(etag)
|
160
|
+
expect(cache_control_data.mtime).to eq(mtime)
|
136
161
|
end
|
137
162
|
end
|
138
163
|
end
|
@@ -174,7 +199,8 @@ describe Chef::Provider::RemoteFile::CacheControlData do
|
|
174
199
|
context "and the URI contains a password" do
|
175
200
|
|
176
201
|
let(:uri) { URI.parse("http://bob:password@example.org/") }
|
177
|
-
let(:cache_path) { "remote_file/http___bob_XXXX_example_org_-
|
202
|
+
let(:cache_path) { "remote_file/http___bob_XXXX_example_org_-44be109aa176a165ef599c12d97af792.json" }
|
203
|
+
let(:old_cache_path) { "remote_file/http___bob_XXXX_example_org_-f121caacb74c05a35bcefdf578ed5fc9.json" }
|
178
204
|
|
179
205
|
it "writes the data to the cache with a sanitized path name" do
|
180
206
|
json_data = cache_control_data.json_data
|
@@ -88,11 +88,11 @@ describe Chef::Provider::Script, "action_run" do
|
|
88
88
|
|
89
89
|
describe "when running the script" do
|
90
90
|
let (:default_opts) {
|
91
|
-
{timeout: 3600, returns: 0, log_level: :info, log_tag: "script[run some perl code]"
|
91
|
+
{ timeout: 3600, returns: 0, log_level: :info, log_tag: "script[run some perl code]" }
|
92
92
|
}
|
93
93
|
|
94
94
|
before do
|
95
|
-
allow(STDOUT).to receive(:tty?).and_return(
|
95
|
+
allow(STDOUT).to receive(:tty?).and_return(false)
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'should set the command to "interpreter" "tempfile"' do
|
@@ -31,66 +31,126 @@ describe Chef::Provider::Service::Solaris do
|
|
31
31
|
@provider = Chef::Provider::Service::Solaris.new(@new_resource, @run_context)
|
32
32
|
allow(Chef::Resource::Service).to receive(:new).and_return(@current_resource)
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
# enabled / started service (svcs -l chef)
|
35
|
+
enabled_svc_stdout = [
|
36
|
+
'fmri svc:/application/chef:default',
|
37
|
+
'name chef service',
|
38
|
+
'enabled true',
|
39
|
+
'state online',
|
40
|
+
'next_state none',
|
41
|
+
'state_time April 2, 2015 04:25:19 PM EDT',
|
42
|
+
'logfile /var/svc/log/application-chef:default.log',
|
43
|
+
'restarter svc:/system/svc/restarter:default',
|
44
|
+
'contract_id 1115271',
|
45
|
+
'dependency require_all/error svc:/milestone/multi-user:default (online)'
|
46
|
+
].join("\n")
|
47
|
+
|
48
|
+
# disabled / stopped service (svcs -l chef)
|
49
|
+
disabled_svc_stdout = [
|
50
|
+
'fmri svc:/application/chef:default',
|
51
|
+
'name chef service',
|
52
|
+
'enabled false',
|
53
|
+
'state disabled',
|
54
|
+
'next_state none',
|
55
|
+
'state_time April 2, 2015 04:25:19 PM EDT',
|
56
|
+
'logfile /var/svc/log/application-chef:default.log',
|
57
|
+
'restarter svc:/system/svc/restarter:default',
|
58
|
+
'contract_id 1115271',
|
59
|
+
'dependency require_all/error svc:/milestone/multi-user:default (online)'
|
60
|
+
].join("\n")
|
61
|
+
|
62
|
+
# disabled / stopped service (svcs -l chef)
|
63
|
+
maintenance_svc_stdout = [
|
64
|
+
'fmri svc:/application/chef:default',
|
65
|
+
'name chef service',
|
66
|
+
'enabled true',
|
67
|
+
'state maintenance',
|
68
|
+
'next_state none',
|
69
|
+
'state_time April 2, 2015 04:25:19 PM EDT',
|
70
|
+
'logfile /var/svc/log/application-chef:default.log',
|
71
|
+
'restarter svc:/system/svc/restarter:default',
|
72
|
+
'contract_id 1115271',
|
73
|
+
'dependency require_all/error svc:/milestone/multi-user:default (online)'
|
74
|
+
].join("\n")
|
75
|
+
|
76
|
+
# shell_out! return value for a service that is running
|
77
|
+
@enabled_svc_status = double("Status", :exitstatus => 0, :stdout => enabled_svc_stdout, :stdin => '', :stderr => '')
|
78
|
+
|
79
|
+
# shell_out! return value for a service that is disabled
|
80
|
+
@disabled_svc_status = double("Status", :exitstatus => 0, :stdout => disabled_svc_stdout, :stdin => '', :stderr => '')
|
81
|
+
|
82
|
+
# shell_out! return value for a service that is in maintenance mode
|
83
|
+
@maintenance_svc_status = double("Status", :exitstatus => 0, :stdout => maintenance_svc_stdout, :stdin => '', :stderr => '')
|
84
|
+
|
85
|
+
# shell_out! return value for a service that does not exist
|
86
|
+
@no_svc_status = double("Status", :exitstatus => 1, :stdout => '', :stdin => '', :stderr => "svcs: Pattern 'chef' doesn't match any instances\n")
|
87
|
+
|
88
|
+
# shell_out! return value for a successful execution
|
89
|
+
@success = double("clear", :exitstatus => 0, :stdout => '', :stdin => '', :stderr => '')
|
42
90
|
end
|
43
91
|
|
44
|
-
it "should raise an error if /bin/svcs
|
45
|
-
|
92
|
+
it "should raise an error if /bin/svcs and /usr/sbin/svcadm are not executable" do
|
93
|
+
allow(File).to receive(:executable?).with("/bin/svcs").and_return(false)
|
94
|
+
allow(File).to receive(:executable?).with("/usr/sbin/svcadm").and_return(false)
|
46
95
|
expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Service)
|
47
96
|
end
|
48
97
|
|
49
|
-
|
98
|
+
it "should raise an error if /bin/svcs is not executable" do
|
99
|
+
allow(File).to receive(:executable?).with("/bin/svcs").and_return(false)
|
100
|
+
allow(File).to receive(:executable?).with("/usr/sbin/svcadm").and_return(true)
|
101
|
+
expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Service)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should raise an error if /usr/sbin/svcadm is not executable" do
|
105
|
+
allow(File).to receive(:executable?).with("/bin/svcs").and_return(true)
|
106
|
+
allow(File).to receive(:executable?).with("/usr/sbin/svcadm").and_return(false)
|
107
|
+
expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Service)
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "on a host with /bin/svcs and /usr/sbin/svcadm" do
|
50
111
|
|
51
112
|
before do
|
52
|
-
allow(File).to receive(:
|
113
|
+
allow(File).to receive(:executable?).with("/bin/svcs").and_return(true)
|
114
|
+
allow(File).to receive(:executable?).with("/usr/sbin/svcadm").and_return(true)
|
53
115
|
end
|
54
116
|
|
55
117
|
describe "when discovering the current service state" do
|
56
118
|
it "should create a current resource with the name of the new resource" do
|
57
|
-
|
119
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
58
120
|
expect(Chef::Resource::Service).to receive(:new).and_return(@current_resource)
|
59
121
|
@provider.load_current_resource
|
60
122
|
end
|
61
123
|
|
62
124
|
it "should return the current resource" do
|
63
|
-
|
125
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
64
126
|
expect(@provider.load_current_resource).to eql(@current_resource)
|
65
127
|
end
|
66
128
|
|
67
129
|
it "should call '/bin/svcs -l service_name'" do
|
68
|
-
expect(@provider).to receive(:shell_out!).with("/bin/svcs -l chef", {:returns=>[0, 1]}).and_return(@
|
130
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
69
131
|
@provider.load_current_resource
|
70
132
|
end
|
71
133
|
|
72
134
|
it "should mark service as not running" do
|
73
|
-
|
135
|
+
expect(@provider).to receive(:shell_out!).and_return(@disabled_svc_status)
|
74
136
|
expect(@current_resource).to receive(:running).with(false)
|
75
137
|
@provider.load_current_resource
|
76
138
|
end
|
77
139
|
|
78
140
|
it "should mark service as running" do
|
79
|
-
@
|
80
|
-
allow(@provider).to receive(:shell_out!).and_return(@status)
|
141
|
+
expect(@provider).to receive(:shell_out!).and_return(@enabled_svc_status)
|
81
142
|
expect(@current_resource).to receive(:running).with(true)
|
82
143
|
@provider.load_current_resource
|
83
144
|
end
|
84
145
|
|
85
146
|
it "should not mark service as maintenance" do
|
86
|
-
|
147
|
+
expect(@provider).to receive(:shell_out!).and_return(@enabled_svc_status)
|
87
148
|
@provider.load_current_resource
|
88
149
|
expect(@provider.maintenance).to be_falsey
|
89
150
|
end
|
90
151
|
|
91
152
|
it "should mark service as maintenance" do
|
92
|
-
@
|
93
|
-
allow(@provider).to receive(:shell_out!).and_return(@status)
|
153
|
+
expect(@provider).to receive(:shell_out!).and_return(@maintenance_svc_status)
|
94
154
|
@provider.load_current_resource
|
95
155
|
expect(@provider.maintenance).to be_truthy
|
96
156
|
end
|
@@ -99,30 +159,41 @@ describe Chef::Provider::Service::Solaris do
|
|
99
159
|
describe "when enabling the service" do
|
100
160
|
before(:each) do
|
101
161
|
@provider.current_resource = @current_resource
|
102
|
-
@current_resource.enabled(true)
|
103
162
|
end
|
104
163
|
|
105
164
|
it "should call svcadm enable -s chef" do
|
106
|
-
expect(@provider).
|
107
|
-
expect(@provider).
|
165
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
166
|
+
expect(@provider).not_to receive(:shell_out!).with("/usr/sbin/svcadm", "clear", @current_resource.service_name)
|
167
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "enable", "-s", @current_resource.service_name).and_return(@success)
|
168
|
+
@provider.load_current_resource
|
169
|
+
|
108
170
|
expect(@provider.enable_service).to be_truthy
|
109
171
|
expect(@current_resource.enabled).to be_truthy
|
110
172
|
end
|
111
173
|
|
112
174
|
it "should call svcadm enable -s chef for start_service" do
|
113
|
-
expect(@provider).
|
114
|
-
expect(@provider).
|
175
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
176
|
+
expect(@provider).not_to receive(:shell_out!).with("/usr/sbin/svcadm", "clear", @current_resource.service_name)
|
177
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "enable", "-s", @current_resource.service_name).and_return(@success)
|
178
|
+
@provider.load_current_resource
|
115
179
|
expect(@provider.start_service).to be_truthy
|
116
180
|
expect(@current_resource.enabled).to be_truthy
|
117
181
|
end
|
118
182
|
|
119
183
|
it "should call svcadm clear chef for start_service when state maintenance" do
|
120
|
-
|
121
|
-
|
184
|
+
# we are in maint mode
|
185
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@maintenance_svc_status)
|
186
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "clear", @current_resource.service_name).and_return(@success)
|
187
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "enable", "-s", @current_resource.service_name).and_return(@success)
|
188
|
+
|
189
|
+
# load the resource, then enable it
|
122
190
|
@provider.load_current_resource
|
123
|
-
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm clear #{@current_resource.service_name}").and_return(@status)
|
124
|
-
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm enable -s #{@current_resource.service_name}").and_return(@status)
|
125
191
|
expect(@provider.enable_service).to be_truthy
|
192
|
+
|
193
|
+
# now we are enabled
|
194
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
195
|
+
@provider.load_current_resource
|
196
|
+
|
126
197
|
expect(@current_resource.enabled).to be_truthy
|
127
198
|
end
|
128
199
|
end
|
@@ -130,17 +201,20 @@ describe Chef::Provider::Service::Solaris do
|
|
130
201
|
describe "when disabling the service" do
|
131
202
|
before(:each) do
|
132
203
|
@provider.current_resource = @current_resource
|
133
|
-
@current_resource.enabled(false)
|
134
204
|
end
|
135
205
|
|
136
206
|
it "should call svcadm disable -s chef" do
|
137
|
-
expect(@provider).to receive(:shell_out!).with("/
|
207
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@disabled_svc_status)
|
208
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "disable", "-s", "chef").and_return(@success)
|
209
|
+
@provider.load_current_resource
|
138
210
|
expect(@provider.disable_service).to be_truthy
|
139
211
|
expect(@current_resource.enabled).to be_falsey
|
140
212
|
end
|
141
213
|
|
142
214
|
it "should call svcadm disable -s chef for stop_service" do
|
143
|
-
expect(@provider).to receive(:shell_out!).with("/
|
215
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@disabled_svc_status)
|
216
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "disable", "-s", "chef").and_return(@success)
|
217
|
+
@provider.load_current_resource
|
144
218
|
expect(@provider.stop_service).to be_truthy
|
145
219
|
expect(@current_resource.enabled).to be_falsey
|
146
220
|
end
|
@@ -149,12 +223,12 @@ describe Chef::Provider::Service::Solaris do
|
|
149
223
|
|
150
224
|
describe "when reloading the service" do
|
151
225
|
before(:each) do
|
152
|
-
@status = double("Process::Status", :exitstatus => 0)
|
153
226
|
@provider.current_resource = @current_resource
|
227
|
+
allow(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@enabled_svc_status)
|
154
228
|
end
|
155
229
|
|
156
230
|
it "should call svcadm refresh chef" do
|
157
|
-
expect(@provider).to receive(:
|
231
|
+
expect(@provider).to receive(:shell_out!).with("/usr/sbin/svcadm", "refresh", "chef")
|
158
232
|
@provider.reload_service
|
159
233
|
end
|
160
234
|
|
@@ -162,19 +236,16 @@ describe Chef::Provider::Service::Solaris do
|
|
162
236
|
|
163
237
|
describe "when the service doesn't exist" do
|
164
238
|
before(:each) do
|
165
|
-
@stdout_string = ""
|
166
|
-
@status = double("Status", :exitstatus => 1, :stdout => @stdout)
|
167
239
|
@provider.current_resource = @current_resource
|
240
|
+
expect(@provider).to receive(:shell_out!).with("/bin/svcs", "-l", "chef", {:returns=>[0, 1]}).and_return(@no_svc_status)
|
168
241
|
end
|
169
242
|
|
170
243
|
it "should be marked not running" do
|
171
|
-
expect(@provider).to receive(:shell_out!).with("/bin/svcs -l chef", {:returns=>[0, 1]}).and_return(@status)
|
172
244
|
@provider.service_status
|
173
245
|
expect(@current_resource.running).to be_falsey
|
174
246
|
end
|
175
247
|
|
176
248
|
it "should be marked not enabled" do
|
177
|
-
expect(@provider).to receive(:shell_out!).with("/bin/svcs -l chef", {:returns=>[0, 1]}).and_return(@status)
|
178
249
|
@provider.service_status
|
179
250
|
expect(@current_resource.enabled).to be_falsey
|
180
251
|
end
|
@@ -123,6 +123,25 @@ describe Chef::Provider::Service::Upstart do
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
+
describe "when the status command uses the new format with an instance" do
|
127
|
+
before do
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should set running to true if the status command returns 0" do
|
131
|
+
@stdout = StringIO.new("rsyslog (test) start/running, process 100")
|
132
|
+
allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
133
|
+
@provider.load_current_resource
|
134
|
+
expect(@current_resource.running).to be_truthy
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should set running to false if the status command returns anything except 0" do
|
138
|
+
@stdout = StringIO.new("rsyslog (test) stop/waiting, process 100")
|
139
|
+
allow(@provider).to receive(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_return(@status)
|
140
|
+
@provider.load_current_resource
|
141
|
+
expect(@current_resource.running).to be_falsey
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
126
145
|
describe "when the status command uses the old format" do
|
127
146
|
it "should set running to true if the status command returns 0" do
|
128
147
|
@stdout = StringIO.new("rsyslog (start) running, process 32225")
|