chef 17.6.18 → 17.7.22
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 +5 -0
- data/chef.gemspec +1 -0
- data/lib/chef/chef_fs/file_pattern.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +1 -1
- data/lib/chef/data_collector/run_end_message.rb +1 -1
- data/lib/chef/dsl/reboot_pending.rb +1 -1
- data/lib/chef/exceptions.rb +10 -0
- data/lib/chef/provider/cron.rb +4 -1
- data/lib/chef/provider/git.rb +1 -1
- data/lib/chef/provider/ifconfig/debian.rb +1 -1
- data/lib/chef/provider/subversion.rb +5 -5
- data/lib/chef/resource/chocolatey_config.rb +1 -1
- data/lib/chef/resource/chocolatey_feature.rb +1 -1
- data/lib/chef/resource/chocolatey_source.rb +24 -2
- data/lib/chef/resource/directory.rb +1 -1
- data/lib/chef/resource/habitat_install.rb +3 -3
- data/lib/chef/resource/inspec_waiver.rb +1 -1
- data/lib/chef/resource/inspec_waiver_file_entry.rb +1 -1
- data/lib/chef/resource/kernel_module.rb +27 -2
- data/lib/chef/resource/macos_userdefaults.rb +43 -128
- data/lib/chef/resource/windows_auto_run.rb +1 -1
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
- data/lib/chef/resource/windows_update_settings.rb +3 -3
- data/lib/chef/resource.rb +1 -1
- data/lib/chef/resource_reporter.rb +1 -1
- data/lib/chef/secret_fetcher/azure_key_vault.rb +62 -8
- data/lib/chef/secret_fetcher.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/dsl/reboot_pending_spec.rb +3 -3
- data/spec/functional/dsl/registry_helper_spec.rb +1 -1
- data/spec/functional/resource/dsc_script_spec.rb +2 -2
- data/spec/functional/resource/macos_userdefaults_spec.rb +119 -0
- data/spec/functional/resource/registry_spec.rb +81 -81
- data/spec/functional/win32/registry_spec.rb +8 -8
- data/spec/unit/data_collector_spec.rb +24 -1
- data/spec/unit/dsl/reboot_pending_spec.rb +1 -1
- data/spec/unit/mixin/default_paths_spec.rb +1 -1
- data/spec/unit/mixin/securable_spec.rb +3 -3
- data/spec/unit/provider/cron_spec.rb +45 -0
- data/spec/unit/provider/package/rubygems_spec.rb +5 -5
- data/spec/unit/provider/package/windows_spec.rb +1 -1
- data/spec/unit/provider/registry_key_spec.rb +4 -4
- data/spec/unit/provider/service/windows_spec.rb +5 -5
- data/spec/unit/provider/subversion_spec.rb +4 -4
- data/spec/unit/provider/windows_env_spec.rb +1 -1
- data/spec/unit/provider/zypper_repository_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_config_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_feature_spec.rb +1 -1
- data/spec/unit/resource/chocolatey_source_spec.rb +1 -1
- data/spec/unit/resource/kernel_module_spec.rb +2 -1
- data/spec/unit/resource/macos_user_defaults_spec.rb +36 -96
- data/spec/unit/resource/registry_key_spec.rb +10 -10
- data/spec/unit/resource/windows_auto_run_spec.rb +1 -1
- data/spec/unit/resource/windows_feature_powershell_spec.rb +1 -1
- data/spec/unit/resource/windows_firewall_rule_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +3 -3
- data/spec/unit/resource_reporter_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +5 -0
- data/spec/unit/secret_fetcher/azure_key_vault_spec.rb +99 -20
- data/spec/unit/util/backup_spec.rb +1 -1
- data/spec/unit/win32/registry_spec.rb +3 -3
- metadata +21 -6
@@ -75,19 +75,19 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
75
75
|
def create_deletable_keys
|
76
76
|
# create them both 32-bit and 64-bit
|
77
77
|
[ 0x0100, 0x0200 ].each do |flag|
|
78
|
-
hive_class.create(key_parent +
|
79
|
-
hive_class.open(key_parent +
|
78
|
+
hive_class.create(key_parent + "\\Opscode", Win32::Registry::KEY_WRITE | flag)
|
79
|
+
hive_class.open(key_parent + "\\Opscode", Win32::Registry::KEY_ALL_ACCESS | flag) do |reg|
|
80
80
|
reg["Color", Win32::Registry::REG_SZ] = "Orange"
|
81
81
|
reg.write("Opscode", Win32::Registry::REG_MULTI_SZ, %w{Seattle Washington})
|
82
82
|
reg["AKA", Win32::Registry::REG_SZ] = "OC"
|
83
83
|
end
|
84
|
-
hive_class.create(key_parent +
|
85
|
-
hive_class.open(key_parent +
|
84
|
+
hive_class.create(key_parent + "\\ReportKey", Win32::Registry::KEY_WRITE | flag)
|
85
|
+
hive_class.open(key_parent + "\\ReportKey", Win32::Registry::KEY_ALL_ACCESS | flag) do |reg|
|
86
86
|
reg["ReportVal4", Win32::Registry::REG_SZ] = "report4"
|
87
87
|
reg["ReportVal5", Win32::Registry::REG_SZ] = "report5"
|
88
88
|
end
|
89
|
-
hive_class.create(key_parent +
|
90
|
-
hive_class.open(key_parent +
|
89
|
+
hive_class.create(key_parent + "\\OpscodeWhyRun", Win32::Registry::KEY_WRITE | flag)
|
90
|
+
hive_class.open(key_parent + "\\OpscodeWhyRun", Win32::Registry::KEY_ALL_ACCESS | flag) do |reg|
|
91
91
|
reg["BriskWalk", Win32::Registry::REG_SZ] = "is good for health"
|
92
92
|
end
|
93
93
|
end
|
@@ -188,13 +188,13 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
it "creates subkey if parent exists" do
|
191
|
-
@new_resource.key(reg_child +
|
191
|
+
@new_resource.key(reg_child + "\\OpscodeTest")
|
192
192
|
@new_resource.values([{ name: "Chef", type: :multi_string, data: %w{OpscodeOrange Rules} }])
|
193
193
|
@new_resource.recursive(false)
|
194
194
|
@new_resource.run_action(:create)
|
195
195
|
|
196
|
-
expect(@registry.key_exists?(reg_child +
|
197
|
-
expect(@registry.value_exists?(reg_child +
|
196
|
+
expect(@registry.key_exists?(reg_child + "\\OpscodeTest")).to eq(true)
|
197
|
+
expect(@registry.value_exists?(reg_child + "\\OpscodeTest", { name: "Chef", type: :multi_string, data: %w{OpscodeOrange Rules} })).to eq(true)
|
198
198
|
end
|
199
199
|
|
200
200
|
it "raises an error if action create and parent does not exist and recursive is set to false" do
|
@@ -258,20 +258,20 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
258
258
|
@registry.architecture = :machine
|
259
259
|
end
|
260
260
|
it "creates a key in a 32-bit registry that is not viewable in 64-bit" do
|
261
|
-
@new_resource.key(reg_child +
|
261
|
+
@new_resource.key(reg_child + "\\Atraxi" )
|
262
262
|
@new_resource.values([{ name: "OC", type: :string, data: "Data" }])
|
263
263
|
@new_resource.recursive(true)
|
264
264
|
@new_resource.architecture(:i386)
|
265
265
|
@new_resource.run_action(:create)
|
266
266
|
@registry.architecture = :i386
|
267
|
-
expect(@registry.data_exists?(reg_child +
|
267
|
+
expect(@registry.data_exists?(reg_child + "\\Atraxi", { name: "OC", type: :string, data: "Data" })).to eq(true)
|
268
268
|
@registry.architecture = :x86_64
|
269
|
-
expect(@registry.key_exists?(reg_child +
|
269
|
+
expect(@registry.key_exists?(reg_child + "\\Atraxi")).to eq(false)
|
270
270
|
end
|
271
271
|
end
|
272
272
|
|
273
273
|
it "prepares the reporting data for action :create" do
|
274
|
-
@new_resource.key(reg_child +
|
274
|
+
@new_resource.key(reg_child + "\\Ood")
|
275
275
|
@new_resource.values([{ name: "ReportingVal1", type: :string, data: "report1" }, { name: "ReportingVal2", type: :string, data: "report2" }])
|
276
276
|
@new_resource.recursive(true)
|
277
277
|
@new_resource.run_action(:create)
|
@@ -280,7 +280,7 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
280
280
|
expect(@report["action"]).to eq("end")
|
281
281
|
expect(@report["resources"][0]["type"]).to eq("registry_key")
|
282
282
|
expect(@report["resources"][0]["name"]).to eq(resource_name)
|
283
|
-
expect(@report["resources"][0]["id"]).to eq(reg_child +
|
283
|
+
expect(@report["resources"][0]["id"]).to eq(reg_child + "\\Ood")
|
284
284
|
expect(@report["resources"][0]["after"][:values]).to eq([{ name: "ReportingVal1", type: :string, data: "report1" },
|
285
285
|
{ name: "ReportingVal2", type: :string, data: "report2" }])
|
286
286
|
expect(@report["resources"][0]["before"][:values]).to eq([])
|
@@ -295,48 +295,48 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
295
295
|
end
|
296
296
|
|
297
297
|
it "does not raise an exception if the keys do not exist but recursive is set to false" do
|
298
|
-
@new_resource.key(reg_child +
|
298
|
+
@new_resource.key(reg_child + "\\Slitheen\\Raxicoricofallapatorius")
|
299
299
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
300
300
|
@new_resource.recursive(false)
|
301
301
|
@new_resource.run_action(:create) # should not raise_error
|
302
|
-
expect(@registry.key_exists?(reg_child +
|
303
|
-
expect(@registry.key_exists?(reg_child +
|
302
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
303
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen\\Raxicoricofallapatorius")).to eq(false)
|
304
304
|
end
|
305
305
|
|
306
306
|
it "does not create key if the action is create" do
|
307
|
-
@new_resource.key(reg_child +
|
307
|
+
@new_resource.key(reg_child + "\\Slitheen")
|
308
308
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
309
309
|
@new_resource.recursive(false)
|
310
310
|
@new_resource.run_action(:create)
|
311
|
-
expect(@registry.key_exists?(reg_child +
|
311
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
312
312
|
end
|
313
313
|
|
314
314
|
it "does not raise an exception if the action create and type key missing in values hash" do
|
315
|
-
@new_resource.key(reg_child +
|
315
|
+
@new_resource.key(reg_child + "\\Slitheen")
|
316
316
|
@new_resource.values([{ name: "BriskWalk", data: "my_data" }])
|
317
317
|
@new_resource.run_action(:create) # should not raise_error
|
318
|
-
expect(@registry.key_exists?(reg_child +
|
318
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
319
319
|
end
|
320
320
|
|
321
321
|
it "does not raise an exception if the action create and data key missing in values hash" do
|
322
|
-
@new_resource.key(reg_child +
|
322
|
+
@new_resource.key(reg_child + "\\Slitheen")
|
323
323
|
@new_resource.values([{ name: "BriskWalk", type: :string }])
|
324
324
|
@new_resource.run_action(:create) # should not raise_error
|
325
|
-
expect(@registry.key_exists?(reg_child +
|
325
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
326
326
|
end
|
327
327
|
|
328
328
|
it "does not raise an exception if the action create and only name key present in values hash" do
|
329
|
-
@new_resource.key(reg_child +
|
329
|
+
@new_resource.key(reg_child + "\\Slitheen")
|
330
330
|
@new_resource.values([{ name: "BriskWalk" }])
|
331
331
|
@new_resource.run_action(:create) # should not raise_error
|
332
|
-
expect(@registry.key_exists?(reg_child +
|
332
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
333
333
|
end
|
334
334
|
|
335
335
|
it "does not raise an exception if the action create and all keys are present in values hash" do
|
336
|
-
@new_resource.key(reg_child +
|
336
|
+
@new_resource.key(reg_child + "\\Slitheen")
|
337
337
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "my_data" }])
|
338
338
|
@new_resource.run_action(:create) # should not raise_error
|
339
|
-
expect(@registry.key_exists?(reg_child +
|
339
|
+
expect(@registry.key_exists?(reg_child + "\\Slitheen")).to eq(false)
|
340
340
|
end
|
341
341
|
end
|
342
342
|
end
|
@@ -374,17 +374,17 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
374
374
|
end
|
375
375
|
|
376
376
|
it "creates subkey if parent exists" do
|
377
|
-
@new_resource.key(reg_child +
|
377
|
+
@new_resource.key(reg_child + "\\Pyrovile")
|
378
378
|
@new_resource.values([{ name: "Chef", type: :multi_string, data: %w{OpscodeOrange Rules} }])
|
379
379
|
@new_resource.recursive(false)
|
380
380
|
@new_resource.run_action(:create_if_missing)
|
381
381
|
|
382
|
-
expect(@registry.key_exists?(reg_child +
|
383
|
-
expect(@registry.value_exists?(reg_child +
|
382
|
+
expect(@registry.key_exists?(reg_child + "\\Pyrovile")).to eq(true)
|
383
|
+
expect(@registry.value_exists?(reg_child + "\\Pyrovile", { name: "Chef", type: :multi_string, data: %w{OpscodeOrange Rules} })).to eq(true)
|
384
384
|
end
|
385
385
|
|
386
386
|
it "raises an error if action create and parent does not exist and recursive is set to false" do
|
387
|
-
@new_resource.key(reg_child +
|
387
|
+
@new_resource.key(reg_child + "\\Sontaran\\Sontar")
|
388
388
|
@new_resource.values([{ name: "OC", type: :string, data: "MissingData" }])
|
389
389
|
@new_resource.recursive(false)
|
390
390
|
expect { @new_resource.run_action(:create_if_missing) }.to raise_error(Chef::Exceptions::Win32RegNoRecursive)
|
@@ -415,28 +415,28 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
415
415
|
end
|
416
416
|
|
417
417
|
it "creates missing keys if action create and parent does not exist and recursive is set to true" do
|
418
|
-
@new_resource.key(reg_child +
|
418
|
+
@new_resource.key(reg_child + "\\Sontaran\\Sontar")
|
419
419
|
@new_resource.values([{ name: "OC", type: :string, data: "MissingData" }])
|
420
420
|
@new_resource.recursive(true)
|
421
421
|
@new_resource.run_action(:create_if_missing)
|
422
422
|
|
423
|
-
expect(@registry.key_exists?(reg_child +
|
424
|
-
expect(@registry.value_exists?(reg_child +
|
423
|
+
expect(@registry.key_exists?(reg_child + "\\Sontaran\\Sontar")).to eq(true)
|
424
|
+
expect(@registry.value_exists?(reg_child + "\\Sontaran\\Sontar", { name: "OC", type: :string, data: "MissingData" })).to eq(true)
|
425
425
|
end
|
426
426
|
|
427
427
|
it "creates key with multiple value as specified" do
|
428
|
-
@new_resource.key(reg_child +
|
428
|
+
@new_resource.key(reg_child + "\\Adipose")
|
429
429
|
@new_resource.values([{ name: "one", type: :string, data: "1" }, { name: "two", type: :string, data: "2" }, { name: "three", type: :string, data: "3" }])
|
430
430
|
@new_resource.recursive(true)
|
431
431
|
@new_resource.run_action(:create_if_missing)
|
432
432
|
|
433
433
|
@new_resource.each_value do |value|
|
434
|
-
expect(@registry.value_exists?(reg_child +
|
434
|
+
expect(@registry.value_exists?(reg_child + "\\Adipose", value)).to eq(true)
|
435
435
|
end
|
436
436
|
end
|
437
437
|
|
438
438
|
it "prepares the reporting data for :create_if_missing" do
|
439
|
-
@new_resource.key(reg_child +
|
439
|
+
@new_resource.key(reg_child + "\\Judoon")
|
440
440
|
@new_resource.values([{ name: "ReportingVal3", type: :string, data: "report3" }])
|
441
441
|
@new_resource.recursive(true)
|
442
442
|
@new_resource.run_action(:create_if_missing)
|
@@ -445,7 +445,7 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
445
445
|
expect(@report["action"]).to eq("end")
|
446
446
|
expect(@report["resources"][0]["type"]).to eq("registry_key")
|
447
447
|
expect(@report["resources"][0]["name"]).to eq(resource_name)
|
448
|
-
expect(@report["resources"][0]["id"]).to eq(reg_child +
|
448
|
+
expect(@report["resources"][0]["id"]).to eq(reg_child + "\\Judoon")
|
449
449
|
expect(@report["resources"][0]["after"][:values]).to eq([{ name: "ReportingVal3", type: :string, data: "report3" }])
|
450
450
|
expect(@report["resources"][0]["before"][:values]).to eq([])
|
451
451
|
expect(@report["resources"][0]["result"]).to eq("create_if_missing")
|
@@ -459,48 +459,48 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
459
459
|
end
|
460
460
|
|
461
461
|
it "does not raise an exception if the keys do not exist but recursive is set to false" do
|
462
|
-
@new_resource.key(reg_child +
|
462
|
+
@new_resource.key(reg_child + "\\Zygons\\Zygor")
|
463
463
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
464
464
|
@new_resource.recursive(false)
|
465
465
|
@new_resource.run_action(:create_if_missing) # should not raise_error
|
466
|
-
expect(@registry.key_exists?(reg_child +
|
467
|
-
expect(@registry.key_exists?(reg_child +
|
466
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
467
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons\\Zygor")).to eq(false)
|
468
468
|
end
|
469
469
|
|
470
470
|
it "does nothing if the action is create_if_missing" do
|
471
|
-
@new_resource.key(reg_child +
|
471
|
+
@new_resource.key(reg_child + "\\Zygons")
|
472
472
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
473
473
|
@new_resource.recursive(false)
|
474
474
|
@new_resource.run_action(:create_if_missing)
|
475
|
-
expect(@registry.key_exists?(reg_child +
|
475
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
476
476
|
end
|
477
477
|
|
478
478
|
it "does not raise an exception if the action create_if_missing and type key missing in values hash" do
|
479
|
-
@new_resource.key(reg_child +
|
479
|
+
@new_resource.key(reg_child + "\\Zygons")
|
480
480
|
@new_resource.values([{ name: "BriskWalk", data: "my_data" }])
|
481
481
|
@new_resource.run_action(:create_if_missing) # should not raise_error
|
482
|
-
expect(@registry.key_exists?(reg_child +
|
482
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
483
483
|
end
|
484
484
|
|
485
485
|
it "does not raise an exception if the action create_if_missing and data key missing in values hash" do
|
486
|
-
@new_resource.key(reg_child +
|
486
|
+
@new_resource.key(reg_child + "\\Zygons")
|
487
487
|
@new_resource.values([{ name: "BriskWalk", type: :string }])
|
488
488
|
@new_resource.run_action(:create_if_missing) # should not raise_error
|
489
|
-
expect(@registry.key_exists?(reg_child +
|
489
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
490
490
|
end
|
491
491
|
|
492
492
|
it "does not raise an exception if the action create_if_missing and only name key present in values hash" do
|
493
|
-
@new_resource.key(reg_child +
|
493
|
+
@new_resource.key(reg_child + "\\Zygons")
|
494
494
|
@new_resource.values([{ name: "BriskWalk" }])
|
495
495
|
@new_resource.run_action(:create_if_missing) # should not raise_error
|
496
|
-
expect(@registry.key_exists?(reg_child +
|
496
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
497
497
|
end
|
498
498
|
|
499
499
|
it "does not raise an exception if the action create_if_missing and all keys are present in values hash" do
|
500
|
-
@new_resource.key(reg_child +
|
500
|
+
@new_resource.key(reg_child + "\\Zygons")
|
501
501
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "my_data" }])
|
502
502
|
@new_resource.run_action(:create_if_missing) # should not raise_error
|
503
|
-
expect(@registry.key_exists?(reg_child +
|
503
|
+
expect(@registry.key_exists?(reg_child + "\\Zygons")).to eq(false)
|
504
504
|
end
|
505
505
|
end
|
506
506
|
end
|
@@ -512,61 +512,61 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
512
512
|
end
|
513
513
|
|
514
514
|
it "takes no action if the specified key path does not exist in the system" do
|
515
|
-
expect(@registry.key_exists?(reg_parent +
|
515
|
+
expect(@registry.key_exists?(reg_parent + "\\Osirian")).to eq(false)
|
516
516
|
|
517
|
-
@new_resource.key(reg_parent +
|
517
|
+
@new_resource.key(reg_parent + "\\Osirian")
|
518
518
|
@new_resource.recursive(false)
|
519
519
|
@new_resource.run_action(:delete)
|
520
520
|
|
521
|
-
expect(@registry.key_exists?(reg_parent +
|
521
|
+
expect(@registry.key_exists?(reg_parent + "\\Osirian")).to eq(false)
|
522
522
|
end
|
523
523
|
|
524
524
|
it "takes no action if the key exists but the value does not" do
|
525
|
-
expect(@registry.data_exists?(reg_parent +
|
525
|
+
expect(@registry.data_exists?(reg_parent + "\\Opscode", { name: "Color", type: :string, data: "Orange" })).to eq(true)
|
526
526
|
|
527
|
-
@new_resource.key(reg_parent +
|
527
|
+
@new_resource.key(reg_parent + "\\Opscode")
|
528
528
|
@new_resource.values([{ name: "LooksLike", type: :multi_string, data: %w{SeattleGrey OCOrange} }])
|
529
529
|
@new_resource.recursive(false)
|
530
530
|
@new_resource.run_action(:delete)
|
531
531
|
|
532
|
-
expect(@registry.data_exists?(reg_parent +
|
532
|
+
expect(@registry.data_exists?(reg_parent + "\\Opscode", { name: "Color", type: :string, data: "Orange" })).to eq(true)
|
533
533
|
end
|
534
534
|
|
535
535
|
it "deletes only specified values under a key path" do
|
536
|
-
@new_resource.key(reg_parent +
|
536
|
+
@new_resource.key(reg_parent + "\\Opscode")
|
537
537
|
@new_resource.values([{ name: "Opscode", type: :multi_string, data: %w{Seattle Washington} }, { name: "AKA", type: :string, data: "OC" }])
|
538
538
|
@new_resource.recursive(false)
|
539
539
|
@new_resource.run_action(:delete)
|
540
540
|
|
541
|
-
expect(@registry.data_exists?(reg_parent +
|
542
|
-
expect(@registry.value_exists?(reg_parent +
|
543
|
-
expect(@registry.value_exists?(reg_parent +
|
541
|
+
expect(@registry.data_exists?(reg_parent + "\\Opscode", { name: "Color", type: :string, data: "Orange" })).to eq(true)
|
542
|
+
expect(@registry.value_exists?(reg_parent + "\\Opscode", { name: "AKA", type: :string, data: "OC" })).to eq(false)
|
543
|
+
expect(@registry.value_exists?(reg_parent + "\\Opscode", { name: "Opscode", type: :multi_string, data: %w{Seattle Washington} })).to eq(false)
|
544
544
|
end
|
545
545
|
|
546
546
|
it "it deletes the values with the same name irrespective of it type and data" do
|
547
|
-
@new_resource.key(reg_parent +
|
547
|
+
@new_resource.key(reg_parent + "\\Opscode")
|
548
548
|
@new_resource.values([{ name: "Color", type: :multi_string, data: %w{Black Orange} }])
|
549
549
|
@new_resource.recursive(false)
|
550
550
|
@new_resource.run_action(:delete)
|
551
551
|
|
552
|
-
expect(@registry.value_exists?(reg_parent +
|
552
|
+
expect(@registry.value_exists?(reg_parent + "\\Opscode", { name: "Color", type: :string, data: "Orange" })).to eq(false)
|
553
553
|
end
|
554
554
|
|
555
555
|
it "prepares the reporting data for action :delete" do
|
556
|
-
@new_resource.key(reg_parent +
|
556
|
+
@new_resource.key(reg_parent + "\\ReportKey")
|
557
557
|
@new_resource.values([{ name: "ReportVal4", type: :string, data: "report4" }, { name: "ReportVal5", type: :string, data: "report5" }])
|
558
558
|
@new_resource.recursive(true)
|
559
559
|
@new_resource.run_action(:delete)
|
560
560
|
|
561
561
|
@report = @resource_reporter.prepare_run_data
|
562
562
|
|
563
|
-
expect(@registry.value_exists?(reg_parent +
|
563
|
+
expect(@registry.value_exists?(reg_parent + "\\ReportKey", [{ name: "ReportVal4", type: :string, data: "report4" }, { name: "ReportVal5", type: :string, data: "report5" }])).to eq(false)
|
564
564
|
|
565
565
|
expect(@report["action"]).to eq("end")
|
566
566
|
expect(@report["resources"].count).to eq(1)
|
567
567
|
expect(@report["resources"][0]["type"]).to eq("registry_key")
|
568
568
|
expect(@report["resources"][0]["name"]).to eq(resource_name)
|
569
|
-
expect(@report["resources"][0]["id"]).to eq(reg_parent +
|
569
|
+
expect(@report["resources"][0]["id"]).to eq(reg_parent + "\\ReportKey")
|
570
570
|
expect(@report["resources"][0]["before"][:values]).to eq([{ name: "ReportVal4", type: :string, data: "report4" },
|
571
571
|
{ name: "ReportVal5", type: :string, data: "report5" }])
|
572
572
|
# Not testing for after values to match since after -> new_resource values.
|
@@ -580,12 +580,12 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
580
580
|
Chef::Config[:why_run] = true
|
581
581
|
end
|
582
582
|
it "does nothing if the action is delete" do
|
583
|
-
@new_resource.key(reg_parent +
|
583
|
+
@new_resource.key(reg_parent + "\\OpscodeWhyRun")
|
584
584
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
585
585
|
@new_resource.recursive(false)
|
586
586
|
@new_resource.run_action(:delete)
|
587
587
|
|
588
|
-
expect(@registry.key_exists?(reg_parent +
|
588
|
+
expect(@registry.key_exists?(reg_parent + "\\OpscodeWhyRun")).to eq(true)
|
589
589
|
end
|
590
590
|
end
|
591
591
|
end
|
@@ -597,21 +597,21 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
597
597
|
end
|
598
598
|
|
599
599
|
it "takes no action if the specified key path does not exist in the system" do
|
600
|
-
expect(@registry.key_exists?(reg_parent +
|
600
|
+
expect(@registry.key_exists?(reg_parent + "\\Osirian")).to eq(false)
|
601
601
|
|
602
|
-
@new_resource.key(reg_parent +
|
602
|
+
@new_resource.key(reg_parent + "\\Osirian")
|
603
603
|
@new_resource.recursive(false)
|
604
604
|
@new_resource.run_action(:delete_key)
|
605
605
|
|
606
|
-
expect(@registry.key_exists?(reg_parent +
|
606
|
+
expect(@registry.key_exists?(reg_parent + "\\Osirian")).to eq(false)
|
607
607
|
end
|
608
608
|
|
609
609
|
it "deletes key if it has no subkeys and recursive == false" do
|
610
|
-
@new_resource.key(reg_parent +
|
610
|
+
@new_resource.key(reg_parent + "\\OpscodeTest")
|
611
611
|
@new_resource.recursive(false)
|
612
612
|
@new_resource.run_action(:delete_key)
|
613
613
|
|
614
|
-
expect(@registry.key_exists?(reg_parent +
|
614
|
+
expect(@registry.key_exists?(reg_parent + "\\OpscodeTest")).to eq(false)
|
615
615
|
end
|
616
616
|
|
617
617
|
it "raises an exception if the key has subkeys and recursive == false" do
|
@@ -621,22 +621,22 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
621
621
|
end
|
622
622
|
|
623
623
|
it "ignores the values under a key" do
|
624
|
-
@new_resource.key(reg_parent +
|
624
|
+
@new_resource.key(reg_parent + "\\OpscodeIgnoredValues")
|
625
625
|
# @new_resource.values([{:name=>"DontExist", :type=>:string, :data=>"These will be ignored anyways"}])
|
626
626
|
@new_resource.recursive(true)
|
627
627
|
@new_resource.run_action(:delete_key)
|
628
628
|
end
|
629
629
|
|
630
630
|
it "deletes the key if it has subkeys and recursive == true" do
|
631
|
-
@new_resource.key(reg_parent +
|
631
|
+
@new_resource.key(reg_parent + "\\Opscode")
|
632
632
|
@new_resource.recursive(true)
|
633
633
|
@new_resource.run_action(:delete_key)
|
634
634
|
|
635
|
-
expect(@registry.key_exists?(reg_parent +
|
635
|
+
expect(@registry.key_exists?(reg_parent + "\\Opscode")).to eq(false)
|
636
636
|
end
|
637
637
|
|
638
638
|
it "prepares the reporting data for action :delete_key" do
|
639
|
-
@new_resource.key(reg_parent +
|
639
|
+
@new_resource.key(reg_parent + "\\ReportKey")
|
640
640
|
@new_resource.recursive(true)
|
641
641
|
@new_resource.run_action(:delete_key)
|
642
642
|
|
@@ -644,7 +644,7 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
644
644
|
expect(@report["action"]).to eq("end")
|
645
645
|
expect(@report["resources"][0]["type"]).to eq("registry_key")
|
646
646
|
expect(@report["resources"][0]["name"]).to eq(resource_name)
|
647
|
-
expect(@report["resources"][0]["id"]).to eq(reg_parent +
|
647
|
+
expect(@report["resources"][0]["id"]).to eq(reg_parent + "\\ReportKey")
|
648
648
|
# Not testing for before or after values to match since
|
649
649
|
# after -> new_resource.values and
|
650
650
|
# before -> current_resource.values
|
@@ -658,18 +658,18 @@ describe Chef::Resource::RegistryKey, :windows_only, broken: true do
|
|
658
658
|
end
|
659
659
|
|
660
660
|
it "does not throw an exception if the key has subkeys but recursive is set to false" do
|
661
|
-
@new_resource.key(reg_parent +
|
661
|
+
@new_resource.key(reg_parent + "\\OpscodeWhyRun")
|
662
662
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
663
663
|
@new_resource.recursive(false)
|
664
664
|
@new_resource.run_action(:delete_key)
|
665
665
|
end
|
666
666
|
it "does nothing if the action is delete_key" do
|
667
|
-
@new_resource.key(reg_parent +
|
667
|
+
@new_resource.key(reg_parent + "\\OpscodeWhyRun")
|
668
668
|
@new_resource.values([{ name: "BriskWalk", type: :string, data: "is good for health" }])
|
669
669
|
@new_resource.recursive(false)
|
670
670
|
@new_resource.run_action(:delete_key)
|
671
671
|
|
672
|
-
expect(@registry.key_exists?(reg_parent +
|
672
|
+
expect(@registry.key_exists?(reg_parent + "\\OpscodeWhyRun")).to eq(true)
|
673
673
|
end
|
674
674
|
end
|
675
675
|
end
|
@@ -28,14 +28,14 @@ describe "Chef::Win32::Registry", :windows_only do
|
|
28
28
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch"
|
29
29
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\B®anch"
|
30
30
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch\\Flower"
|
31
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
31
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
32
32
|
reg["RootType1", Win32::Registry::REG_SZ] = "fibrous"
|
33
33
|
reg.write("Roots", Win32::Registry::REG_MULTI_SZ, ["strong roots", "healthy tree"])
|
34
34
|
end
|
35
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
35
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Branch", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
36
36
|
reg["Strong", Win32::Registry::REG_SZ] = "bird nest"
|
37
37
|
end
|
38
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
38
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Branch\\Flower", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
39
39
|
reg["Petals", Win32::Registry::REG_MULTI_SZ] = %w{Pink Delicate}
|
40
40
|
end
|
41
41
|
|
@@ -297,7 +297,7 @@ describe "Chef::Win32::Registry", :windows_only do
|
|
297
297
|
describe "delete_value" do
|
298
298
|
before(:all) do
|
299
299
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk\\Peck\\Woodpecker"
|
300
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
300
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Trunk\\Peck\\Woodpecker", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
301
301
|
reg["Peter", Win32::Registry::REG_SZ] = "Tiny"
|
302
302
|
end
|
303
303
|
end
|
@@ -324,11 +324,11 @@ describe "Chef::Win32::Registry", :windows_only do
|
|
324
324
|
describe "delete_key" do
|
325
325
|
before(:all) do
|
326
326
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Branch\\Fruit"
|
327
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
327
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Branch\\Fruit", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
328
328
|
reg["Apple", Win32::Registry::REG_MULTI_SZ] = %w{Red Juicy}
|
329
329
|
end
|
330
330
|
::Win32::Registry::HKEY_CURRENT_USER.create "Software\\Root\\Trunk\\Peck\\Woodpecker"
|
331
|
-
::Win32::Registry::HKEY_CURRENT_USER.open(
|
331
|
+
::Win32::Registry::HKEY_CURRENT_USER.open("Software\\Root\\Trunk\\Peck\\Woodpecker", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
332
332
|
reg["Peter", Win32::Registry::REG_SZ] = "Tiny"
|
333
333
|
end
|
334
334
|
end
|
@@ -519,12 +519,12 @@ describe "Chef::Win32::Registry", :windows_only do
|
|
519
519
|
end
|
520
520
|
# 64-bit
|
521
521
|
::Win32::Registry::HKEY_LOCAL_MACHINE.create("Software\\Root\\Mauve", ::Win32::Registry::KEY_ALL_ACCESS | 0x0100)
|
522
|
-
::Win32::Registry::HKEY_LOCAL_MACHINE.open(
|
522
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root\\Mauve", Win32::Registry::KEY_ALL_ACCESS | 0x0100) do |reg|
|
523
523
|
reg["Alert", Win32::Registry::REG_SZ] = "Universal"
|
524
524
|
end
|
525
525
|
# 32-bit
|
526
526
|
::Win32::Registry::HKEY_LOCAL_MACHINE.create("Software\\Root\\Poosh", ::Win32::Registry::KEY_ALL_ACCESS | 0x0200)
|
527
|
-
::Win32::Registry::HKEY_LOCAL_MACHINE.open(
|
527
|
+
::Win32::Registry::HKEY_LOCAL_MACHINE.open("Software\\Root\\Poosh", Win32::Registry::KEY_ALL_ACCESS | 0x0200) do |reg|
|
528
528
|
reg["Status", Win32::Registry::REG_SZ] = "Lost"
|
529
529
|
end
|
530
530
|
end
|
@@ -164,7 +164,7 @@ describe Chef::DataCollector do
|
|
164
164
|
"after" => after_resource&.state_for_resource_reporter || {},
|
165
165
|
"before" => before_resource&.state_for_resource_reporter || {},
|
166
166
|
"cookbook_name" => cookbook_name,
|
167
|
-
"cookbook_version" => cookbook_version
|
167
|
+
"cookbook_version" => cookbook_version&.version,
|
168
168
|
"delta" => resource_has_diff(new_resource, status) ? new_resource.diff : "",
|
169
169
|
"duration" => duration,
|
170
170
|
"id" => new_resource.identity,
|
@@ -567,6 +567,29 @@ describe Chef::DataCollector do
|
|
567
567
|
it_behaves_like "sends a converge message"
|
568
568
|
end
|
569
569
|
|
570
|
+
context "when the run contains a file resource that is up-to-date from a @recipe_files, returns nil for the version" do
|
571
|
+
let(:total_resource_count) { 1 }
|
572
|
+
let(:updated_resource_count) { 0 }
|
573
|
+
let(:cookbook_name) { "@recipe_files" }
|
574
|
+
let(:resource_record) { [ resource_record_for(new_resource, current_resource, after_resource, :create, "up-to-date", "1234") ] }
|
575
|
+
let(:status) { "success" }
|
576
|
+
let(:cookbook_version) { nil }
|
577
|
+
|
578
|
+
before do
|
579
|
+
allow(new_resource).to receive(:cookbook_version).and_call_original
|
580
|
+
events.resource_action_start(new_resource, :create)
|
581
|
+
events.resource_current_state_loaded(new_resource, :create, current_resource)
|
582
|
+
events.resource_up_to_date(new_resource, :create)
|
583
|
+
events.resource_after_state_loaded(new_resource, :create, after_resource)
|
584
|
+
new_resource.instance_variable_set(:@elapsed_time, 1.2345)
|
585
|
+
events.resource_completed(new_resource)
|
586
|
+
events.converge_complete
|
587
|
+
run_status.stop_clock
|
588
|
+
end
|
589
|
+
|
590
|
+
it_behaves_like "sends a converge message"
|
591
|
+
end
|
592
|
+
|
570
593
|
context "when the run contains a file resource that is updated" do
|
571
594
|
let(:total_resource_count) { 1 }
|
572
595
|
let(:updated_resource_count) { 1 }
|
@@ -36,7 +36,7 @@ describe Chef::DSL::RebootPending do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should return true if "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations" exists' do
|
39
|
-
allow(recipe).to receive(:registry_value_exists?).with(
|
39
|
+
allow(recipe).to receive(:registry_value_exists?).with("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager", { name: "PendingFileRenameOperations" }).and_return(true)
|
40
40
|
expect(recipe.reboot_pending?).to be_truthy
|
41
41
|
end
|
42
42
|
|
@@ -84,7 +84,7 @@ describe Chef::Mixin::DefaultPaths do
|
|
84
84
|
allow(Gem).to receive(:bindir).and_return(gem_bindir)
|
85
85
|
allow(RbConfig::CONFIG).to receive(:[]).with("bindir").and_return(ruby_bindir)
|
86
86
|
allow(ChefUtils).to receive(:windows?).and_return(true)
|
87
|
-
env = { "PATH" =>
|
87
|
+
env = { "PATH" => "C:\\Windows\\system32;C:\\mr\\softie" }
|
88
88
|
@default_paths.enforce_default_paths(env)
|
89
89
|
expect(env["PATH"]).to eq("#{gem_bindir};#{ruby_bindir};C:\\Windows\\system32;C:\\mr\\softie")
|
90
90
|
end
|
@@ -53,8 +53,8 @@ describe Chef::Mixin::Securable do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should accept group/owner names with spaces and backslashes" do
|
56
|
-
expect { @securable.group
|
57
|
-
expect { @securable.owner
|
56
|
+
expect { @securable.group "test\\ group" }.not_to raise_error
|
57
|
+
expect { @securable.owner "test\\ group" }.not_to raise_error
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should accept group/owner names that are a single character or digit" do
|
@@ -186,7 +186,7 @@ describe Chef::Mixin::Securable do
|
|
186
186
|
end
|
187
187
|
|
188
188
|
it "should not accept a group name or id for group with spaces and multiple backslashes" do
|
189
|
-
expect { @securable.group
|
189
|
+
expect { @securable.group "test\\ \\group" }.to raise_error(ArgumentError)
|
190
190
|
end
|
191
191
|
|
192
192
|
it "should accept a unix file mode in string form as an octal number" do
|
@@ -392,6 +392,27 @@ describe Chef::Provider::Cron do
|
|
392
392
|
expect(cron.command).to eq("/bin/true")
|
393
393
|
end
|
394
394
|
end
|
395
|
+
|
396
|
+
context "with a matching entry with a commented crontab line" do
|
397
|
+
it "should set cron_exists" do
|
398
|
+
allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
|
399
|
+
0 2 * * * /some/other/command
|
400
|
+
|
401
|
+
# Chef Name: cronhole some stuff
|
402
|
+
#* * * * * /bin/true
|
403
|
+
CRONTAB
|
404
|
+
cron = @provider.load_current_resource
|
405
|
+
expect(@provider.cron_exists).to eq(true)
|
406
|
+
expect(@provider.cron_empty).to eq(false)
|
407
|
+
expect(cron.minute).to eq("*")
|
408
|
+
expect(cron.hour).to eq("*")
|
409
|
+
expect(cron.day).to eq("*")
|
410
|
+
expect(cron.month).to eq("*")
|
411
|
+
expect(cron.weekday).to eq("*")
|
412
|
+
expect(cron.time).to eq(nil)
|
413
|
+
expect(cron.property_is_set?(:command)).to eq(false)
|
414
|
+
end
|
415
|
+
end
|
395
416
|
end
|
396
417
|
|
397
418
|
describe "cron_different?" do
|
@@ -691,6 +712,30 @@ describe Chef::Provider::Cron do
|
|
691
712
|
end
|
692
713
|
end
|
693
714
|
|
715
|
+
context "when there is a crontab with a matching section with a commented crontab line in it" do
|
716
|
+
before :each do
|
717
|
+
@provider.cron_exists = true
|
718
|
+
end
|
719
|
+
|
720
|
+
it "should add the crontab to the entry" do
|
721
|
+
allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
|
722
|
+
0 2 * * * /some/other/command
|
723
|
+
|
724
|
+
# Chef Name: cronhole some stuff
|
725
|
+
# * * * * * /bin/true
|
726
|
+
CRONTAB
|
727
|
+
expect(@provider).to receive(:write_crontab).with(<<~ENDCRON)
|
728
|
+
0 2 * * * /some/other/command
|
729
|
+
|
730
|
+
# Chef Name: cronhole some stuff
|
731
|
+
* * * * * /bin/true
|
732
|
+
# * * * * * /bin/true
|
733
|
+
ENDCRON
|
734
|
+
@new_resource.minute "*"
|
735
|
+
@provider.run_action(:create)
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
694
739
|
context "when there is a crontab with a matching and identical section" do
|
695
740
|
context "when environment variable is not used" do
|
696
741
|
before :each do
|