chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +12 -1
- data/lib/chef/api_client.rb +130 -26
- data/lib/chef/application.rb +0 -1
- data/lib/chef/application/client.rb +8 -19
- data/lib/chef/audit/audit_reporter.rb +12 -7
- data/lib/chef/audit/logger.rb +36 -0
- data/lib/chef/audit/runner.rb +4 -2
- data/lib/chef/chef_class.rb +62 -11
- data/lib/chef/client.rb +587 -207
- data/lib/chef/config.rb +0 -1
- data/lib/chef/dsl/recipe.rb +45 -56
- data/lib/chef/dsl/resources.rb +3 -2
- data/lib/chef/event_dispatch/base.rb +7 -2
- data/lib/chef/exceptions.rb +4 -1
- data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
- data/lib/chef/formatters/doc.rb +15 -7
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
- data/lib/chef/http/authenticator.rb +7 -2
- data/lib/chef/knife.rb +16 -4
- data/lib/chef/knife/client_create.rb +55 -31
- data/lib/chef/knife/core/generic_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/osc_user_create.rb +97 -0
- data/lib/chef/knife/osc_user_delete.rb +51 -0
- data/lib/chef/knife/osc_user_edit.rb +58 -0
- data/lib/chef/knife/osc_user_list.rb +47 -0
- data/lib/chef/knife/osc_user_reregister.rb +64 -0
- data/lib/chef/knife/osc_user_show.rb +54 -0
- data/lib/chef/knife/user_create.rb +95 -36
- data/lib/chef/knife/user_delete.rb +52 -2
- data/lib/chef/knife/user_edit.rb +37 -7
- data/lib/chef/knife/user_list.rb +3 -0
- data/lib/chef/knife/user_reregister.rb +39 -8
- data/lib/chef/knife/user_show.rb +30 -1
- data/lib/chef/mixin/api_version_request_handling.rb +66 -0
- data/lib/chef/mixin/convert_to_class_name.rb +10 -4
- data/lib/chef/mixin/deprecation.rb +24 -0
- data/lib/chef/mixin/powershell_out.rb +98 -0
- data/lib/chef/mixin/provides.rb +5 -18
- data/lib/chef/mixin/uris.rb +11 -0
- data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
- data/lib/chef/mixin/windows_env_helper.rb +11 -2
- data/lib/chef/node_map.rb +130 -75
- data/lib/chef/osc_user.rb +194 -0
- data/lib/chef/platform/provider_mapping.rb +2 -269
- data/lib/chef/platform/provider_priority_map.rb +6 -69
- data/lib/chef/platform/query_helpers.rb +5 -0
- data/lib/chef/platform/resource_priority_map.rb +12 -15
- data/lib/chef/policy_builder/policyfile.rb +1 -0
- data/lib/chef/provider.rb +19 -0
- data/lib/chef/provider/directory.rb +3 -0
- data/lib/chef/provider/dsc_resource.rb +8 -1
- data/lib/chef/provider/file.rb +1 -0
- data/lib/chef/provider/group/aix.rb +1 -0
- data/lib/chef/provider/group/dscl.rb +1 -1
- data/lib/chef/provider/group/gpasswd.rb +1 -0
- data/lib/chef/provider/group/groupmod.rb +1 -1
- data/lib/chef/provider/group/pw.rb +1 -0
- data/lib/chef/provider/group/suse.rb +2 -0
- data/lib/chef/provider/group/usermod.rb +2 -1
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +2 -0
- data/lib/chef/provider/ifconfig/aix.rb +1 -0
- data/lib/chef/provider/ifconfig/debian.rb +2 -0
- data/lib/chef/provider/ifconfig/redhat.rb +1 -0
- data/lib/chef/provider/lwrp_base.rb +4 -0
- data/lib/chef/provider/mount.rb +0 -1
- data/lib/chef/provider/mount/aix.rb +1 -0
- data/lib/chef/provider/mount/mount.rb +2 -0
- data/lib/chef/provider/mount/solaris.rb +2 -0
- data/lib/chef/provider/package.rb +55 -0
- data/lib/chef/provider/package/aix.rb +7 -7
- data/lib/chef/provider/package/apt.rb +3 -3
- data/lib/chef/provider/package/dpkg.rb +4 -4
- data/lib/chef/provider/package/easy_install.rb +5 -5
- data/lib/chef/provider/package/freebsd/base.rb +2 -2
- data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
- data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
- data/lib/chef/provider/package/freebsd/port.rb +4 -4
- data/lib/chef/provider/package/homebrew.rb +2 -2
- data/lib/chef/provider/package/ips.rb +4 -4
- data/lib/chef/provider/package/macports.rb +5 -6
- data/lib/chef/provider/package/openbsd.rb +4 -5
- data/lib/chef/provider/package/pacman.rb +4 -4
- data/lib/chef/provider/package/portage.rb +2 -0
- data/lib/chef/provider/package/rpm.rb +7 -8
- data/lib/chef/provider/package/rubygems.rb +5 -12
- data/lib/chef/provider/package/smartos.rb +4 -4
- data/lib/chef/provider/package/solaris.rb +7 -7
- data/lib/chef/provider/package/windows/msi.rb +1 -1
- data/lib/chef/provider/package/yum.rb +4 -6
- data/lib/chef/provider/package/zypper.rb +16 -14
- data/lib/chef/provider/powershell_script.rb +129 -47
- data/lib/chef/provider/remote_file/content.rb +4 -1
- data/lib/chef/provider/remote_file/local_file.rb +10 -4
- data/lib/chef/provider/service.rb +44 -0
- data/lib/chef/provider/service/freebsd.rb +1 -1
- data/lib/chef/provider/service/init.rb +1 -0
- data/lib/chef/provider/service/macosx.rb +1 -1
- data/lib/chef/provider/service/windows.rb +0 -1
- data/lib/chef/provider/user.rb +1 -1
- data/lib/chef/provider/user/aix.rb +3 -2
- data/lib/chef/provider/user/pw.rb +1 -0
- data/lib/chef/provider/user/solaris.rb +2 -0
- data/lib/chef/provider/user/useradd.rb +1 -0
- data/lib/chef/provider_resolver.rb +87 -134
- data/lib/chef/resource.rb +274 -68
- data/lib/chef/resource/apt_package.rb +0 -2
- data/lib/chef/resource/bash.rb +0 -2
- data/lib/chef/resource/batch.rb +1 -1
- data/lib/chef/resource/bff_package.rb +0 -7
- data/lib/chef/resource/breakpoint.rb +3 -6
- data/lib/chef/resource/chef_gem.rb +0 -3
- data/lib/chef/resource/cookbook_file.rb +1 -3
- data/lib/chef/resource/cron.rb +2 -4
- data/lib/chef/resource/csh.rb +0 -2
- data/lib/chef/resource/deploy.rb +9 -6
- data/lib/chef/resource/deploy_revision.rb +0 -14
- data/lib/chef/resource/directory.rb +2 -4
- data/lib/chef/resource/dpkg_package.rb +0 -5
- data/lib/chef/resource/dsc_resource.rb +2 -3
- data/lib/chef/resource/dsc_script.rb +2 -3
- data/lib/chef/resource/easy_install_package.rb +0 -7
- data/lib/chef/resource/env.rb +3 -3
- data/lib/chef/resource/erl_call.rb +2 -5
- data/lib/chef/resource/execute.rb +2 -4
- data/lib/chef/resource/file.rb +2 -4
- data/lib/chef/resource/freebsd_package.rb +0 -5
- data/lib/chef/resource/gem_package.rb +0 -3
- data/lib/chef/resource/git.rb +0 -3
- data/lib/chef/resource/group.rb +2 -4
- data/lib/chef/resource/homebrew_package.rb +0 -2
- data/lib/chef/resource/http_request.rb +3 -4
- data/lib/chef/resource/ifconfig.rb +3 -4
- data/lib/chef/resource/ips_package.rb +2 -2
- data/lib/chef/resource/link.rb +3 -5
- data/lib/chef/resource/log.rb +2 -4
- data/lib/chef/resource/lwrp_base.rb +10 -61
- data/lib/chef/resource/macosx_service.rb +1 -2
- data/lib/chef/resource/macports_package.rb +0 -7
- data/lib/chef/resource/mdadm.rb +2 -5
- data/lib/chef/resource/mount.rb +2 -4
- data/lib/chef/resource/ohai.rb +2 -4
- data/lib/chef/resource/openbsd_package.rb +0 -6
- data/lib/chef/resource/package.rb +9 -6
- data/lib/chef/resource/pacman_package.rb +0 -7
- data/lib/chef/resource/paludis_package.rb +2 -3
- data/lib/chef/resource/perl.rb +0 -3
- data/lib/chef/resource/portage_package.rb +0 -3
- data/lib/chef/resource/powershell_script.rb +1 -2
- data/lib/chef/resource/python.rb +0 -3
- data/lib/chef/resource/reboot.rb +1 -3
- data/lib/chef/resource/registry_key.rb +3 -5
- data/lib/chef/resource/remote_directory.rb +3 -5
- data/lib/chef/resource/remote_file.rb +4 -5
- data/lib/chef/resource/route.rb +3 -5
- data/lib/chef/resource/rpm_package.rb +0 -2
- data/lib/chef/resource/ruby.rb +0 -4
- data/lib/chef/resource/ruby_block.rb +2 -4
- data/lib/chef/resource/scm.rb +3 -5
- data/lib/chef/resource/script.rb +0 -3
- data/lib/chef/resource/service.rb +3 -5
- data/lib/chef/resource/smartos_package.rb +0 -9
- data/lib/chef/resource/solaris_package.rb +0 -10
- data/lib/chef/resource/subversion.rb +1 -3
- data/lib/chef/resource/template.rb +0 -4
- data/lib/chef/resource/timestamped_deploy.rb +0 -4
- data/lib/chef/resource/user.rb +2 -5
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
- data/lib/chef/resource/windows_package.rb +3 -3
- data/lib/chef/resource/windows_script.rb +2 -2
- data/lib/chef/resource/windows_service.rb +3 -3
- data/lib/chef/resource/yum_package.rb +0 -3
- data/lib/chef/resource/zypper_package.rb +27 -0
- data/lib/chef/resource_builder.rb +7 -0
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/resource_resolver.rb +108 -62
- data/lib/chef/resources.rb +1 -0
- data/lib/chef/rest.rb +1 -0
- data/lib/chef/server_api.rb +2 -0
- data/lib/chef/user.rb +193 -42
- data/lib/chef/util/backup.rb +9 -1
- data/lib/chef/util/path_helper.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/audit/runner_spec.rb +22 -42
- data/spec/functional/mixin/powershell_out_spec.rb +43 -0
- data/spec/functional/resource/execute_spec.rb +9 -2
- data/spec/functional/resource/file_spec.rb +25 -0
- data/spec/functional/resource/group_spec.rb +5 -0
- data/spec/functional/resource/link_spec.rb +5 -11
- data/spec/functional/resource/powershell_spec.rb +40 -5
- data/spec/functional/resource/user/useradd_spec.rb +10 -18
- data/spec/integration/recipes/lwrp_spec.rb +57 -0
- data/spec/integration/recipes/provider_choice.rb +2 -7
- data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
- data/spec/spec_helper.rb +1 -1
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
- data/spec/support/lib/chef/resource/cat.rb +0 -2
- data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
- data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
- data/spec/support/lib/chef/resource/with_state.rb +0 -9
- data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
- data/spec/support/lib/chef/resource/zen_master.rb +1 -6
- data/spec/support/shared/context/client.rb +277 -0
- data/spec/support/shared/examples/client.rb +53 -0
- data/spec/support/shared/functional/file_resource.rb +0 -4
- data/spec/support/shared/functional/securable_resource.rb +0 -24
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
- data/spec/support/shared/functional/windows_script.rb +1 -1
- data/spec/support/shared/unit/api_versioning.rb +77 -0
- data/spec/support/shared/unit/knife_shared.rb +40 -0
- data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
- data/spec/unit/api_client_spec.rb +189 -14
- data/spec/unit/application/client_spec.rb +0 -5
- data/spec/unit/audit/audit_reporter_spec.rb +58 -14
- data/spec/unit/audit/logger_spec.rb +42 -0
- data/spec/unit/audit/runner_spec.rb +2 -2
- data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
- data/spec/unit/client_spec.rb +58 -374
- data/spec/unit/cookbook_spec.rb +0 -9
- data/spec/unit/cookbook_version_spec.rb +0 -20
- data/spec/unit/deprecation_spec.rb +55 -0
- data/spec/unit/dsl/resources_spec.rb +85 -0
- data/spec/unit/exceptions_spec.rb +2 -2
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
- data/spec/unit/formatters/doc_spec.rb +46 -0
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
- data/spec/unit/http/authenticator_spec.rb +11 -2
- data/spec/unit/knife/client_create_spec.rb +122 -51
- data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
- data/spec/unit/knife/core/ui_spec.rb +14 -0
- data/spec/unit/knife/osc_user_create_spec.rb +93 -0
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
- data/spec/unit/knife/osc_user_list_spec.rb +37 -0
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
- data/spec/unit/knife/osc_user_show_spec.rb +46 -0
- data/spec/unit/knife/user_create_spec.rb +177 -51
- data/spec/unit/knife/user_delete_spec.rb +34 -8
- data/spec/unit/knife/user_edit_spec.rb +31 -12
- data/spec/unit/knife/user_list_spec.rb +7 -3
- data/spec/unit/knife/user_reregister_spec.rb +38 -17
- data/spec/unit/knife/user_show_spec.rb +35 -11
- data/spec/unit/knife_spec.rb +10 -4
- data/spec/unit/lwrp_spec.rb +228 -54
- data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
- data/spec/unit/mixin/command_spec.rb +1 -2
- data/spec/unit/mixin/powershell_out_spec.rb +70 -0
- data/spec/unit/mixin/uris_spec.rb +23 -11
- data/spec/unit/node_map_spec.rb +4 -1
- data/spec/unit/osc_user_spec.rb +276 -0
- data/spec/unit/platform_spec.rb +0 -60
- data/spec/unit/provider/deploy_spec.rb +1 -1
- data/spec/unit/provider/directory_spec.rb +199 -135
- data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
- data/spec/unit/provider/package/aix_spec.rb +16 -16
- data/spec/unit/provider/package/dpkg_spec.rb +2 -2
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
- data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
- data/spec/unit/provider/package/ips_spec.rb +22 -22
- data/spec/unit/provider/package/macports_spec.rb +10 -10
- data/spec/unit/provider/package/openbsd_spec.rb +4 -26
- data/spec/unit/provider/package/pacman_spec.rb +5 -5
- data/spec/unit/provider/package/rpm_spec.rb +14 -14
- data/spec/unit/provider/package/rubygems_spec.rb +10 -44
- data/spec/unit/provider/package/smartos_spec.rb +4 -4
- data/spec/unit/provider/package/solaris_spec.rb +11 -11
- data/spec/unit/provider/package/zypper_spec.rb +125 -90
- data/spec/unit/provider/package_spec.rb +34 -0
- data/spec/unit/provider/powershell_spec.rb +53 -11
- data/spec/unit/provider/remote_directory_spec.rb +2 -2
- data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
- data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
- data/spec/unit/provider/user_spec.rb +3 -3
- data/spec/unit/provider_resolver_spec.rb +463 -327
- data/spec/unit/recipe_spec.rb +42 -15
- data/spec/unit/resource/breakpoint_spec.rb +1 -1
- data/spec/unit/resource/erl_call_spec.rb +1 -1
- data/spec/unit/resource/file_spec.rb +1 -1
- data/spec/unit/resource/ifconfig_spec.rb +10 -6
- data/spec/unit/resource/remote_file_spec.rb +5 -0
- data/spec/unit/resource/route_spec.rb +1 -1
- data/spec/unit/resource/ruby_block_spec.rb +2 -2
- data/spec/unit/resource/template_spec.rb +1 -1
- data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
- data/spec/unit/resource/windows_service_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +99 -13
- data/spec/unit/rest_spec.rb +5 -5
- data/spec/unit/run_context_spec.rb +41 -0
- data/spec/unit/runner_spec.rb +2 -2
- data/spec/unit/user_spec.rb +406 -93
- data/tasks/maintainers.rb +69 -0
- metadata +37 -4
@@ -592,10 +592,6 @@ shared_examples_for "a configured file resource" do
|
|
592
592
|
File.open(path, "wb") { |f| f.write(wrong_content) }
|
593
593
|
end
|
594
594
|
|
595
|
-
it "updates the source file content" do
|
596
|
-
skip
|
597
|
-
end
|
598
|
-
|
599
595
|
it "marks the resource as updated" do
|
600
596
|
resource.run_action(:create)
|
601
597
|
expect(resource).to be_updated_by_last_action
|
@@ -163,9 +163,6 @@ shared_examples_for "a securable resource with existing target" do
|
|
163
163
|
let(:desired_gid) { 1337 }
|
164
164
|
let(:expected_gid) { 1337 }
|
165
165
|
|
166
|
-
skip "should set an owner (Rerun specs under root)", :requires_unprivileged_user => true
|
167
|
-
skip "should set a group (Rerun specs under root)", :requires_unprivileged_user => true
|
168
|
-
|
169
166
|
describe "when setting the owner", :requires_root do
|
170
167
|
before do
|
171
168
|
resource.owner expected_user_name
|
@@ -205,11 +202,6 @@ shared_examples_for "a securable resource with existing target" do
|
|
205
202
|
resource.run_action(:create)
|
206
203
|
end
|
207
204
|
|
208
|
-
it "should set permissions as specified" do
|
209
|
-
pending("Linux does not support lchmod")
|
210
|
-
expect{ File.lstat(path).mode & 007777 }.to eq(@mode_string.oct & 007777)
|
211
|
-
end
|
212
|
-
|
213
205
|
it "is marked as updated only if changes are made" do
|
214
206
|
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
215
207
|
end
|
@@ -222,11 +214,6 @@ shared_examples_for "a securable resource with existing target" do
|
|
222
214
|
resource.run_action(:create)
|
223
215
|
end
|
224
216
|
|
225
|
-
it "should set permissions in numeric form as a ruby-interpreted octal" do
|
226
|
-
pending('Linux does not support lchmod')
|
227
|
-
expect{ File.lstat(path).mode & 007777 }.to eq(@mode_integer & 007777)
|
228
|
-
end
|
229
|
-
|
230
217
|
it "is marked as updated only if changes are made" do
|
231
218
|
expect(resource.updated_by_last_action?).to eq(expect_updated?)
|
232
219
|
end
|
@@ -306,10 +293,6 @@ shared_examples_for "a securable resource without existing target" do
|
|
306
293
|
|
307
294
|
include_context "diff disabled"
|
308
295
|
|
309
|
-
context "on Unix", :unix_only do
|
310
|
-
skip "if we need any securable resource tests on Unix without existing target resource."
|
311
|
-
end
|
312
|
-
|
313
296
|
context "on Windows", :windows_only do
|
314
297
|
include_context "use Windows permissions"
|
315
298
|
|
@@ -366,13 +349,6 @@ shared_examples_for "a securable resource without existing target" do
|
|
366
349
|
expect { resource.group 'Lance "The Nose" Glindenberry III' }.to raise_error(Chef::Exceptions::ValidationFailed)
|
367
350
|
end
|
368
351
|
|
369
|
-
it "sets group when group is specified with a \\" do
|
370
|
-
pending("Need to find a group containing a backslash that is on most peoples' machines")
|
371
|
-
resource.group "#{ENV['COMPUTERNAME']}\\Administrators"
|
372
|
-
resource.run_action(:create)
|
373
|
-
expect{ descriptor.group }.to eq(SID.Everyone)
|
374
|
-
end
|
375
|
-
|
376
352
|
it "leaves group alone if group is not specified and resource already exists" do
|
377
353
|
arbitrary_non_default_group = SID.Everyone
|
378
354
|
expect(arbitrary_non_default_group).not_to eq(SID.default_security_object_group)
|
@@ -279,14 +279,14 @@ shared_examples_for "a securable resource with reporting" do
|
|
279
279
|
end
|
280
280
|
|
281
281
|
it "has empty values for file metadata in 'current_resource'" do
|
282
|
-
|
282
|
+
skip "windows reporting not yet fully supported"
|
283
283
|
expect(current_resource.owner).to be_nil
|
284
284
|
expect(current_resource.expanded_rights).to be_nil
|
285
285
|
end
|
286
286
|
|
287
287
|
context "and no security metadata is specified in new_resource" do
|
288
288
|
before do
|
289
|
-
|
289
|
+
skip "windows reporting not yet fully supported"
|
290
290
|
end
|
291
291
|
|
292
292
|
it "sets the metadata values on the new_resource as strings after creating" do
|
@@ -322,7 +322,7 @@ shared_examples_for "a securable resource with reporting" do
|
|
322
322
|
let(:expected_user_name) { 'domain\user' }
|
323
323
|
|
324
324
|
before do
|
325
|
-
|
325
|
+
skip "windows reporting not yet fully supported"
|
326
326
|
resource.owner(expected_user_name)
|
327
327
|
resource.run_action(:create)
|
328
328
|
end
|
@@ -336,7 +336,7 @@ shared_examples_for "a securable resource with reporting" do
|
|
336
336
|
|
337
337
|
context "when the target file exists" do
|
338
338
|
before do
|
339
|
-
|
339
|
+
skip "windows reporting not yet fully supported"
|
340
340
|
FileUtils.touch(resource.path)
|
341
341
|
resource.action(:create)
|
342
342
|
end
|
@@ -114,7 +114,7 @@ shared_context Chef::Resource::WindowsScript do
|
|
114
114
|
|
115
115
|
describe "when the run action is invoked on Windows" do
|
116
116
|
it "executes the script code" do
|
117
|
-
resource.code("
|
117
|
+
resource.code("whoami > #{script_output_path}")
|
118
118
|
resource.returns(0)
|
119
119
|
resource.run_action(:run)
|
120
120
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tyler Cloke (<tyler@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "chef/exceptions"
|
20
|
+
|
21
|
+
shared_examples_for "version handling" do
|
22
|
+
let(:response_406) { OpenStruct.new(:code => '406') }
|
23
|
+
let(:exception_406) { Net::HTTPServerException.new("406 Not Acceptable", response_406) }
|
24
|
+
|
25
|
+
before do
|
26
|
+
allow(rest_v1).to receive(http_verb).and_raise(exception_406)
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the server does not support the min or max server API version that Chef::User supports" do
|
30
|
+
before do
|
31
|
+
allow(object).to receive(:server_client_api_version_intersection).and_return([])
|
32
|
+
end
|
33
|
+
|
34
|
+
it "raises the original exception" do
|
35
|
+
expect{ object.send(method) }.to raise_error(exception_406)
|
36
|
+
end
|
37
|
+
end # when the server does not support the min or max server API version that Chef::User supports
|
38
|
+
end # version handling
|
39
|
+
|
40
|
+
shared_examples_for "user and client reregister" do
|
41
|
+
let(:response_406) { OpenStruct.new(:code => '406') }
|
42
|
+
let(:exception_406) { Net::HTTPServerException.new("406 Not Acceptable", response_406) }
|
43
|
+
let(:generic_exception) { Exception.new }
|
44
|
+
let(:min_version) { "2" }
|
45
|
+
let(:max_version) { "5" }
|
46
|
+
let(:return_hash_406) {
|
47
|
+
{
|
48
|
+
"min_version" => min_version,
|
49
|
+
"max_version" => max_version,
|
50
|
+
"request_version" => "30"
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
context "when V0 is not supported by the server" do
|
55
|
+
context "when the exception is 406 and returns x-ops-server-api-version header" do
|
56
|
+
before do
|
57
|
+
allow(rest_v0).to receive(:put).and_raise(exception_406)
|
58
|
+
allow(response_406).to receive(:[]).with('x-ops-server-api-version').and_return(Chef::JSONCompat.to_json(return_hash_406))
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises an error about only V0 being supported" do
|
62
|
+
expect(object).to receive(:reregister_only_v0_supported_error_msg).with(max_version, min_version)
|
63
|
+
expect{ object.reregister }.to raise_error(Chef::Exceptions::OnlyApiVersion0SupportedForAction)
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
context "when the exception is not versioning related" do
|
68
|
+
before do
|
69
|
+
allow(rest_v0).to receive(:put).and_raise(generic_exception)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "raises the original error" do
|
73
|
+
expect{ object.reregister }.to raise_error(generic_exception)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tyler Cloke (<tyler@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
|
20
|
+
shared_examples_for "mandatory field missing" do
|
21
|
+
context "when field is nil" do
|
22
|
+
before do
|
23
|
+
knife.name_args = name_args
|
24
|
+
end
|
25
|
+
|
26
|
+
it "exits 1" do
|
27
|
+
expect { knife.run }.to raise_error(SystemExit)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "prints the usage" do
|
31
|
+
expect(knife).to receive(:show_usage)
|
32
|
+
expect { knife.run }.to raise_error(SystemExit)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "prints a relevant error message" do
|
36
|
+
expect { knife.run }.to raise_error(SystemExit)
|
37
|
+
expect(stderr.string).to match /You must specify a #{fieldname}/
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Tyler Cloke (<tyler@chef.io>)
|
3
|
+
# Copyright:: Copyright (c) 2015 Chef Software, Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
shared_examples_for "user or client create" do
|
20
|
+
|
21
|
+
context "when server API V1 is valid on the Chef Server receiving the request" do
|
22
|
+
|
23
|
+
it "creates a new object via the API" do
|
24
|
+
expect(rest_v1).to receive(:post).with(url, payload).and_return({})
|
25
|
+
object.create
|
26
|
+
end
|
27
|
+
|
28
|
+
it "creates a new object via the API with a public_key when it exists" do
|
29
|
+
object.public_key "some_public_key"
|
30
|
+
expect(rest_v1).to receive(:post).with(url, payload.merge({:public_key => "some_public_key"})).and_return({})
|
31
|
+
object.create
|
32
|
+
end
|
33
|
+
|
34
|
+
context "raise error when create_key and public_key are both set" do
|
35
|
+
|
36
|
+
before do
|
37
|
+
object.public_key "key"
|
38
|
+
object.create_key true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "rasies the proper error" do
|
42
|
+
expect { object.create }.to raise_error(error)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when create_key == true" do
|
47
|
+
before do
|
48
|
+
object.create_key true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "creates a new object via the API with create_key" do
|
52
|
+
expect(rest_v1).to receive(:post).with(url, payload.merge({:create_key => true})).and_return({})
|
53
|
+
object.create
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when chef_key is returned by the server" do
|
58
|
+
let(:chef_key) {
|
59
|
+
{
|
60
|
+
"chef_key" => {
|
61
|
+
"public_key" => "some_public_key"
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
it "puts the public key into the objectr returned by create" do
|
67
|
+
expect(rest_v1).to receive(:post).with(url, payload).and_return(payload.merge(chef_key))
|
68
|
+
new_object = object.create
|
69
|
+
expect(new_object.public_key).to eq("some_public_key")
|
70
|
+
end
|
71
|
+
|
72
|
+
context "when private_key is returned in chef_key" do
|
73
|
+
let(:chef_key) {
|
74
|
+
{
|
75
|
+
"chef_key" => {
|
76
|
+
"public_key" => "some_public_key",
|
77
|
+
"private_key" => "some_private_key"
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
it "puts the private key into the object returned by create" do
|
83
|
+
expect(rest_v1).to receive(:post).with(url, payload).and_return(payload.merge(chef_key))
|
84
|
+
new_object = object.create
|
85
|
+
expect(new_object.private_key).to eq("some_private_key")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end # when chef_key is returned by the server
|
89
|
+
|
90
|
+
end # when server API V1 is valid on the Chef Server receiving the request
|
91
|
+
|
92
|
+
context "when server API V1 is not valid on the Chef Server receiving the request" do
|
93
|
+
|
94
|
+
context "when the server supports API V0" do
|
95
|
+
before do
|
96
|
+
allow(object).to receive(:server_client_api_version_intersection).and_return([0])
|
97
|
+
allow(rest_v1).to receive(:post).and_raise(exception_406)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "creates a new object via the API" do
|
101
|
+
expect(rest_v0).to receive(:post).with(url, payload).and_return({})
|
102
|
+
object.create
|
103
|
+
end
|
104
|
+
|
105
|
+
it "creates a new object via the API with a public_key when it exists" do
|
106
|
+
object.public_key "some_public_key"
|
107
|
+
expect(rest_v0).to receive(:post).with(url, payload.merge({:public_key => "some_public_key"})).and_return({})
|
108
|
+
object.create
|
109
|
+
end
|
110
|
+
|
111
|
+
end # when the server supports API V0
|
112
|
+
end # when server API V1 is not valid on the Chef Server receiving the request
|
113
|
+
|
114
|
+
end # user or client create
|
115
|
+
|
@@ -53,6 +53,20 @@ describe Chef::ApiClient do
|
|
53
53
|
expect { @client.admin(Hash.new) }.to raise_error(ArgumentError)
|
54
54
|
end
|
55
55
|
|
56
|
+
it "has an create_key flag attribute" do
|
57
|
+
@client.create_key(true)
|
58
|
+
expect(@client.create_key).to be_truthy
|
59
|
+
end
|
60
|
+
|
61
|
+
it "create_key defaults to false" do
|
62
|
+
expect(@client.create_key).to be_falsey
|
63
|
+
end
|
64
|
+
|
65
|
+
it "allows only boolean values for the create_key flag" do
|
66
|
+
expect { @client.create_key(false) }.not_to raise_error
|
67
|
+
expect { @client.create_key(Hash.new) }.to raise_error(ArgumentError)
|
68
|
+
end
|
69
|
+
|
56
70
|
it "has a 'validator' flag attribute" do
|
57
71
|
@client.validator(true)
|
58
72
|
expect(@client.validator).to be_truthy
|
@@ -115,6 +129,12 @@ describe Chef::ApiClient do
|
|
115
129
|
expect(@json).to include(%q{"validator":false})
|
116
130
|
end
|
117
131
|
|
132
|
+
it "includes the 'create_key' flag when present" do
|
133
|
+
@client.create_key(true)
|
134
|
+
@json = @client.to_json
|
135
|
+
expect(@json).to include(%q{"create_key":true})
|
136
|
+
end
|
137
|
+
|
118
138
|
it "includes the private key when present" do
|
119
139
|
@client.private_key("monkeypants")
|
120
140
|
expect(@client.to_json).to include(%q{"private_key":"monkeypants"})
|
@@ -131,7 +151,7 @@ describe Chef::ApiClient do
|
|
131
151
|
|
132
152
|
describe "when deserializing from JSON (string) using ApiClient#from_json" do
|
133
153
|
let(:client_string) do
|
134
|
-
"{\"name\":\"black\",\"public_key\":\"crowes\",\"private_key\":\"monkeypants\",\"admin\":true,\"validator\":true}"
|
154
|
+
"{\"name\":\"black\",\"public_key\":\"crowes\",\"private_key\":\"monkeypants\",\"admin\":true,\"validator\":true,\"create_key\":true}"
|
135
155
|
end
|
136
156
|
|
137
157
|
let(:client) do
|
@@ -158,6 +178,10 @@ describe Chef::ApiClient do
|
|
158
178
|
expect(client.admin).to be_truthy
|
159
179
|
end
|
160
180
|
|
181
|
+
it "preserves the create_key status" do
|
182
|
+
expect(client.create_key).to be_truthy
|
183
|
+
end
|
184
|
+
|
161
185
|
it "preserves the 'validator' status" do
|
162
186
|
expect(client.validator).to be_truthy
|
163
187
|
end
|
@@ -175,6 +199,7 @@ describe Chef::ApiClient do
|
|
175
199
|
"private_key" => "monkeypants",
|
176
200
|
"admin" => true,
|
177
201
|
"validator" => true,
|
202
|
+
"create_key" => true,
|
178
203
|
"json_class" => "Chef::ApiClient"
|
179
204
|
}
|
180
205
|
end
|
@@ -199,6 +224,10 @@ describe Chef::ApiClient do
|
|
199
224
|
expect(client.admin).to be_truthy
|
200
225
|
end
|
201
226
|
|
227
|
+
it "preserves the create_key status" do
|
228
|
+
expect(client.create_key).to be_truthy
|
229
|
+
end
|
230
|
+
|
202
231
|
it "preserves the 'validator' status" do
|
203
232
|
expect(client.validator).to be_truthy
|
204
233
|
end
|
@@ -214,14 +243,16 @@ describe Chef::ApiClient do
|
|
214
243
|
|
215
244
|
before(:each) do
|
216
245
|
client = {
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
246
|
+
"name" => "black",
|
247
|
+
"clientname" => "black",
|
248
|
+
"public_key" => "crowes",
|
249
|
+
"private_key" => "monkeypants",
|
250
|
+
"admin" => true,
|
251
|
+
"create_key" => true,
|
252
|
+
"validator" => true,
|
253
|
+
"json_class" => "Chef::ApiClient"
|
224
254
|
}
|
255
|
+
|
225
256
|
@http_client = double("Chef::REST mock")
|
226
257
|
allow(Chef::REST).to receive(:new).and_return(@http_client)
|
227
258
|
expect(@http_client).to receive(:get).with("clients/black").and_return(client)
|
@@ -244,6 +275,10 @@ describe Chef::ApiClient do
|
|
244
275
|
expect(@client.admin).to be_a_kind_of(TrueClass)
|
245
276
|
end
|
246
277
|
|
278
|
+
it "preserves the create_key status" do
|
279
|
+
expect(@client.create_key).to be_a_kind_of(TrueClass)
|
280
|
+
end
|
281
|
+
|
247
282
|
it "preserves the 'validator' status" do
|
248
283
|
expect(@client.validator).to be_a_kind_of(TrueClass)
|
249
284
|
end
|
@@ -297,24 +332,34 @@ describe Chef::ApiClient do
|
|
297
332
|
end
|
298
333
|
|
299
334
|
context "and the client exists" do
|
335
|
+
let(:chef_rest_v0_mock) { double('chef rest root v0 object') }
|
336
|
+
let(:payload) {
|
337
|
+
{:name => "lost-my-key", :admin => false, :validator => false, :private_key => true}
|
338
|
+
}
|
339
|
+
|
300
340
|
before do
|
301
341
|
@api_client_without_key = Chef::ApiClient.new
|
302
342
|
@api_client_without_key.name("lost-my-key")
|
303
|
-
|
304
|
-
|
343
|
+
allow(@api_client_without_key).to receive(:chef_rest_v0).and_return(chef_rest_v0_mock)
|
344
|
+
#allow(@api_client_with_key).to receive(:http_api).and_return(_api_mock)
|
305
345
|
|
346
|
+
allow(chef_rest_v0_mock).to receive(:put).with("clients/lost-my-key", payload).and_return(@api_client_with_key)
|
347
|
+
allow(chef_rest_v0_mock).to receive(:get).with("clients/lost-my-key").and_return(@api_client_without_key)
|
348
|
+
allow(@http_client).to receive(:get).with("clients/lost-my-key").and_return(@api_client_without_key)
|
349
|
+
end
|
306
350
|
|
307
351
|
context "and the client exists on a Chef 11-like server" do
|
308
352
|
before do
|
309
353
|
@api_client_with_key = Chef::ApiClient.new
|
310
354
|
@api_client_with_key.name("lost-my-key")
|
311
355
|
@api_client_with_key.private_key("the new private key")
|
312
|
-
|
313
|
-
with("clients/lost-my-key", :name => "lost-my-key", :admin => false, :validator => false, :private_key => true).
|
314
|
-
and_return(@api_client_with_key)
|
356
|
+
allow(@api_client_with_key).to receive(:chef_rest_v0).and_return(chef_rest_v0_mock)
|
315
357
|
end
|
316
358
|
|
317
359
|
it "returns an ApiClient with a private key" do
|
360
|
+
expect(chef_rest_v0_mock).to receive(:put).with("clients/lost-my-key", payload).
|
361
|
+
and_return(@api_client_with_key)
|
362
|
+
|
318
363
|
response = Chef::ApiClient.reregister("lost-my-key")
|
319
364
|
# no sane == method for ApiClient :'(
|
320
365
|
expect(response).to eq(@api_client_without_key)
|
@@ -327,7 +372,7 @@ describe Chef::ApiClient do
|
|
327
372
|
context "and the client exists on a Chef 10-like server" do
|
328
373
|
before do
|
329
374
|
@api_client_with_key = {"name" => "lost-my-key", "private_key" => "the new private key"}
|
330
|
-
expect(
|
375
|
+
expect(chef_rest_v0_mock).to receive(:put).
|
331
376
|
with("clients/lost-my-key", :name => "lost-my-key", :admin => false, :validator => false, :private_key => true).
|
332
377
|
and_return(@api_client_with_key)
|
333
378
|
end
|
@@ -345,4 +390,134 @@ describe Chef::ApiClient do
|
|
345
390
|
|
346
391
|
end
|
347
392
|
end
|
393
|
+
|
394
|
+
describe "Versioned API Interactions" do
|
395
|
+
let(:response_406) { OpenStruct.new(:code => '406') }
|
396
|
+
let(:exception_406) { Net::HTTPServerException.new("406 Not Acceptable", response_406) }
|
397
|
+
let(:payload) {
|
398
|
+
{
|
399
|
+
:name => "some_name",
|
400
|
+
:validator => true,
|
401
|
+
:admin => true
|
402
|
+
}
|
403
|
+
}
|
404
|
+
|
405
|
+
before do
|
406
|
+
@client = Chef::ApiClient.new
|
407
|
+
allow(@client).to receive(:chef_rest_v0).and_return(double('chef rest root v0 object'))
|
408
|
+
allow(@client).to receive(:chef_rest_v1).and_return(double('chef rest root v1 object'))
|
409
|
+
@client.name "some_name"
|
410
|
+
@client.validator true
|
411
|
+
@client.admin true
|
412
|
+
end
|
413
|
+
|
414
|
+
describe "create" do
|
415
|
+
|
416
|
+
# from spec/support/shared/unit/user_and_client_shared.rb
|
417
|
+
it_should_behave_like "user or client create" do
|
418
|
+
let(:object) { @client }
|
419
|
+
let(:error) { Chef::Exceptions::InvalidClientAttribute }
|
420
|
+
let(:rest_v0) { @client.chef_rest_v0 }
|
421
|
+
let(:rest_v1) { @client.chef_rest_v1 }
|
422
|
+
let(:url) { "clients" }
|
423
|
+
end
|
424
|
+
|
425
|
+
context "when API V1 is not supported by the server" do
|
426
|
+
# from spec/support/shared/unit/api_versioning.rb
|
427
|
+
it_should_behave_like "version handling" do
|
428
|
+
let(:object) { @client }
|
429
|
+
let(:method) { :create }
|
430
|
+
let(:http_verb) { :post }
|
431
|
+
let(:rest_v1) { @client.chef_rest_v1 }
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
end # create
|
436
|
+
|
437
|
+
describe "update" do
|
438
|
+
context "when a valid client is defined" do
|
439
|
+
|
440
|
+
shared_examples_for "client updating" do
|
441
|
+
it "updates the client" do
|
442
|
+
expect(rest). to receive(:put).with("clients/some_name", payload)
|
443
|
+
@client.update
|
444
|
+
end
|
445
|
+
|
446
|
+
context "when only the name field exists" do
|
447
|
+
|
448
|
+
before do
|
449
|
+
# needed since there is no way to set to nil via code
|
450
|
+
@client.instance_variable_set(:@validator, nil)
|
451
|
+
@client.instance_variable_set(:@admin, nil)
|
452
|
+
end
|
453
|
+
|
454
|
+
after do
|
455
|
+
@client.validator true
|
456
|
+
@client.admin true
|
457
|
+
end
|
458
|
+
|
459
|
+
it "updates the client with only the name" do
|
460
|
+
expect(rest). to receive(:put).with("clients/some_name", {:name => "some_name"})
|
461
|
+
@client.update
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
465
|
+
end
|
466
|
+
|
467
|
+
context "when API V1 is supported by the server" do
|
468
|
+
|
469
|
+
it_should_behave_like "client updating" do
|
470
|
+
let(:rest) { @client.chef_rest_v1 }
|
471
|
+
end
|
472
|
+
|
473
|
+
end # when API V1 is supported by the server
|
474
|
+
|
475
|
+
context "when API V1 is not supported by the server" do
|
476
|
+
context "when no version is supported" do
|
477
|
+
# from spec/support/shared/unit/api_versioning.rb
|
478
|
+
it_should_behave_like "version handling" do
|
479
|
+
let(:object) { @client }
|
480
|
+
let(:method) { :create }
|
481
|
+
let(:http_verb) { :post }
|
482
|
+
let(:rest_v1) { @client.chef_rest_v1 }
|
483
|
+
end
|
484
|
+
end # when no version is supported
|
485
|
+
|
486
|
+
context "when API V0 is supported" do
|
487
|
+
|
488
|
+
before do
|
489
|
+
allow(@client.chef_rest_v1).to receive(:put).and_raise(exception_406)
|
490
|
+
allow(@client).to receive(:server_client_api_version_intersection).and_return([0])
|
491
|
+
end
|
492
|
+
|
493
|
+
it_should_behave_like "client updating" do
|
494
|
+
let(:rest) { @client.chef_rest_v0 }
|
495
|
+
end
|
496
|
+
|
497
|
+
end
|
498
|
+
|
499
|
+
end # when API V1 is not supported by the server
|
500
|
+
end # when a valid client is defined
|
501
|
+
end # update
|
502
|
+
|
503
|
+
# DEPRECATION
|
504
|
+
# This can be removed after API V0 support is gone
|
505
|
+
describe "reregister" do
|
506
|
+
context "when server API V0 is valid on the Chef Server receiving the request" do
|
507
|
+
it "creates a new object via the API" do
|
508
|
+
expect(@client.chef_rest_v0).to receive(:put).with("clients/#{@client.name}", payload.merge({:private_key => true})).and_return({})
|
509
|
+
@client.reregister
|
510
|
+
end
|
511
|
+
end # when server API V0 is valid on the Chef Server receiving the request
|
512
|
+
|
513
|
+
context "when server API V0 is not supported by the Chef Server" do
|
514
|
+
# from spec/support/shared/unit/api_versioning.rb
|
515
|
+
it_should_behave_like "user and client reregister" do
|
516
|
+
let(:object) { @client }
|
517
|
+
let(:rest_v0) { @client.chef_rest_v0 }
|
518
|
+
end
|
519
|
+
end # when server API V0 is not supported by the Chef Server
|
520
|
+
end # reregister
|
521
|
+
|
522
|
+
end
|
348
523
|
end
|