chef 15.6.10-universal-mingw32 → 15.7.30-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 -1
- data/README.md +2 -2
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +22 -5
- data/lib/chef/cookbook/cookbook_version_loader.rb +12 -6
- data/lib/chef/cookbook_loader.rb +55 -2
- data/lib/chef/cookbook_uploader.rb +2 -0
- data/lib/chef/cookbook_version.rb +17 -0
- data/lib/chef/dist.rb +3 -3
- data/lib/chef/event_loggers/windows_eventlog.rb +1 -1
- data/lib/chef/knife/bootstrap.rb +5 -0
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +11 -11
- data/lib/chef/knife/cookbook_upload.rb +75 -45
- data/lib/chef/knife/core/bootstrap_context.rb +5 -5
- data/lib/chef/knife/core/windows_bootstrap_context.rb +1 -1
- data/lib/chef/knife/supermarket_install.rb +1 -1
- data/lib/chef/log/winevt.rb +1 -1
- data/lib/chef/mixin/openssl_helper.rb +21 -0
- data/lib/chef/monkey_patches/net_http.rb +0 -38
- data/lib/chef/provider/cron.rb +54 -9
- data/lib/chef/provider/cron/aix.rb +9 -2
- data/lib/chef/provider/launchd.rb +1 -1
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/mac.rb +17 -22
- data/lib/chef/provider/windows_task.rb +2 -2
- data/lib/chef/resource/archive_file.rb +5 -2
- data/lib/chef/resource/cron.rb +29 -0
- data/lib/chef/resource/cron_d.rb +29 -0
- data/lib/chef/resource/openssl_x509_certificate.rb +32 -21
- data/lib/chef/resource/sudo.rb +13 -4
- data/lib/chef/version.rb +2 -2
- data/lib/chef/version_string.rb +3 -126
- data/spec/data/cookbooks/apache2/metadata.json +33 -0
- data/spec/data/cookbooks/java/metadata.json +33 -0
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +5 -5
- data/spec/integration/knife/chef_fs_data_store_spec.rb +7 -2
- data/spec/integration/knife/cookbook_upload_spec.rb +10 -0
- data/spec/integration/knife/deps_spec.rb +11 -0
- data/spec/integration/knife/upload_spec.rb +115 -14
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +7 -4
- data/spec/unit/knife/cookbook_upload_spec.rb +79 -18
- data/spec/unit/mixin/openssl_helper_spec.rb +42 -0
- data/spec/unit/provider/cron_spec.rb +127 -0
- data/spec/unit/provider/user/aix_spec.rb +2 -2
- metadata +8 -6
@@ -109,30 +109,41 @@ class Chef
|
|
109
109
|
property :ca_key_pass, String,
|
110
110
|
description: "The passphrase for CA private key's passphrase."
|
111
111
|
|
112
|
+
property :renew_before_expiry, Integer,
|
113
|
+
description: "The number of days before the expiry. The certificate will be automaticaly renewed when the value is reached.",
|
114
|
+
introduced: "15.7"
|
115
|
+
|
112
116
|
action :create do
|
113
117
|
description "Generate a certificate"
|
114
118
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
119
|
+
file new_resource.path do
|
120
|
+
action :create_if_missing
|
121
|
+
owner new_resource.owner unless new_resource.owner.nil?
|
122
|
+
group new_resource.group unless new_resource.group.nil?
|
123
|
+
mode new_resource.mode unless new_resource.mode.nil?
|
124
|
+
sensitive true
|
125
|
+
content cert.to_pem
|
126
|
+
end
|
127
|
+
|
128
|
+
if !new_resource.renew_before_expiry.nil? && cert_need_renewall?(new_resource.path, new_resource.renew_before_expiry)
|
129
|
+
file new_resource.path do
|
130
|
+
action :create
|
131
|
+
owner new_resource.owner unless new_resource.owner.nil?
|
132
|
+
group new_resource.group unless new_resource.group.nil?
|
133
|
+
mode new_resource.mode unless new_resource.mode.nil?
|
134
|
+
sensitive true
|
135
|
+
content cert.to_pem
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
if new_resource.csr_file.nil?
|
140
|
+
file new_resource.key_file do
|
141
|
+
action :create_if_missing
|
142
|
+
owner new_resource.owner unless new_resource.owner.nil?
|
143
|
+
group new_resource.group unless new_resource.group.nil?
|
144
|
+
mode new_resource.mode unless new_resource.mode.nil?
|
145
|
+
sensitive true
|
146
|
+
content key.to_pem
|
136
147
|
end
|
137
148
|
end
|
138
149
|
end
|
data/lib/chef/resource/sudo.rb
CHANGED
@@ -158,19 +158,20 @@ class Chef
|
|
158
158
|
declare_resource(:directory, target) unless ::File.exist?(target)
|
159
159
|
|
160
160
|
Chef::Log.warn("#{new_resource.filename} will be rendered, but will not take effect because the #{new_resource.config_prefix}/sudoers config lacks the includedir directive that loads configs from #{new_resource.config_prefix}/sudoers.d/!") if ::File.readlines("#{new_resource.config_prefix}/sudoers").grep(/includedir/).empty?
|
161
|
+
file_path = "#{target}#{new_resource.filename}"
|
161
162
|
|
162
163
|
if new_resource.template
|
163
164
|
logger.trace("Template property provided, all other properties ignored.")
|
164
165
|
|
165
|
-
declare_resource(:template,
|
166
|
+
declare_resource(:template, file_path) do
|
166
167
|
source new_resource.template
|
167
168
|
mode "0440"
|
168
169
|
variables new_resource.variables
|
169
|
-
verify
|
170
|
+
verify visudo_content(file_path) if visudo_present?
|
170
171
|
action :create
|
171
172
|
end
|
172
173
|
else
|
173
|
-
declare_resource(:template,
|
174
|
+
declare_resource(:template, file_path) do
|
174
175
|
source ::File.expand_path("../support/sudoer.erb", __FILE__)
|
175
176
|
local true
|
176
177
|
mode "0440"
|
@@ -185,7 +186,7 @@ class Chef
|
|
185
186
|
setenv: new_resource.setenv,
|
186
187
|
env_keep_add: new_resource.env_keep_add,
|
187
188
|
env_keep_subtract: new_resource.env_keep_subtract
|
188
|
-
verify
|
189
|
+
verify visudo_content(file_path) if visudo_present?
|
189
190
|
action :create
|
190
191
|
end
|
191
192
|
end
|
@@ -225,6 +226,14 @@ class Chef
|
|
225
226
|
|
226
227
|
Chef::Log.warn("The visudo binary cannot be found at '#{new_resource.visudo_binary}'. Skipping sudoer file validation. If visudo is on this system you can specify the path using the 'visudo_binary' property.")
|
227
228
|
end
|
229
|
+
|
230
|
+
def visudo_content(path)
|
231
|
+
if ::File.exists?(path)
|
232
|
+
"cat #{new_resource.config_prefix}/sudoers | #{new_resource.visudo_binary} -cf - && #{new_resource.visudo_binary} -cf %{path}"
|
233
|
+
else
|
234
|
+
"cat #{new_resource.config_prefix}/sudoers %{path} | #{new_resource.visudo_binary} -cf -"
|
235
|
+
end
|
236
|
+
end
|
228
237
|
end
|
229
238
|
end
|
230
239
|
end
|
data/lib/chef/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright:: Copyright 2010-
|
1
|
+
# Copyright:: Copyright 2010-2020, Chef Software Inc.
|
2
2
|
# License:: Apache License, Version 2.0
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -23,7 +23,7 @@ require_relative "version_string"
|
|
23
23
|
|
24
24
|
class Chef
|
25
25
|
CHEF_ROOT = File.expand_path("../..", __FILE__)
|
26
|
-
VERSION = Chef::VersionString.new("15.
|
26
|
+
VERSION = Chef::VersionString.new("15.7.30")
|
27
27
|
end
|
28
28
|
|
29
29
|
#
|
data/lib/chef/version_string.rb
CHANGED
@@ -13,131 +13,8 @@
|
|
13
13
|
# See the License for the specific language governing permissions and
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
|
-
|
17
|
-
# String-like object for version strings.
|
18
|
-
#
|
19
|
-
# @since 13.2
|
20
|
-
# @api internal
|
21
|
-
class VersionString < String
|
22
|
-
# Parsed version object for the string.
|
23
|
-
# @return [Gem::Version]
|
24
|
-
attr_reader :parsed_version
|
25
|
-
|
26
|
-
# Create a new VersionString from an input String.
|
27
|
-
#
|
28
|
-
# @param val [String] Version string to parse.
|
29
|
-
def initialize(val)
|
30
|
-
super
|
31
|
-
@parsed_version = ::Gem::Version.create(self)
|
32
|
-
end
|
33
|
-
|
34
|
-
# @!group Compat wrappers for String
|
35
|
-
|
36
|
-
# Compat wrapper for + to behave like a normal String.
|
37
|
-
#
|
38
|
-
# @param other [String]
|
39
|
-
# @return [String]
|
40
|
-
def +(other)
|
41
|
-
to_s + other
|
42
|
-
end
|
43
|
-
|
44
|
-
# Compat wrapper for * to behave like a normal String.
|
45
|
-
#
|
46
|
-
# @param other [Integer]
|
47
|
-
# @return [String]
|
48
|
-
def *(other)
|
49
|
-
to_s * other
|
50
|
-
end
|
51
|
-
|
52
|
-
# @!group Comparison operators
|
53
|
-
|
54
|
-
# Compare a VersionString to an object. If compared to another VersionString
|
55
|
-
# then sort like `Gem::Version`, otherwise try to treat the other object as
|
56
|
-
# a version but fall back to normal string comparison.
|
57
|
-
#
|
58
|
-
# @param other [Object]
|
59
|
-
# @return [Integer]
|
60
|
-
def <=>(other)
|
61
|
-
other_ver = case other
|
62
|
-
when VersionString
|
63
|
-
other.parsed_version
|
64
|
-
else
|
65
|
-
begin
|
66
|
-
Gem::Version.create(other.to_s)
|
67
|
-
rescue ArgumentError
|
68
|
-
# Comparing to a string that isn't a version.
|
69
|
-
return super
|
70
|
-
end
|
71
|
-
end
|
72
|
-
parsed_version <=> other_ver
|
73
|
-
end
|
74
|
-
|
75
|
-
# Compat wrapper for == based on <=>.
|
76
|
-
#
|
77
|
-
# @param other [Object]
|
78
|
-
# @return [Boolean]
|
79
|
-
def ==(other)
|
80
|
-
(self <=> other) == 0
|
81
|
-
end
|
16
|
+
require "chef-utils/version_string"
|
82
17
|
|
83
|
-
|
84
|
-
|
85
|
-
# @param other [Object]
|
86
|
-
# @return [Boolean]
|
87
|
-
def !=(other)
|
88
|
-
(self <=> other) != 0
|
89
|
-
end
|
90
|
-
|
91
|
-
# Compat wrapper for < based on <=>.
|
92
|
-
#
|
93
|
-
# @param other [Object]
|
94
|
-
# @return [Boolean]
|
95
|
-
def <(other)
|
96
|
-
(self <=> other) < 0
|
97
|
-
end
|
98
|
-
|
99
|
-
# Compat wrapper for <= based on <=>.
|
100
|
-
#
|
101
|
-
# @param other [Object]
|
102
|
-
# @return [Boolean]
|
103
|
-
def <=(other)
|
104
|
-
(self <=> other) < 1
|
105
|
-
end
|
106
|
-
|
107
|
-
# Compat wrapper for > based on <=>.
|
108
|
-
#
|
109
|
-
# @param other [Object]
|
110
|
-
# @return [Boolean]
|
111
|
-
def >(other)
|
112
|
-
(self <=> other) > 0
|
113
|
-
end
|
114
|
-
|
115
|
-
# Compat wrapper for >= based on <=>.
|
116
|
-
#
|
117
|
-
# @param other [Object]
|
118
|
-
# @return [Boolean]
|
119
|
-
def >=(other)
|
120
|
-
(self <=> other) > -1
|
121
|
-
end
|
122
|
-
|
123
|
-
# @!group Matching operators
|
124
|
-
|
125
|
-
# Matching operator to support checking against a requirement string.
|
126
|
-
#
|
127
|
-
# @param other [Regexp, String]
|
128
|
-
# @return [Boolean]
|
129
|
-
# @example Match against a Regexp
|
130
|
-
# Chef::VersionString.new('1.0.0') =~ /^1/
|
131
|
-
# @example Match against a requirement
|
132
|
-
# Chef::VersionString.new('1.0.0') =~ '~> 1.0'
|
133
|
-
def =~(other)
|
134
|
-
case other
|
135
|
-
when Regexp
|
136
|
-
super
|
137
|
-
else
|
138
|
-
Gem::Requirement.create(other) =~ parsed_version
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
18
|
+
class Chef
|
19
|
+
VersionString = ChefUtils::VersionString
|
143
20
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "apache2",
|
3
|
+
"description": "",
|
4
|
+
"long_description": "",
|
5
|
+
"maintainer": "",
|
6
|
+
"maintainer_email": "",
|
7
|
+
"license": "All rights reserved",
|
8
|
+
"platforms": {
|
9
|
+
|
10
|
+
},
|
11
|
+
"dependencies": {
|
12
|
+
|
13
|
+
},
|
14
|
+
"providing": {
|
15
|
+
|
16
|
+
},
|
17
|
+
"recipes": {
|
18
|
+
|
19
|
+
},
|
20
|
+
"version": "0.0.1",
|
21
|
+
"source_url": "",
|
22
|
+
"issues_url": "",
|
23
|
+
"privacy": false,
|
24
|
+
"chef_versions": [
|
25
|
+
|
26
|
+
],
|
27
|
+
"ohai_versions": [
|
28
|
+
|
29
|
+
],
|
30
|
+
"gems": [
|
31
|
+
|
32
|
+
]
|
33
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "java",
|
3
|
+
"description": "",
|
4
|
+
"long_description": "",
|
5
|
+
"maintainer": "",
|
6
|
+
"maintainer_email": "",
|
7
|
+
"license": "All rights reserved",
|
8
|
+
"platforms": {
|
9
|
+
|
10
|
+
},
|
11
|
+
"dependencies": {
|
12
|
+
|
13
|
+
},
|
14
|
+
"providing": {
|
15
|
+
|
16
|
+
},
|
17
|
+
"recipes": {
|
18
|
+
|
19
|
+
},
|
20
|
+
"version": "0.0.1",
|
21
|
+
"source_url": "",
|
22
|
+
"issues_url": "",
|
23
|
+
"privacy": false,
|
24
|
+
"chef_versions": [
|
25
|
+
|
26
|
+
],
|
27
|
+
"ohai_versions": [
|
28
|
+
|
29
|
+
],
|
30
|
+
"gems": [
|
31
|
+
|
32
|
+
]
|
33
|
+
}
|
@@ -49,7 +49,7 @@ describe Chef::EventLoggers::WindowsEventLogger, :windows_only do
|
|
49
49
|
logger.run_start(version, run_status)
|
50
50
|
|
51
51
|
expect(event_log.read(flags, offset).any? do |e|
|
52
|
-
e.source == Chef::Dist::
|
52
|
+
e.source == Chef::Dist::SHORT && e.event_id == 10000 &&
|
53
53
|
e.string_inserts[0].include?(version)
|
54
54
|
end ).to be_truthy
|
55
55
|
end
|
@@ -58,7 +58,7 @@ describe Chef::EventLoggers::WindowsEventLogger, :windows_only do
|
|
58
58
|
logger.run_started(run_status)
|
59
59
|
|
60
60
|
expect(event_log.read(flags, offset).any? do |e|
|
61
|
-
e.source == Chef::Dist::
|
61
|
+
e.source == Chef::Dist::SHORT && e.event_id == 10001 &&
|
62
62
|
e.string_inserts[0].include?(run_id)
|
63
63
|
end ).to be_truthy
|
64
64
|
end
|
@@ -68,7 +68,7 @@ describe Chef::EventLoggers::WindowsEventLogger, :windows_only do
|
|
68
68
|
logger.run_completed(node)
|
69
69
|
|
70
70
|
expect(event_log.read(flags, offset).any? do |e|
|
71
|
-
e.source == Chef::Dist::
|
71
|
+
e.source == Chef::Dist::SHORT && e.event_id == 10002 &&
|
72
72
|
e.string_inserts[0].include?(run_id) &&
|
73
73
|
e.string_inserts[1].include?(elapsed_time.to_s)
|
74
74
|
end).to be_truthy
|
@@ -79,7 +79,7 @@ describe Chef::EventLoggers::WindowsEventLogger, :windows_only do
|
|
79
79
|
logger.run_failed(mock_exception)
|
80
80
|
|
81
81
|
expect(event_log.read(flags, offset).any? do |e|
|
82
|
-
e.source == Chef::Dist::
|
82
|
+
e.source == Chef::Dist::SHORT && e.event_id == 10003 &&
|
83
83
|
e.string_inserts[0].include?(run_id) &&
|
84
84
|
e.string_inserts[1].include?(elapsed_time.to_s) &&
|
85
85
|
e.string_inserts[2].include?(mock_exception.class.name) &&
|
@@ -93,7 +93,7 @@ describe Chef::EventLoggers::WindowsEventLogger, :windows_only do
|
|
93
93
|
logger.run_failed(mock_exception)
|
94
94
|
|
95
95
|
expect(event_log.read(flags, offset).any? do |e|
|
96
|
-
e.source == Chef::Dist::
|
96
|
+
e.source == Chef::Dist::SHORT && e.event_id == 10003 &&
|
97
97
|
e.string_inserts[0].include?("UNKNOWN") &&
|
98
98
|
e.string_inserts[1].include?("UNKNOWN") &&
|
99
99
|
e.string_inserts[2].include?(mock_exception.class.name) &&
|
@@ -54,6 +54,7 @@ describe "ChefFSDataStore tests", :workstation do
|
|
54
54
|
|
55
55
|
context "GET /TYPE" do
|
56
56
|
it "knife list -z -R returns everything" do
|
57
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
57
58
|
knife("list -z -Rfp /").should_succeed <<~EOM
|
58
59
|
/acls/
|
59
60
|
/acls/clients/
|
@@ -118,6 +119,7 @@ describe "ChefFSDataStore tests", :workstation do
|
|
118
119
|
end
|
119
120
|
|
120
121
|
it "knife delete -z -r /cookbooks/x works" do
|
122
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(3).times
|
121
123
|
knife("delete -z -r /cookbooks/x").should_succeed "Deleted /cookbooks/x\n"
|
122
124
|
knife("list -z -Rfp /cookbooks").should_succeed ""
|
123
125
|
end
|
@@ -155,6 +157,7 @@ describe "ChefFSDataStore tests", :workstation do
|
|
155
157
|
end
|
156
158
|
|
157
159
|
it "knife show -z /cookbooks/x/metadata.rb works" do
|
160
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
|
158
161
|
knife("show -z /cookbooks/x/metadata.rb").should_succeed "/cookbooks/x/metadata.rb:\n#{cookbook_x_100_metadata_rb}\n"
|
159
162
|
end
|
160
163
|
|
@@ -190,11 +193,12 @@ describe "ChefFSDataStore tests", :workstation do
|
|
190
193
|
end
|
191
194
|
|
192
195
|
it "knife cookbook upload works" do
|
196
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
|
193
197
|
knife("cookbook upload -z --cookbook-path #{path_to("cookbooks_to_upload")} x").should_succeed stderr: <<~EOM
|
194
198
|
Uploading x [1.0.0]
|
195
199
|
Uploaded 1 cookbook.
|
196
200
|
EOM
|
197
|
-
knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/x/\n/cookbooks/x/metadata.rb\n"
|
201
|
+
knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/x/\n/cookbooks/x/metadata.json\n/cookbooks/x/metadata.rb\n"
|
198
202
|
end
|
199
203
|
|
200
204
|
it "knife raw -z -i empty.json -m PUT /data/x/y" do
|
@@ -251,7 +255,7 @@ describe "ChefFSDataStore tests", :workstation do
|
|
251
255
|
Uploading z [1.0.0]
|
252
256
|
Uploaded 1 cookbook.
|
253
257
|
EOM
|
254
|
-
knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/z/\n/cookbooks/z/metadata.rb\n"
|
258
|
+
knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/z/\n/cookbooks/z/metadata.json\n/cookbooks/z/metadata.rb\n"
|
255
259
|
end
|
256
260
|
|
257
261
|
it "knife raw -z -i empty.json -m POST /data" do
|
@@ -442,6 +446,7 @@ describe "ChefFSDataStore tests", :workstation do
|
|
442
446
|
|
443
447
|
context "GET /TYPE" do
|
444
448
|
it "knife list -z -R returns everything" do
|
449
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
|
445
450
|
knife("list -z -Rfp /").should_succeed <<~EOM
|
446
451
|
/clients/
|
447
452
|
/clients/x.json
|
@@ -86,5 +86,15 @@ describe "knife cookbook upload", :workstation do
|
|
86
86
|
EOM
|
87
87
|
end
|
88
88
|
end
|
89
|
+
|
90
|
+
when_the_repository "has cookbook metadata without name attribute in metadata file" do
|
91
|
+
before do
|
92
|
+
file "cookbooks/x/metadata.rb", cb_metadata(nil, "1.0.0")
|
93
|
+
end
|
94
|
+
|
95
|
+
it "knife cookbook upload x " do
|
96
|
+
expect { knife("cookbook upload x -o #{cb_dir}") }.to raise_error(Chef::Exceptions::MetadataNotValid)
|
97
|
+
end
|
98
|
+
end
|
89
99
|
end
|
90
100
|
end
|
@@ -41,6 +41,7 @@ describe "knife deps", :workstation do
|
|
41
41
|
file "cookbooks/soup/recipes/chicken.rb", ""
|
42
42
|
end
|
43
43
|
it "knife deps reports all dependencies" do
|
44
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
44
45
|
knife("deps /roles/starring.json").should_succeed <<~EOM
|
45
46
|
/roles/minor.json
|
46
47
|
/cookbooks/quiche
|
@@ -60,6 +61,7 @@ describe "knife deps", :workstation do
|
|
60
61
|
file "cookbooks/soup/recipes/chicken.rb", ""
|
61
62
|
end
|
62
63
|
it "knife deps reports all dependencies" do
|
64
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
63
65
|
knife("deps /roles/starring.json").should_succeed <<~EOM
|
64
66
|
/roles/minor.json
|
65
67
|
/cookbooks/quiche
|
@@ -94,6 +96,7 @@ describe "knife deps", :workstation do
|
|
94
96
|
file "nodes/mort.json", { "run_list" => %w{role[minor] recipe[quiche] recipe[soup::chicken]} }
|
95
97
|
end
|
96
98
|
it "knife deps reports just the node" do
|
99
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
97
100
|
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
98
101
|
/roles/minor.json
|
99
102
|
/cookbooks/quiche
|
@@ -108,6 +111,7 @@ describe "knife deps", :workstation do
|
|
108
111
|
file "cookbooks/quiche/recipes/default.rb", ""
|
109
112
|
end
|
110
113
|
it "knife deps reports just the cookbook" do
|
114
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).once
|
111
115
|
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/quiche\n"
|
112
116
|
end
|
113
117
|
end
|
@@ -119,6 +123,7 @@ depends "kettle"'
|
|
119
123
|
file "cookbooks/quiche/recipes/default.rb", ""
|
120
124
|
end
|
121
125
|
it "knife deps reports just the cookbook" do
|
126
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
122
127
|
knife("deps /cookbooks/quiche").should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
|
123
128
|
end
|
124
129
|
end
|
@@ -148,6 +153,7 @@ depends "kettle"'
|
|
148
153
|
end
|
149
154
|
|
150
155
|
it "knife deps reports all dependencies" do
|
156
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
151
157
|
knife("deps /nodes/mort.json").should_succeed <<~EOM
|
152
158
|
/environments/desert.json
|
153
159
|
/roles/minor.json
|
@@ -158,6 +164,7 @@ depends "kettle"'
|
|
158
164
|
EOM
|
159
165
|
end
|
160
166
|
it "knife deps * reports all dependencies of all things" do
|
167
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
161
168
|
knife("deps /nodes/*").should_succeed <<~EOM
|
162
169
|
/roles/minor.json
|
163
170
|
/nodes/bart.json
|
@@ -169,6 +176,7 @@ depends "kettle"'
|
|
169
176
|
EOM
|
170
177
|
end
|
171
178
|
it "knife deps a b reports all dependencies of a and b" do
|
179
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
172
180
|
knife("deps /nodes/bart.json /nodes/mort.json").should_succeed <<~EOM
|
173
181
|
/roles/minor.json
|
174
182
|
/nodes/bart.json
|
@@ -180,6 +188,7 @@ depends "kettle"'
|
|
180
188
|
EOM
|
181
189
|
end
|
182
190
|
it "knife deps --tree /* shows dependencies in a tree" do
|
191
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).twice
|
183
192
|
knife("deps --tree /nodes/*").should_succeed <<~EOM
|
184
193
|
/nodes/bart.json
|
185
194
|
/roles/minor.json
|
@@ -214,11 +223,13 @@ depends "foo"'
|
|
214
223
|
end
|
215
224
|
|
216
225
|
it "knife deps prints each once" do
|
226
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(3).times
|
217
227
|
knife("deps /cookbooks/foo").should_succeed(
|
218
228
|
stdout: "/cookbooks/baz\n/cookbooks/bar\n/cookbooks/foo\n"
|
219
229
|
)
|
220
230
|
end
|
221
231
|
it "knife deps --tree prints each once" do
|
232
|
+
expect(Chef::Log).to receive(:warn).with(/load method is deprecated. Use load! instead/).at_least(3).times
|
222
233
|
knife("deps --tree /cookbooks/foo").should_succeed(
|
223
234
|
stdout: "/cookbooks/foo\n /cookbooks/bar\n /cookbooks/baz\n /cookbooks/foo\n"
|
224
235
|
)
|