chef 17.1.35-universal-mingw32 → 17.2.29-universal-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/lib/chef/action_collection.rb +6 -26
- data/lib/chef/application.rb +1 -1
- data/lib/chef/application/base.rb +15 -0
- data/lib/chef/client.rb +6 -0
- data/lib/chef/cookbook_version.rb +26 -4
- data/lib/chef/data_bag.rb +2 -1
- data/lib/chef/data_bag_item.rb +2 -1
- data/lib/chef/data_collector.rb +0 -1
- data/lib/chef/data_collector/run_end_message.rb +1 -1
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/event_dispatch/base.rb +2 -1
- data/lib/chef/exceptions.rb +3 -0
- data/lib/chef/handler.rb +46 -8
- data/lib/chef/handler/slow_report.rb +66 -0
- data/lib/chef/node.rb +20 -19
- data/lib/chef/provider/support/zypper_repo.erb +4 -2
- data/lib/chef/provider/zypper_repository.rb +27 -31
- data/lib/chef/resource/alternatives.rb +5 -5
- data/lib/chef/resource/apt_preference.rb +2 -2
- data/lib/chef/resource/apt_repository.rb +2 -2
- data/lib/chef/resource/apt_update.rb +4 -4
- data/lib/chef/resource/build_essential.rb +1 -1
- data/lib/chef/resource/chef_client_config.rb +3 -3
- data/lib/chef/resource/chef_client_cron.rb +2 -2
- data/lib/chef/resource/chef_client_launchd.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +14 -14
- data/lib/chef/resource/chef_client_systemd_timer.rb +2 -2
- data/lib/chef/resource/chef_handler.rb +2 -2
- data/lib/chef/resource/chef_sleep.rb +1 -1
- data/lib/chef/resource/chocolatey_feature.rb +2 -2
- data/lib/chef/resource/chocolatey_source.rb +1 -1
- data/lib/chef/resource/cron/cron_d.rb +4 -6
- data/lib/chef/resource/cron_access.rb +1 -1
- data/lib/chef/resource/dmg_package.rb +1 -1
- data/lib/chef/resource/group.rb +4 -4
- data/lib/chef/resource/homebrew_cask.rb +17 -6
- data/lib/chef/resource/homebrew_package.rb +1 -1
- data/lib/chef/resource/homebrew_tap.rb +4 -3
- data/lib/chef/resource/homebrew_update.rb +2 -2
- data/lib/chef/resource/hostname.rb +49 -7
- data/lib/chef/resource/inspec_waiver_file_entry.rb +6 -5
- data/lib/chef/resource/kernel_module.rb +6 -6
- data/lib/chef/resource/locale.rb +1 -1
- data/lib/chef/resource/macos_userdefaults.rb +2 -2
- data/lib/chef/resource/ohai_hint.rb +2 -6
- data/lib/chef/resource/openbsd_package.rb +17 -0
- data/lib/chef/resource/openssl_dhparam.rb +1 -2
- data/lib/chef/resource/openssl_ec_private_key.rb +1 -3
- data/lib/chef/resource/openssl_ec_public_key.rb +1 -3
- data/lib/chef/resource/openssl_rsa_private_key.rb +1 -3
- data/lib/chef/resource/openssl_rsa_public_key.rb +1 -3
- data/lib/chef/resource/openssl_x509_certificate.rb +1 -4
- data/lib/chef/resource/openssl_x509_crl.rb +1 -3
- data/lib/chef/resource/openssl_x509_request.rb +1 -3
- data/lib/chef/resource/osx_profile.rb +3 -3
- data/lib/chef/resource/plist.rb +1 -1
- data/lib/chef/resource/powershell_package_source.rb +2 -4
- data/lib/chef/resource/reboot.rb +38 -9
- data/lib/chef/resource/remote_directory.rb +2 -2
- data/lib/chef/resource/rhsm_errata.rb +0 -2
- data/lib/chef/resource/rhsm_errata_level.rb +1 -5
- data/lib/chef/resource/rhsm_repo.rb +15 -0
- data/lib/chef/resource/ssh_known_hosts_entry.rb +4 -7
- data/lib/chef/resource/sudo.rb +2 -6
- data/lib/chef/resource/swap_file.rb +2 -6
- data/lib/chef/resource/sysctl.rb +2 -2
- data/lib/chef/resource/timezone.rb +1 -1
- data/lib/chef/resource/user_ulimit.rb +2 -2
- data/lib/chef/resource/windows_ad_join.rb +2 -2
- data/lib/chef/resource/windows_audit_policy.rb +2 -2
- data/lib/chef/resource/windows_auto_run.rb +2 -2
- data/lib/chef/resource/windows_certificate.rb +1 -1
- data/lib/chef/resource/windows_dfs_folder.rb +2 -2
- data/lib/chef/resource/windows_dfs_namespace.rb +2 -2
- data/lib/chef/resource/windows_dns_record.rb +2 -2
- data/lib/chef/resource/windows_dns_zone.rb +2 -2
- data/lib/chef/resource/windows_feature.rb +3 -3
- data/lib/chef/resource/windows_feature_dism.rb +3 -5
- data/lib/chef/resource/windows_feature_powershell.rb +3 -3
- data/lib/chef/resource/windows_firewall_profile.rb +2 -2
- data/lib/chef/resource/windows_firewall_rule.rb +20 -6
- data/lib/chef/resource/windows_font.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +103 -64
- data/lib/chef/resource/windows_path.rb +2 -2
- data/lib/chef/resource/windows_printer.rb +5 -20
- data/lib/chef/resource/windows_printer_port.rb +48 -65
- data/lib/chef/resource/windows_security_policy.rb +2 -2
- data/lib/chef/resource/windows_share.rb +2 -2
- data/lib/chef/resource/windows_shortcut.rb +1 -1
- data/lib/chef/resource/windows_task.rb +1 -1
- data/lib/chef/resource/windows_uac.rb +3 -5
- data/lib/chef/resource/windows_user_privilege.rb +2 -2
- data/lib/chef/resource/windows_workgroup.rb +2 -2
- data/lib/chef/resource/yum_package.rb +10 -10
- data/lib/chef/resource/zypper_package.rb +4 -4
- data/lib/chef/resource/zypper_repository.rb +28 -8
- data/lib/chef/resource_reporter.rb +0 -1
- data/lib/chef/version.rb +1 -1
- data/spec/functional/resource/windows_hostname_spec.rb +91 -0
- data/spec/functional/resource/windows_pagefile_spec.rb +98 -0
- data/spec/unit/cookbook_version_spec.rb +52 -0
- data/spec/unit/data_bag_item_spec.rb +2 -2
- data/spec/unit/data_bag_spec.rb +1 -1
- data/spec/unit/data_collector_spec.rb +47 -1
- data/spec/unit/handler_spec.rb +8 -2
- data/spec/unit/provider/zypper_repository_spec.rb +3 -10
- data/spec/unit/resource/windows_firewall_rule_spec.rb +12 -7
- data/spec/unit/resource/windows_pagefile_spec.rb +4 -9
- data/spec/unit/resource/zypper_repository_spec.rb +1 -1
- metadata +9 -6
@@ -24,21 +24,37 @@ class Chef
|
|
24
24
|
unified_mode true
|
25
25
|
|
26
26
|
provides(:zypper_repository) { true }
|
27
|
-
provides(:zypper_repo) { true }
|
27
|
+
provides(:zypper_repo) { true } # legacy cookbook compatibility
|
28
28
|
|
29
29
|
description "Use the **zypper_repository** resource to create Zypper package repositories on SUSE Enterprise Linux and openSUSE systems. This resource maintains full compatibility with the **zypper_repository** resource in the existing **zypper** cookbook."
|
30
30
|
introduced "13.3"
|
31
31
|
examples <<~DOC
|
32
32
|
**Add the Apache repo on openSUSE Leap 15**:
|
33
33
|
|
34
|
-
```
|
34
|
+
```ruby
|
35
35
|
zypper_repository 'apache' do
|
36
36
|
baseurl 'http://download.opensuse.org/repositories/Apache'
|
37
|
-
path '/openSUSE_Leap_15.
|
38
|
-
|
37
|
+
path '/openSUSE_Leap_15.2'
|
38
|
+
type 'rpm-md'
|
39
39
|
priority '100'
|
40
40
|
end
|
41
41
|
```
|
42
|
+
|
43
|
+
**Remove the repo named 'apache'**:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
zypper_repository 'apache' do
|
47
|
+
action :delete
|
48
|
+
end
|
49
|
+
```
|
50
|
+
|
51
|
+
**Refresh the repo named 'apache'**:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
zypper_repository 'apache' do
|
55
|
+
action :refresh
|
56
|
+
end
|
57
|
+
```
|
42
58
|
DOC
|
43
59
|
|
44
60
|
property :repo_name, String,
|
@@ -66,8 +82,10 @@ class Chef
|
|
66
82
|
description: "Determines whether or not to perform a GPG signature check on the repository.",
|
67
83
|
default: true
|
68
84
|
|
69
|
-
property :gpgkey, String,
|
70
|
-
description: "The location of the repository key to be imported."
|
85
|
+
property :gpgkey, [String, Array],
|
86
|
+
description: "The location of the repository key(s) to be imported.",
|
87
|
+
coerce: proc { |v| Array(v) },
|
88
|
+
default: []
|
71
89
|
|
72
90
|
property :baseurl, String,
|
73
91
|
description: "The base URL for the Zypper repository, such as `http://download.opensuse.org`."
|
@@ -95,10 +113,12 @@ class Chef
|
|
95
113
|
default: true
|
96
114
|
|
97
115
|
property :source, String,
|
98
|
-
description: "The name of the template for the repository file. Only necessary if you're
|
116
|
+
description: "The name of the template for the repository file. Only necessary if you're using a custom template for the repository file."
|
99
117
|
|
100
118
|
property :cookbook, String,
|
101
|
-
description: "The cookbook to source the repository template file from. Only necessary if you're
|
119
|
+
description: "The cookbook to source the repository template file from. Only necessary if you're using a custom template for the repository file.",
|
120
|
+
default: lazy { cookbook_name },
|
121
|
+
default_description: "The cookbook containing the resource",
|
102
122
|
desired_state: false
|
103
123
|
|
104
124
|
property :gpgautoimportkeys, [TrueClass, FalseClass],
|
data/lib/chef/version.rb
CHANGED
@@ -0,0 +1,91 @@
|
|
1
|
+
# Author: John McCrae (john.mccrae@progress.com)
|
2
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
3
|
+
# License: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "spec_helper"
|
19
|
+
require "chef/mixin/powershell_exec"
|
20
|
+
require "chef/resource/hostname"
|
21
|
+
|
22
|
+
describe Chef::Resource::Hostname, :windows_only do
|
23
|
+
include Chef::Mixin::PowershellExec
|
24
|
+
|
25
|
+
def get_domain_status
|
26
|
+
powershell_exec!("(Get-WmiObject -Class Win32_ComputerSystem).PartofDomain").result
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:new_hostname) { "New-Hostname" }
|
30
|
+
let(:local_domain_user) { "'mydomain\\Groucho'" }
|
31
|
+
let(:local_domain_password) { "'P@ssw0rd'" }
|
32
|
+
let(:local_windows_reboot) { false }
|
33
|
+
let(:domain_status) { get_domain_status }
|
34
|
+
|
35
|
+
let(:run_context) do
|
36
|
+
node = Chef::Node.new
|
37
|
+
node.consume_external_attrs(OHAI_SYSTEM.data, {}) # node[:languages][:powershell][:version]
|
38
|
+
node.automatic["os"] = "windows"
|
39
|
+
node.automatic["platform"] = "windows"
|
40
|
+
node.automatic["platform_version"] = "6.1"
|
41
|
+
node.automatic["kernel"][:machine] = :x86_64 # Only 64-bit architecture is supported
|
42
|
+
empty_events = Chef::EventDispatch::Dispatcher.new
|
43
|
+
Chef::RunContext.new(node, {}, empty_events)
|
44
|
+
end
|
45
|
+
|
46
|
+
subject do
|
47
|
+
new_resource = Chef::Resource::Hostname.new("oldhostname", run_context)
|
48
|
+
new_resource.hostname = "Grendel"
|
49
|
+
new_resource.windows_reboot = false
|
50
|
+
new_resource
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "Changing machine names" do
|
54
|
+
context "The system can be renamed without a user or password when in a Workgroup" do
|
55
|
+
let(:hostname) { "Cucumber" }
|
56
|
+
it "does change" do
|
57
|
+
subject.run_action(:set)
|
58
|
+
expect(subject).to be_updated_by_last_action
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "Mocking being joined to a domain" do
|
63
|
+
before do
|
64
|
+
allow(subject).to receive(:is_domain_joined?) { true }
|
65
|
+
end
|
66
|
+
context "the system gets renamed when in a domain" do
|
67
|
+
let(:hostname) { "Gherkin" }
|
68
|
+
it "does change the domain account" do
|
69
|
+
subject.windows_reboot true
|
70
|
+
subject.domain_user local_domain_user
|
71
|
+
subject.domain_password local_domain_password
|
72
|
+
subject.run_action(:set)
|
73
|
+
expect(subject).to be_updated_by_last_action
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "testing for error handling" do
|
79
|
+
before do
|
80
|
+
allow(subject).to receive(:is_domain_joined?) { true }
|
81
|
+
end
|
82
|
+
context "when a node is renamed while in a domain" do
|
83
|
+
it "and fails because of missing credentials" do
|
84
|
+
subject.windows_reboot true
|
85
|
+
subject.domain_user local_domain_user
|
86
|
+
expect { subject.run_action(:set) }.to raise_error(RuntimeError)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Author: John McCrae (john.mccrae@progress.com)
|
2
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
3
|
+
# License: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require "spec_helper"
|
19
|
+
require "chef/mixin/powershell_exec"
|
20
|
+
|
21
|
+
describe Chef::Resource::WindowsPagefile, :windows_only do
|
22
|
+
include Chef::Mixin::PowershellExec
|
23
|
+
|
24
|
+
let(:c_path) { "c:\\" }
|
25
|
+
let(:e_path) { "e:\pagefile.sys" }
|
26
|
+
|
27
|
+
let(:run_context) do
|
28
|
+
node = Chef::Node.new
|
29
|
+
node.consume_external_attrs(OHAI_SYSTEM.data, {}) # node[:languages][:powershell][:version]
|
30
|
+
node.automatic["os"] = "windows"
|
31
|
+
node.automatic["platform"] = "windows"
|
32
|
+
node.automatic["platform_version"] = "6.1"
|
33
|
+
node.automatic["kernel"][:machine] = :x86_64 # Only 64-bit architecture is supported
|
34
|
+
empty_events = Chef::EventDispatch::Dispatcher.new
|
35
|
+
Chef::RunContext.new(node, {}, empty_events)
|
36
|
+
end
|
37
|
+
|
38
|
+
subject do
|
39
|
+
new_resource = Chef::Resource::WindowsPagefile.new("pagefile", run_context)
|
40
|
+
new_resource
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "Setting Up Pagefile Management" do
|
44
|
+
context "Disable Automatic Management" do
|
45
|
+
it "Disables Automatic Management" do
|
46
|
+
subject.path c_path
|
47
|
+
subject.automatic_managed false
|
48
|
+
subject.run_action(:set)
|
49
|
+
expect(subject).to be_updated_by_last_action
|
50
|
+
end
|
51
|
+
|
52
|
+
it "Enable Automatic Management " do
|
53
|
+
subject.path c_path
|
54
|
+
subject.automatic_managed true
|
55
|
+
subject.run_action(:set)
|
56
|
+
expect(subject).to be_updated_by_last_action
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "Creating a new Pagefile" do
|
62
|
+
context "Create new pagefile" do
|
63
|
+
it "Creates a new pagefile on a different drive that doesn't exist" do
|
64
|
+
subject.path e_path
|
65
|
+
expect { subject.run_action(:set) }.to raise_error(RuntimeError)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "Update a pagefile" do
|
70
|
+
it "Changes a pagefile to use custom sizes" do
|
71
|
+
subject.path c_path
|
72
|
+
subject.initial_size 20000
|
73
|
+
subject.maximum_size 80000
|
74
|
+
subject.run_action(:set)
|
75
|
+
expect(subject).to be_updated_by_last_action
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "Deleting a Pagefile and Resetting to Automatically Managed" do
|
81
|
+
context "delete the pagefile on disk" do
|
82
|
+
it "deletes the pagefile located at the given path" do
|
83
|
+
subject.path c_path
|
84
|
+
subject.run_action(:delete)
|
85
|
+
expect(subject).to be_updated_by_last_action
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "Re-enable automatic management of pagefiles" do
|
90
|
+
it "Enable Automatic Management " do
|
91
|
+
subject.path c_path
|
92
|
+
subject.automatic_managed true
|
93
|
+
subject.run_action(:set)
|
94
|
+
expect(subject).to be_updated_by_last_action
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -41,7 +41,59 @@ describe Chef::CookbookVersion do
|
|
41
41
|
it "has empty metadata" do
|
42
42
|
expect(cookbook_version.metadata).to eq(Chef::Cookbook::Metadata.new)
|
43
43
|
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#recipe_yml_filenames_by_name" do
|
47
|
+
let(:cookbook_version) { Chef::CookbookVersion.new("mycb", "/tmp/mycb") }
|
48
|
+
|
49
|
+
def files_for_recipe(extension)
|
50
|
+
[
|
51
|
+
{ name: "recipes/default.#{extension}", full_path: "/home/user/repo/cookbooks/test/recipes/default.#{extension}" },
|
52
|
+
{ name: "recipes/other.#{extension}", full_path: "/home/user/repo/cookbooks/test/recipes/other.#{extension}" },
|
53
|
+
]
|
54
|
+
end
|
55
|
+
context "and YAML files present include both a recipes/default.yml and a recipes/default.yaml" do
|
56
|
+
before(:each) do
|
57
|
+
allow(cookbook_version).to receive(:files_for).with("recipes").and_return(
|
58
|
+
[
|
59
|
+
{ name: "recipes/default.yml", full_path: "/home/user/repo/cookbooks/test/recipes/default.yml" },
|
60
|
+
{ name: "recipes/default.yaml", full_path: "/home/user/repo/cookbooks/test/recipes/default.yaml" },
|
61
|
+
]
|
62
|
+
)
|
63
|
+
end
|
64
|
+
it "because both are valid and we can't pick, it raises an error that contains the info needed to fix the problem" do
|
65
|
+
expect { cookbook_version.recipe_yml_filenames_by_name }
|
66
|
+
.to raise_error(Chef::Exceptions::AmbiguousYAMLFile, /.*default.yml.*default.yaml.*update the cookbook to remove/)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
%w{yml yaml}.each do |extension|
|
71
|
+
|
72
|
+
context "and YAML files are present including a recipes/default.#{extension}" do
|
73
|
+
before(:each) do
|
74
|
+
allow(cookbook_version).to receive(:files_for).with("recipes").and_return(files_for_recipe(extension))
|
75
|
+
end
|
76
|
+
|
77
|
+
context "and manifest does not include a root_files/recipe.#{extension}" do
|
78
|
+
it "returns all YAML recipes with a correct default of default.#{extension}" do
|
79
|
+
expect(cookbook_version.recipe_yml_filenames_by_name).to eq({ "default" => "/home/user/repo/cookbooks/test/recipes/default.#{extension}",
|
80
|
+
"other" => "/home/user/repo/cookbooks/test/recipes/other.#{extension}" })
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "and manifest also includes a root_files/recipe.#{extension}" do
|
85
|
+
let(:root_files) { [{ name: "root_files/recipe.#{extension}", full_path: "/home/user/repo/cookbooks/test/recipe.#{extension}" } ] }
|
86
|
+
before(:each) do
|
87
|
+
allow(cookbook_version.cookbook_manifest).to receive(:root_files).and_return(root_files)
|
88
|
+
end
|
44
89
|
|
90
|
+
it "returns all YAML recipes with a correct default of recipe.#{extension}" do
|
91
|
+
expect(cookbook_version.recipe_yml_filenames_by_name).to eq({ "default" => "/home/user/repo/cookbooks/test/recipe.#{extension}",
|
92
|
+
"other" => "/home/user/repo/cookbooks/test/recipes/other.#{extension}" })
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
45
97
|
end
|
46
98
|
|
47
99
|
describe "with a cookbook directory named tatft" do
|
@@ -73,11 +73,11 @@ describe Chef::DataBagItem do
|
|
73
73
|
end
|
74
74
|
|
75
75
|
it "should accept alphanum.alphanum for the id" do
|
76
|
-
expect { data_bag_item.raw_data = { "id" => "foo.bar" } }.
|
76
|
+
expect { data_bag_item.raw_data = { "id" => "foo.bar" } }.to raise_error(ArgumentError)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should accept .alphanum for the id" do
|
80
|
-
expect { data_bag_item.raw_data = { "id" => ".bozo" } }.
|
80
|
+
expect { data_bag_item.raw_data = { "id" => ".bozo" } }.to raise_error(ArgumentError)
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should raise an exception if the id contains anything but alphanum/-/_" do
|
data/spec/unit/data_bag_spec.rb
CHANGED
@@ -49,7 +49,7 @@ describe Chef::DataBag do
|
|
49
49
|
expect { @data_bag.name({}) }.to raise_error(ArgumentError)
|
50
50
|
end
|
51
51
|
|
52
|
-
[
|
52
|
+
["-", "_", "1"].each do |char|
|
53
53
|
it "should allow a '#{char}' character in the data bag name" do
|
54
54
|
expect(@data_bag.name("clown#{char}clown")).to eq("clown#{char}clown")
|
55
55
|
end
|
@@ -142,11 +142,17 @@ describe Chef::DataCollector do
|
|
142
142
|
def expect_converge_message(keys)
|
143
143
|
keys["message_type"] = "run_converge"
|
144
144
|
keys["message_version"] = "1.1.0"
|
145
|
+
# if (keys.key?("node") && !keys["node"].empty?)
|
146
|
+
# expect(rest_client).to receive(:post) do |_a, hash, _b|
|
147
|
+
# require 'pry'; binding.pry
|
148
|
+
# end
|
149
|
+
# else
|
145
150
|
expect(rest_client).to receive(:post).with(
|
146
151
|
nil,
|
147
152
|
hash_including(keys),
|
148
153
|
{ "Content-Type" => "application/json" }
|
149
154
|
)
|
155
|
+
# end
|
150
156
|
end
|
151
157
|
|
152
158
|
def resource_has_diff(new_resource, status)
|
@@ -202,7 +208,7 @@ describe Chef::DataCollector do
|
|
202
208
|
end
|
203
209
|
|
204
210
|
it "has a node" do
|
205
|
-
expect_converge_message("node" => expected_node)
|
211
|
+
expect_converge_message("node" => expected_node.is_a?(Chef::Node) ? expected_node.data_for_save : expected_node)
|
206
212
|
send_run_failed_or_completed_event
|
207
213
|
end
|
208
214
|
|
@@ -808,6 +814,46 @@ describe Chef::DataCollector do
|
|
808
814
|
it_behaves_like "sends a converge message"
|
809
815
|
end
|
810
816
|
|
817
|
+
context "when node attributes are block-listed" do
|
818
|
+
let(:status) { "success" }
|
819
|
+
before do
|
820
|
+
Chef::Config[:blocked_default_attributes] = [
|
821
|
+
%w{secret key_to_the_kingdom},
|
822
|
+
]
|
823
|
+
node.default = {
|
824
|
+
"secret" => { "key_to_the_kingdom" => "under the flower pot to the left of the drawbridge" },
|
825
|
+
"publicinfo" => { "num_flower_pots" => 18 },
|
826
|
+
}
|
827
|
+
end
|
828
|
+
|
829
|
+
it "payload should exclude blocked attributes" do
|
830
|
+
expect(rest_client).to receive(:post) do |_addr, hash, _headers|
|
831
|
+
expect(hash["node"]["default"]).to eq({ "secret" => {}, "publicinfo" => { "num_flower_pots" => 18 } })
|
832
|
+
end
|
833
|
+
send_run_failed_or_completed_event
|
834
|
+
end
|
835
|
+
end
|
836
|
+
|
837
|
+
context "when node attributes are allow-listed" do
|
838
|
+
let(:status) { "success" }
|
839
|
+
before do
|
840
|
+
Chef::Config[:allowed_default_attributes] = [
|
841
|
+
%w{public entrance},
|
842
|
+
]
|
843
|
+
node.default = {
|
844
|
+
"public" => { "entrance" => "is the drawbridge" },
|
845
|
+
"secret" => { "entrance" => "is the tunnel" },
|
846
|
+
}
|
847
|
+
end
|
848
|
+
|
849
|
+
it "payload should include only allowed attributes" do
|
850
|
+
expect(rest_client).to receive(:post) do |_addr, hash, _headers|
|
851
|
+
expect(hash["node"]["default"]).to eq({ "public" => { "entrance" => "is the drawbridge" } })
|
852
|
+
end
|
853
|
+
send_run_failed_or_completed_event
|
854
|
+
end
|
855
|
+
end
|
856
|
+
|
811
857
|
end
|
812
858
|
end
|
813
859
|
|
data/spec/unit/handler_spec.rb
CHANGED
@@ -38,6 +38,8 @@ describe Chef::Handler do
|
|
38
38
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
39
39
|
@all_resources = [Chef::Resource::Cat.new("lolz"), Chef::Resource::ZenMaster.new("tzu")]
|
40
40
|
@all_resources.first.updated_by_last_action true
|
41
|
+
@handler.instance_variable_set(:@all_resources, @all_resources)
|
42
|
+
@handler.instance_variable_set(:@updated_resources, [@all_resources.first])
|
41
43
|
@run_context.resource_collection.all_resources.replace(@all_resources)
|
42
44
|
@run_status.run_context = @run_context
|
43
45
|
@start_time = Time.now
|
@@ -119,6 +121,8 @@ describe Chef::Handler do
|
|
119
121
|
@run_context = Chef::RunContext.new(@node, {}, @events)
|
120
122
|
@all_resources = [Chef::Resource::Cat.new("foo"), Chef::Resource::ZenMaster.new("moo")]
|
121
123
|
@all_resources.first.updated_by_last_action true
|
124
|
+
@handler.instance_variable_set(:@all_resources, @all_resources)
|
125
|
+
@handler.instance_variable_set(:@updated_resources, [@all_resources.first])
|
122
126
|
@run_context.resource_collection.all_resources.replace(@all_resources)
|
123
127
|
@run_status.run_context = @run_context
|
124
128
|
@start_time = Time.now
|
@@ -169,17 +173,19 @@ describe Chef::Handler do
|
|
169
173
|
# and this would test the start handler
|
170
174
|
describe "when running a start handler" do
|
171
175
|
before do
|
176
|
+
@handler.instance_variable_set(:@all_resources, [])
|
177
|
+
@handler.instance_variable_set(:@updated_resources, [])
|
172
178
|
@start_time = Time.now
|
173
179
|
allow(Time).to receive(:now).and_return(@start_time)
|
174
180
|
@run_status.start_clock
|
175
181
|
end
|
176
182
|
|
177
183
|
it "should not have all resources" do
|
178
|
-
expect(@handler.all_resources).to
|
184
|
+
expect(@handler.all_resources).to be_empty
|
179
185
|
end
|
180
186
|
|
181
187
|
it "should not have updated resources" do
|
182
|
-
expect(@handler.updated_resources).to
|
188
|
+
expect(@handler.updated_resources).to be_empty
|
183
189
|
end
|
184
190
|
|
185
191
|
it "has a shortcut for the start time" do
|