chef-utils 15.7.32 → 15.8.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chef-utils.rb +10 -3
- data/lib/chef-utils/dsl/cloud.rb +134 -0
- data/lib/chef-utils/dsl/introspection.rb +13 -1
- data/lib/chef-utils/dsl/platform.rb +79 -62
- data/lib/chef-utils/dsl/platform_family.rb +10 -5
- data/lib/chef-utils/dsl/platform_version.rb +40 -0
- data/lib/chef-utils/dsl/service.rb +9 -0
- data/lib/chef-utils/dsl/virtualization.rb +249 -0
- data/lib/chef-utils/dsl/windows.rb +22 -0
- data/lib/chef-utils/version.rb +1 -1
- data/lib/chef-utils/version_string.rb +6 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/unit/dsl/cloud_spec.rb +82 -0
- data/spec/unit/dsl/introspection_spec.rb +20 -1
- data/spec/unit/dsl/virtualization_spec.rb +74 -0
- data/spec/unit/dsl/windows_spec.rb +31 -11
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a28aa5def36bdd887baa21fa1bc954e013f2d96f0085a2394f7795d197c179d
|
4
|
+
data.tar.gz: 5fbdffc12d92275196fa30009a69409354a7a5a8e31b9c4ff7765383d6cec864
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27c83bfaddf110597458e442a50d7053c6a0487f0ef006a126857c2e34e074846e64781130e4e6dc3357236481e618543920d2266ea25d44a175da00f40a3982
|
7
|
+
data.tar.gz: b7dd58c04744d9318cfc7c23d55cef5089563b8b4501a5718d344ff2c7d84fe14d00368714ba7fe2efca36ab04a64bc586d4a0e11b4e7636e890db58703db8f7
|
data/lib/chef-utils.rb
CHANGED
@@ -16,24 +16,31 @@
|
|
16
16
|
#
|
17
17
|
|
18
18
|
require_relative "chef-utils/dsl/architecture"
|
19
|
+
require_relative "chef-utils/dsl/cloud"
|
19
20
|
require_relative "chef-utils/dsl/introspection"
|
20
21
|
require_relative "chef-utils/dsl/os"
|
21
22
|
require_relative "chef-utils/dsl/path_sanity"
|
22
23
|
require_relative "chef-utils/dsl/platform"
|
23
24
|
require_relative "chef-utils/dsl/platform_family"
|
25
|
+
require_relative "chef-utils/dsl/platform_version"
|
24
26
|
require_relative "chef-utils/dsl/service"
|
25
27
|
require_relative "chef-utils/dsl/train_helpers"
|
28
|
+
require_relative "chef-utils/dsl/virtualization"
|
26
29
|
require_relative "chef-utils/dsl/which"
|
27
30
|
require_relative "chef-utils/dsl/windows"
|
28
31
|
require_relative "chef-utils/mash"
|
29
32
|
|
30
|
-
# This is the Chef Infra Client DSL, not
|
33
|
+
# This is the Chef Infra Client DSL, not everything needs to go in here
|
31
34
|
module ChefUtils
|
32
35
|
include ChefUtils::DSL::Architecture
|
36
|
+
include ChefUtils::DSL::Cloud
|
37
|
+
include ChefUtils::DSL::Introspection
|
33
38
|
include ChefUtils::DSL::OS
|
34
|
-
include ChefUtils::DSL::PlatformFamily
|
35
39
|
include ChefUtils::DSL::Platform
|
36
|
-
include ChefUtils::DSL::
|
40
|
+
include ChefUtils::DSL::PlatformFamily
|
41
|
+
include ChefUtils::DSL::PlatformVersion
|
42
|
+
include ChefUtils::DSL::TrainHelpers
|
43
|
+
include ChefUtils::DSL::Virtualization
|
37
44
|
include ChefUtils::DSL::Windows
|
38
45
|
# FIXME: include ChefUtils::DSL::Which in Chef 16.0
|
39
46
|
# FIXME: include ChefUtils::DSL::PathSanity in Chef 16.0
|
@@ -0,0 +1,134 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018-2020, 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_relative "../internal"
|
19
|
+
|
20
|
+
module ChefUtils
|
21
|
+
module DSL
|
22
|
+
module Cloud
|
23
|
+
include Internal
|
24
|
+
|
25
|
+
# Determine if the current node is "in the cloud".
|
26
|
+
#
|
27
|
+
# @param [Chef::Node] node
|
28
|
+
#
|
29
|
+
# @return [Boolean]
|
30
|
+
#
|
31
|
+
def cloud?(node = __getnode)
|
32
|
+
node.key?("cloud")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Return true if the current current node is in EC2
|
36
|
+
#
|
37
|
+
# @param [Chef::Node] node
|
38
|
+
#
|
39
|
+
# @return [Boolean]
|
40
|
+
#
|
41
|
+
def ec2?(node = __getnode)
|
42
|
+
node.key?("ec2")
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return true if the current current node is in GCE
|
46
|
+
#
|
47
|
+
# @param [Chef::Node] node
|
48
|
+
#
|
49
|
+
# @return [Boolean]
|
50
|
+
#
|
51
|
+
def gce?(node = __getnode)
|
52
|
+
node.key?("gce")
|
53
|
+
end
|
54
|
+
|
55
|
+
# Return true if the current current node is in Rackspace
|
56
|
+
#
|
57
|
+
# @param [Chef::Node] node
|
58
|
+
#
|
59
|
+
# @return [Boolean]
|
60
|
+
#
|
61
|
+
def rackspace?(node = __getnode)
|
62
|
+
node.key?("rackspace")
|
63
|
+
end
|
64
|
+
|
65
|
+
# Return true if the current current node is in Eucalyptus
|
66
|
+
#
|
67
|
+
# @param [Chef::Node] node
|
68
|
+
#
|
69
|
+
# @return [Boolean]
|
70
|
+
#
|
71
|
+
def eucalyptus?(node = __getnode)
|
72
|
+
node.key?("eucalyptus")
|
73
|
+
end
|
74
|
+
# chef-sugar backcompat method
|
75
|
+
alias_method :euca?, :eucalyptus?
|
76
|
+
|
77
|
+
# Return true if the current current node is in Linode
|
78
|
+
#
|
79
|
+
# @param [Chef::Node] node
|
80
|
+
#
|
81
|
+
# @return [Boolean]
|
82
|
+
#
|
83
|
+
def linode?(node = __getnode)
|
84
|
+
node.key?("linode")
|
85
|
+
end
|
86
|
+
|
87
|
+
# Return true if the current current node is in Openstack
|
88
|
+
#
|
89
|
+
# @param [Chef::Node] node
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
#
|
93
|
+
def openstack?(node = __getnode)
|
94
|
+
node.key?("openstack")
|
95
|
+
end
|
96
|
+
|
97
|
+
# Return true if the current current node is in Azure
|
98
|
+
#
|
99
|
+
# @param [Chef::Node] node
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
#
|
103
|
+
def azure?(node = __getnode)
|
104
|
+
node.key?("azure")
|
105
|
+
end
|
106
|
+
|
107
|
+
# Return true if the current current node is in DigitalOcean
|
108
|
+
#
|
109
|
+
# @param [Chef::Node] node
|
110
|
+
# the node to check
|
111
|
+
#
|
112
|
+
# @return [Boolean]
|
113
|
+
#
|
114
|
+
def digital_ocean?(node = __getnode)
|
115
|
+
node.key?("digital_ocean")
|
116
|
+
end
|
117
|
+
# chef-sugar backcompat method
|
118
|
+
alias_method :digitalocean?, :digital_ocean?
|
119
|
+
|
120
|
+
# Return true if the current current node is in SoftLayer
|
121
|
+
#
|
122
|
+
# @param [Chef::Node] node
|
123
|
+
# the node to check
|
124
|
+
#
|
125
|
+
# @return [Boolean]
|
126
|
+
#
|
127
|
+
def softlayer?(node = __getnode)
|
128
|
+
node.key?("softlayer")
|
129
|
+
end
|
130
|
+
|
131
|
+
extend self
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright 2018-
|
2
|
+
# Copyright:: Copyright 2018-2020, Chef Software Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -97,6 +97,18 @@ module ChefUtils
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
+
# Determine if the current node includes the given recipe name.
|
101
|
+
#
|
102
|
+
# @param [String] recipe_name
|
103
|
+
#
|
104
|
+
# @return [Boolean]
|
105
|
+
#
|
106
|
+
def includes_recipe?(recipe_name, node = __getnode)
|
107
|
+
node.recipe?(recipe_name)
|
108
|
+
end
|
109
|
+
# chef-sugar backcompat method
|
110
|
+
alias_method :include_recipe?, :includes_recipe?
|
111
|
+
|
100
112
|
extend self
|
101
113
|
end
|
102
114
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright 2018-
|
2
|
+
# Copyright:: Copyright 2018-2020, Chef Software Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -33,37 +33,41 @@ module ChefUtils
|
|
33
33
|
#
|
34
34
|
# @return [Boolean]
|
35
35
|
#
|
36
|
-
def
|
36
|
+
def linuxmint_platform?(node = __getnode)
|
37
37
|
node["platform"] == "linuxmint"
|
38
38
|
end
|
39
|
-
# chef-sugar backcompat
|
40
|
-
alias_method :mint?, :
|
41
|
-
|
42
|
-
alias_method :
|
39
|
+
# chef-sugar backcompat method
|
40
|
+
alias_method :mint?, :linuxmint_platform?
|
41
|
+
# chef-sugar backcompat method
|
42
|
+
alias_method :linux_mint?, :linuxmint_platform?
|
43
|
+
# chef-sugar backcompat method
|
44
|
+
alias_method :linuxmint?, :linuxmint_platform?
|
43
45
|
|
44
|
-
# Determine if the current node is
|
46
|
+
# Determine if the current node is Ubuntu.
|
45
47
|
#
|
46
48
|
# @param [Chef::Node] node
|
47
49
|
#
|
48
50
|
# @return [Boolean]
|
49
51
|
#
|
50
|
-
def
|
52
|
+
def ubuntu_platform?(node = __getnode)
|
51
53
|
node["platform"] == "ubuntu"
|
52
54
|
end
|
53
|
-
|
55
|
+
# chef-sugar backcompat method
|
56
|
+
alias_method :ubuntu?, :ubuntu_platform?
|
54
57
|
|
55
|
-
# Determine if the current node is
|
58
|
+
# Determine if the current node is Raspbian.
|
56
59
|
#
|
57
60
|
# @param [Chef::Node] node
|
58
61
|
#
|
59
62
|
# @return [Boolean]
|
60
63
|
#
|
61
|
-
def
|
64
|
+
def raspbian_platform?(node = __getnode)
|
62
65
|
node["platform"] == "raspbian"
|
63
66
|
end
|
64
|
-
|
67
|
+
# chef-sugar backcompat method
|
68
|
+
alias_method :raspbian?, :raspbian_platform?
|
65
69
|
|
66
|
-
# Determine if the current node is
|
70
|
+
# Determine if the current node is Debian.
|
67
71
|
#
|
68
72
|
# @param [Chef::Node] node
|
69
73
|
#
|
@@ -73,7 +77,7 @@ module ChefUtils
|
|
73
77
|
node["platform"] == "debian"
|
74
78
|
end
|
75
79
|
|
76
|
-
# Determine if the current node is
|
80
|
+
# Determine if the current node is Amazon Linux.
|
77
81
|
#
|
78
82
|
# @param [Chef::Node] node
|
79
83
|
#
|
@@ -83,69 +87,75 @@ module ChefUtils
|
|
83
87
|
node["platform"] == "amazon"
|
84
88
|
end
|
85
89
|
|
86
|
-
# Determine if the current node is
|
90
|
+
# Determine if the current node is Red Hat Enterprise Linux.
|
87
91
|
#
|
88
92
|
# @param [Chef::Node] node
|
89
93
|
#
|
90
94
|
# @return [Boolean]
|
91
95
|
#
|
92
|
-
def
|
96
|
+
def redhat_platform?(node = __getnode)
|
93
97
|
node["platform"] == "redhat"
|
94
98
|
end
|
95
|
-
# chef-sugar backcompat
|
96
|
-
alias_method :redhat_enterprise?, :
|
97
|
-
|
98
|
-
alias_method :
|
99
|
+
# chef-sugar backcompat method
|
100
|
+
alias_method :redhat_enterprise?, :redhat_platform?
|
101
|
+
# chef-sugar backcompat method
|
102
|
+
alias_method :redhat_enterprise_linux?, :redhat_platform?
|
103
|
+
# chef-sugar backcompat method
|
104
|
+
alias_method :redhat?, :redhat_platform?
|
99
105
|
|
100
|
-
# Determine if the current node is
|
106
|
+
# Determine if the current node is CentOS.
|
101
107
|
#
|
102
108
|
# @param [Chef::Node] node
|
103
109
|
#
|
104
110
|
# @return [Boolean]
|
105
111
|
#
|
106
|
-
def
|
112
|
+
def centos_platform?(node = __getnode)
|
107
113
|
node["platform"] == "centos"
|
108
114
|
end
|
109
|
-
|
115
|
+
# chef-sugar backcompat method
|
116
|
+
alias_method :centos?, :centos_platform?
|
110
117
|
|
111
|
-
# Determine if the current node is
|
118
|
+
# Determine if the current node is Oracle Linux.
|
112
119
|
#
|
113
120
|
# @param [Chef::Node] node
|
114
121
|
#
|
115
122
|
# @return [Boolean]
|
116
123
|
#
|
117
|
-
def
|
124
|
+
def oracle_platform?(node = __getnode)
|
118
125
|
node["platform"] == "oracle"
|
119
126
|
end
|
120
|
-
# chef-sugar backcompat
|
121
|
-
alias_method :oracle_linux?, :
|
122
|
-
|
127
|
+
# chef-sugar backcompat method
|
128
|
+
alias_method :oracle_linux?, :oracle_platform?
|
129
|
+
# chef-sugar backcompat method
|
130
|
+
alias_method :oracle?, :oracle_platform?
|
123
131
|
|
124
|
-
# Determine if the current node is
|
132
|
+
# Determine if the current node is Scientific Linux.
|
125
133
|
#
|
126
134
|
# @param [Chef::Node] node
|
127
135
|
#
|
128
136
|
# @return [Boolean]
|
129
137
|
#
|
130
|
-
def
|
138
|
+
def scientific_platform?(node = __getnode)
|
131
139
|
node["platform"] == "scientific"
|
132
140
|
end
|
133
|
-
# chef-sugar backcompat
|
134
|
-
alias_method :scientific_linux?, :
|
135
|
-
|
141
|
+
# chef-sugar backcompat method
|
142
|
+
alias_method :scientific_linux?, :scientific_platform?
|
143
|
+
# chef-sugar backcompat method
|
144
|
+
alias_method :scientific?, :scientific_platform?
|
136
145
|
|
137
|
-
# Determine if the current node is
|
146
|
+
# Determine if the current node is ClearOS.
|
138
147
|
#
|
139
148
|
# @param [Chef::Node] node
|
140
149
|
#
|
141
150
|
# @return [Boolean]
|
142
151
|
#
|
143
|
-
def
|
152
|
+
def clearos_platform?(node = __getnode)
|
144
153
|
node["platform"] == "clearos"
|
145
154
|
end
|
146
|
-
|
155
|
+
# chef-sugar backcompat method
|
156
|
+
alias_method :clearos?, :clearos_platform?
|
147
157
|
|
148
|
-
# Determine if the current node is
|
158
|
+
# Determine if the current node is Fedora.
|
149
159
|
#
|
150
160
|
# @param [Chef::Node] node
|
151
161
|
#
|
@@ -155,7 +165,7 @@ module ChefUtils
|
|
155
165
|
node["platform"] == "fedora"
|
156
166
|
end
|
157
167
|
|
158
|
-
# Determine if the current node is
|
168
|
+
# Determine if the current node is Arch Linux
|
159
169
|
#
|
160
170
|
# @param [Chef::Node] node
|
161
171
|
#
|
@@ -165,7 +175,7 @@ module ChefUtils
|
|
165
175
|
node["platform"] == "arch"
|
166
176
|
end
|
167
177
|
|
168
|
-
# Determine if the current node is
|
178
|
+
# Determine if the current node is Solaris2.
|
169
179
|
#
|
170
180
|
# @param [Chef::Node] node
|
171
181
|
#
|
@@ -175,7 +185,7 @@ module ChefUtils
|
|
175
185
|
node["platform"] == "solaris2"
|
176
186
|
end
|
177
187
|
|
178
|
-
# Determine if the current node is
|
188
|
+
# Determine if the current node is SmartOS.
|
179
189
|
#
|
180
190
|
# @param [Chef::Node] node
|
181
191
|
#
|
@@ -185,40 +195,43 @@ module ChefUtils
|
|
185
195
|
node["platform"] == "smartos"
|
186
196
|
end
|
187
197
|
|
188
|
-
# Determine if the current node is
|
198
|
+
# Determine if the current node is OmniOS.
|
189
199
|
#
|
190
200
|
# @param [Chef::Node] node
|
191
201
|
#
|
192
202
|
# @return [Boolean]
|
193
203
|
#
|
194
|
-
def
|
204
|
+
def omnios_platform?(node = __getnode)
|
195
205
|
node["platform"] == "omnios"
|
196
206
|
end
|
197
|
-
|
207
|
+
# chef-sugar backcompat method
|
208
|
+
alias_method :omnios?, :omnios_platform?
|
198
209
|
|
199
|
-
# Determine if the current node is
|
210
|
+
# Determine if the current node is OpenIndiana.
|
200
211
|
#
|
201
212
|
# @param [Chef::Node] node
|
202
213
|
#
|
203
214
|
# @return [Boolean]
|
204
215
|
#
|
205
|
-
def
|
216
|
+
def openindiana_platform?(node = __getnode)
|
206
217
|
node["platform"] == "openindiana"
|
207
218
|
end
|
208
|
-
|
219
|
+
# chef-sugar backcompat method
|
220
|
+
alias_method :openindiana?, :openindiana_platform?
|
209
221
|
|
210
|
-
# Determine if the current node is
|
222
|
+
# Determine if the current node is Nexenta Core Platform aka Nexenta OS.
|
211
223
|
#
|
212
224
|
# @param [Chef::Node] node
|
213
225
|
#
|
214
226
|
# @return [Boolean]
|
215
227
|
#
|
216
|
-
def
|
228
|
+
def nexentacore_platform?(node = __getnode)
|
217
229
|
node["platform"] == "nexentacore"
|
218
230
|
end
|
219
|
-
|
231
|
+
# chef-sugar backcompat method
|
232
|
+
alias_method :nexentacore?, :nexentacore_platform?
|
220
233
|
|
221
|
-
# Determine if the current node is
|
234
|
+
# Determine if the current node is AIX.
|
222
235
|
#
|
223
236
|
# @param [Chef::Node] node
|
224
237
|
#
|
@@ -228,7 +241,7 @@ module ChefUtils
|
|
228
241
|
node["platform"] == "aix"
|
229
242
|
end
|
230
243
|
|
231
|
-
# Determine if the current node is
|
244
|
+
# Determine if the current node is FreeBSD.
|
232
245
|
#
|
233
246
|
# @param [Chef::Node] node
|
234
247
|
#
|
@@ -238,7 +251,7 @@ module ChefUtils
|
|
238
251
|
node["platform"] == "freebsd"
|
239
252
|
end
|
240
253
|
|
241
|
-
# Determine if the current node is
|
254
|
+
# Determine if the current node is OpenBSD.
|
242
255
|
#
|
243
256
|
# @param [Chef::Node] node
|
244
257
|
#
|
@@ -248,7 +261,7 @@ module ChefUtils
|
|
248
261
|
node["platform"] == "openbsd"
|
249
262
|
end
|
250
263
|
|
251
|
-
# Determine if the current node is
|
264
|
+
# Determine if the current node is NetBSD.
|
252
265
|
#
|
253
266
|
# @param [Chef::Node] node
|
254
267
|
#
|
@@ -258,7 +271,7 @@ module ChefUtils
|
|
258
271
|
node["platform"] == "netbsd"
|
259
272
|
end
|
260
273
|
|
261
|
-
# Determine if the current node is
|
274
|
+
# Determine if the current node is DragonFly BSD.
|
262
275
|
#
|
263
276
|
# @param [Chef::Node] node
|
264
277
|
#
|
@@ -268,7 +281,7 @@ module ChefUtils
|
|
268
281
|
node["platform"] == "dragonfly"
|
269
282
|
end
|
270
283
|
|
271
|
-
# Determine if the current node is
|
284
|
+
# Determine if the current node is macOS.
|
272
285
|
#
|
273
286
|
# @param [Chef::Node] node
|
274
287
|
#
|
@@ -277,9 +290,10 @@ module ChefUtils
|
|
277
290
|
def macos_platform?(node = __getnode)
|
278
291
|
node["platform"] == "mac_os_x"
|
279
292
|
end
|
293
|
+
# chef-sugar backcompat method
|
280
294
|
alias_method :mac_os_x_platform?, :macos_platform?
|
281
295
|
|
282
|
-
# Determine if the current node is
|
296
|
+
# Determine if the current node is Gentoo.
|
283
297
|
#
|
284
298
|
# @param [Chef::Node] node
|
285
299
|
#
|
@@ -289,7 +303,7 @@ module ChefUtils
|
|
289
303
|
node["platform"] == "gentoo"
|
290
304
|
end
|
291
305
|
|
292
|
-
# Determine if the current node is
|
306
|
+
# Determine if the current node is Slackware.
|
293
307
|
#
|
294
308
|
# @param [Chef::Node] node
|
295
309
|
#
|
@@ -309,18 +323,21 @@ module ChefUtils
|
|
309
323
|
node["platform"] == "suse"
|
310
324
|
end
|
311
325
|
|
312
|
-
# Determine if the current node is
|
326
|
+
# Determine if the current node is OpenSUSE.
|
313
327
|
#
|
314
328
|
# @param [Chef::Node] node
|
315
329
|
#
|
316
330
|
# @return [Boolean]
|
317
331
|
#
|
318
|
-
def
|
332
|
+
def opensuse_platform?(node = __getnode)
|
319
333
|
node["platform"] == "opensuse" || node["platform"] == "opensuseleap"
|
320
334
|
end
|
321
|
-
|
322
|
-
alias_method :
|
323
|
-
|
335
|
+
# chef-sugar backcompat method
|
336
|
+
alias_method :opensuse?, :opensuse_platform?
|
337
|
+
# chef-sugar backcompat method
|
338
|
+
alias_method :opensuseleap_platform?, :opensuse_platform?
|
339
|
+
# chef-sugar backcompat method
|
340
|
+
alias_method :leap_platform?, :opensuse_platform?
|
324
341
|
# NOTE: to anyone adding :tumbleweed_platform? - :[opensuse]leap_platform? should be false on tumbleweed, :opensuse[_platform]? should be true
|
325
342
|
|
326
343
|
# Determine if the current node is Windows.
|
@@ -31,7 +31,7 @@ module ChefUtils
|
|
31
31
|
def arch?(node = __getnode)
|
32
32
|
node["platform_family"] == "arch"
|
33
33
|
end
|
34
|
-
# chef-sugar backcompat
|
34
|
+
# chef-sugar backcompat method
|
35
35
|
alias_method :arch_linux?, :arch?
|
36
36
|
|
37
37
|
# Determine if the current node is a member of the 'aix' platform family.
|
@@ -73,8 +73,11 @@ module ChefUtils
|
|
73
73
|
def macos?(node = __getnode)
|
74
74
|
node["platform_family"] == "mac_os_x"
|
75
75
|
end
|
76
|
+
# chef-sugar backcompat method
|
76
77
|
alias_method :osx?, :macos?
|
78
|
+
# chef-sugar backcompat method
|
77
79
|
alias_method :mac?, :macos?
|
80
|
+
# chef-sugar backcompat method
|
78
81
|
alias_method :mac_os_x?, :macos?
|
79
82
|
|
80
83
|
# Determine if the current node is a member of the 'rhel' platform family (Red Hat, CentOS, Oracle or Scientific Linux, but NOT Amazon Linux or Fedora).
|
@@ -86,9 +89,10 @@ module ChefUtils
|
|
86
89
|
def rhel?(node = __getnode)
|
87
90
|
node["platform_family"] == "rhel"
|
88
91
|
end
|
92
|
+
# chef-sugar backcompat method
|
89
93
|
alias_method :el?, :rhel?
|
90
94
|
|
91
|
-
# Determine if the current node is a rhel6 compatible build (Red Hat, CentOS, Oracle or Scientific Linux)
|
95
|
+
# Determine if the current node is a rhel6 compatible build (Red Hat, CentOS, Oracle or Scientific Linux).
|
92
96
|
#
|
93
97
|
# @param [Chef::Node] node
|
94
98
|
#
|
@@ -98,7 +102,7 @@ module ChefUtils
|
|
98
102
|
node["platform_family"] == "rhel" && node["platform_version"].to_f >= 6.0 && node["platform_version"].to_f < 7.0
|
99
103
|
end
|
100
104
|
|
101
|
-
# Determine if the current node is a rhel7 compatible build (Red Hat, CentOS, Oracle or Scientific Linux)
|
105
|
+
# Determine if the current node is a rhel7 compatible build (Red Hat, CentOS, Oracle or Scientific Linux).
|
102
106
|
#
|
103
107
|
# @param [Chef::Node] node
|
104
108
|
#
|
@@ -108,7 +112,7 @@ module ChefUtils
|
|
108
112
|
node["platform_family"] == "rhel" && node["platform_version"].to_f >= 7.0 && node["platform_version"].to_f < 8.0
|
109
113
|
end
|
110
114
|
|
111
|
-
# Determine if the current node is a rhel8 compatible build (Red Hat, CentOS, Oracle or Scientific Linux)
|
115
|
+
# Determine if the current node is a rhel8 compatible build (Red Hat, CentOS, Oracle or Scientific Linux).
|
112
116
|
#
|
113
117
|
# @param [Chef::Node] node
|
114
118
|
#
|
@@ -127,6 +131,7 @@ module ChefUtils
|
|
127
131
|
def amazon?(node = __getnode)
|
128
132
|
node["platform_family"] == "amazon"
|
129
133
|
end
|
134
|
+
# chef-sugar backcompat method
|
130
135
|
alias_method :amazon_linux?, :amazon?
|
131
136
|
|
132
137
|
# Determine if the current node is a member of the 'solaris2' platform family.
|
@@ -138,7 +143,7 @@ module ChefUtils
|
|
138
143
|
def solaris2?(node = __getnode)
|
139
144
|
node["platform_family"] == "solaris2"
|
140
145
|
end
|
141
|
-
# chef-sugar backcompat
|
146
|
+
# chef-sugar backcompat method
|
142
147
|
alias_method :solaris?, :solaris2?
|
143
148
|
|
144
149
|
# Determine if the current node is a member of the 'smartos' platform family.
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018-2020, 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_relative "../internal"
|
19
|
+
|
20
|
+
module ChefUtils
|
21
|
+
module DSL
|
22
|
+
module PlatformVersion
|
23
|
+
include Internal
|
24
|
+
|
25
|
+
# Return the platform_version for the node. Acts like a String
|
26
|
+
# but also provides a mechanism for checking version constraints.
|
27
|
+
#
|
28
|
+
# @param [Chef::Node] node the node to check
|
29
|
+
# @since 15.8
|
30
|
+
#
|
31
|
+
# @return [ChefUtils::VersionString]
|
32
|
+
#
|
33
|
+
def platform_version(node = __getnode)
|
34
|
+
ChefUtils::VersionString.new(node["platform_version"])
|
35
|
+
end
|
36
|
+
|
37
|
+
extend self
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -66,6 +66,15 @@ module ChefUtils
|
|
66
66
|
file_exist?("/sbin/chkconfig")
|
67
67
|
end
|
68
68
|
|
69
|
+
#
|
70
|
+
# Returns if a particular service exists for a particular service init system. Init systems may be :initd, :upstart, :etc_rcd, :xinetd, and :systemd. Example: service_script_exist?(:systemd, 'ntpd')
|
71
|
+
#
|
72
|
+
# @param [Symbol] type The type of init system. :initd, :upstart, :xinetd, :etc_rcd, or :systemd
|
73
|
+
# @param [String] script The name of the service
|
74
|
+
# @since 15.5
|
75
|
+
#
|
76
|
+
# @return [Boolean]
|
77
|
+
#
|
69
78
|
def service_script_exist?(type, script)
|
70
79
|
case type
|
71
80
|
when :initd
|
@@ -0,0 +1,249 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018-2020, 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_relative "../internal"
|
19
|
+
|
20
|
+
module ChefUtils
|
21
|
+
module DSL
|
22
|
+
module Virtualization
|
23
|
+
include Internal
|
24
|
+
|
25
|
+
# Determine if the current node is a KVM guest.
|
26
|
+
#
|
27
|
+
# @param [Chef::Node] node
|
28
|
+
# @since 15.8
|
29
|
+
#
|
30
|
+
# @return [Boolean]
|
31
|
+
#
|
32
|
+
def kvm?(node = __getnode)
|
33
|
+
node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "guest"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Determine if the current node is a KVM host.
|
37
|
+
#
|
38
|
+
# @param [Chef::Node] node
|
39
|
+
# @since 15.8
|
40
|
+
#
|
41
|
+
# @return [Boolean]
|
42
|
+
#
|
43
|
+
def kvm_host?(node = __getnode)
|
44
|
+
node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "host"
|
45
|
+
end
|
46
|
+
|
47
|
+
# Determine if the current node is running in a linux container.
|
48
|
+
#
|
49
|
+
# @param [Chef::Node] node
|
50
|
+
# @since 15.8
|
51
|
+
#
|
52
|
+
# @return [Boolean]
|
53
|
+
#
|
54
|
+
def lxc?(node = __getnode)
|
55
|
+
node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "guest"
|
56
|
+
end
|
57
|
+
|
58
|
+
# Determine if the current node is a linux container host.
|
59
|
+
#
|
60
|
+
# @param [Chef::Node] node
|
61
|
+
# @since 15.8
|
62
|
+
#
|
63
|
+
# @return [Boolean]
|
64
|
+
#
|
65
|
+
def lxc_host?(node = __getnode)
|
66
|
+
node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "host"
|
67
|
+
end
|
68
|
+
|
69
|
+
# Determine if the current node is running under Parallels Desktop.
|
70
|
+
#
|
71
|
+
# @param [Chef::Node] node
|
72
|
+
# @since 15.8
|
73
|
+
#
|
74
|
+
# @return [Boolean]
|
75
|
+
# true if the machine is currently running under Parallels Desktop, false
|
76
|
+
# otherwise
|
77
|
+
#
|
78
|
+
def parallels?(node = __getnode)
|
79
|
+
node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "guest"
|
80
|
+
end
|
81
|
+
|
82
|
+
# Determine if the current node is a Parallels Desktop host.
|
83
|
+
#
|
84
|
+
# @param [Chef::Node] node
|
85
|
+
# @since 15.8
|
86
|
+
#
|
87
|
+
# @return [Boolean]
|
88
|
+
# true if the machine is currently running under Parallels Desktop, false
|
89
|
+
# otherwise
|
90
|
+
#
|
91
|
+
def parallels_host?(node = __getnode)
|
92
|
+
node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "host"
|
93
|
+
end
|
94
|
+
|
95
|
+
# Determine if the current node is a VirtualBox guest.
|
96
|
+
#
|
97
|
+
# @param [Chef::Node] node
|
98
|
+
# @since 15.8
|
99
|
+
#
|
100
|
+
# @return [Boolean]
|
101
|
+
#
|
102
|
+
def vbox?(node = __getnode)
|
103
|
+
node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "guest"
|
104
|
+
end
|
105
|
+
|
106
|
+
# Determine if the current node is a VirtualBox host.
|
107
|
+
#
|
108
|
+
# @param [Chef::Node] node
|
109
|
+
# @since 15.8
|
110
|
+
#
|
111
|
+
# @return [Boolean]
|
112
|
+
#
|
113
|
+
def vbox_host?(node = __getnode)
|
114
|
+
node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "host"
|
115
|
+
end
|
116
|
+
|
117
|
+
# chef-sugar backcompat method
|
118
|
+
alias_method :virtualbox?, :vbox?
|
119
|
+
|
120
|
+
# Determine if the current node is a VMWare guest.
|
121
|
+
#
|
122
|
+
# @param [Chef::Node] node
|
123
|
+
# @since 15.8
|
124
|
+
#
|
125
|
+
# @return [Boolean]
|
126
|
+
#
|
127
|
+
def vmware?(node = __getnode)
|
128
|
+
node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "guest"
|
129
|
+
end
|
130
|
+
|
131
|
+
# Determine if the current node is VMware host.
|
132
|
+
#
|
133
|
+
# @param [Chef::Node] node
|
134
|
+
# @since 15.8
|
135
|
+
#
|
136
|
+
# @return [Boolean]
|
137
|
+
#
|
138
|
+
def vmware_host?(node = __getnode)
|
139
|
+
node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "host"
|
140
|
+
end
|
141
|
+
|
142
|
+
# Determine if the current node is an openvz guest.
|
143
|
+
#
|
144
|
+
# @param [Chef::Node] node
|
145
|
+
# @since 15.8
|
146
|
+
#
|
147
|
+
# @return [Boolean]
|
148
|
+
#
|
149
|
+
def openvz?(node = __getnode)
|
150
|
+
node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "guest"
|
151
|
+
end
|
152
|
+
|
153
|
+
# Determine if the current node is an openvz host.
|
154
|
+
#
|
155
|
+
# @param [Chef::Node] node
|
156
|
+
# @since 15.8
|
157
|
+
#
|
158
|
+
# @return [Boolean]
|
159
|
+
#
|
160
|
+
def openvz_host?(node = __getnode)
|
161
|
+
node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "host"
|
162
|
+
end
|
163
|
+
|
164
|
+
# Determine if the current node is running under any virutalization environment
|
165
|
+
#
|
166
|
+
# @param [Chef::Node] node
|
167
|
+
# @since 15.8
|
168
|
+
#
|
169
|
+
# @return [Boolean]
|
170
|
+
#
|
171
|
+
def guest?(node = __getnode)
|
172
|
+
node.dig("virtualization", "role") == "guest"
|
173
|
+
end
|
174
|
+
|
175
|
+
# chef-sugar backcompat method
|
176
|
+
alias_method :virtual?, :guest?
|
177
|
+
|
178
|
+
# Determine if the current node supports running guests under any virtualization environment
|
179
|
+
#
|
180
|
+
# @param [Chef::Node] node
|
181
|
+
# @since 15.8
|
182
|
+
#
|
183
|
+
# @return [Boolean]
|
184
|
+
#
|
185
|
+
def hypervisor?(node = __getnode)
|
186
|
+
node.dig("virtualization", "role") == "host"
|
187
|
+
end
|
188
|
+
|
189
|
+
# Determine if the current node is NOT running under any virtualization environment (bare-metal or hypervisor on metal)
|
190
|
+
#
|
191
|
+
# @param [Chef::Node] node
|
192
|
+
# @since 15.8
|
193
|
+
#
|
194
|
+
# @return [Boolean]
|
195
|
+
#
|
196
|
+
def physical?(node = __getnode)
|
197
|
+
!virtual?(node)
|
198
|
+
end
|
199
|
+
|
200
|
+
# Determine if the current node is running as a vagrant guest.
|
201
|
+
#
|
202
|
+
# Note that this API is equivalent to just looking for the vagrant user or the
|
203
|
+
# vagrantup.com domain in the hostname, which is the best API we have.
|
204
|
+
#
|
205
|
+
# @param [Chef::Node] node
|
206
|
+
# @since 15.8
|
207
|
+
#
|
208
|
+
# @return [Boolean]
|
209
|
+
# true if the machine is currently running vagrant, false
|
210
|
+
# otherwise
|
211
|
+
#
|
212
|
+
def vagrant?(node = __getnode)
|
213
|
+
vagrant_key?(node) || vagrant_domain?(node) || vagrant_user?(node)
|
214
|
+
end
|
215
|
+
|
216
|
+
private
|
217
|
+
|
218
|
+
# Check if the +vagrant+ key exists on the +node+ object. This key is no
|
219
|
+
# longer populated by vagrant, but it is kept around for legacy purposes.
|
220
|
+
#
|
221
|
+
# @param (see vagrant?)
|
222
|
+
# @return (see vagrant?)
|
223
|
+
#
|
224
|
+
def vagrant_key?(node = __getnode)
|
225
|
+
node.key?("vagrant")
|
226
|
+
end
|
227
|
+
|
228
|
+
# Check if "vagrantup.com" is included in the node's domain.
|
229
|
+
#
|
230
|
+
# @param (see vagrant?)
|
231
|
+
# @return (see vagrant?)
|
232
|
+
#
|
233
|
+
def vagrant_domain?(node = __getnode)
|
234
|
+
node.key?("domain") && !node["domain"].nil? && node["domain"].include?("vagrantup.com")
|
235
|
+
end
|
236
|
+
|
237
|
+
# Check if the system contains a +vagrant+ user.
|
238
|
+
#
|
239
|
+
# @param (see vagrant?)
|
240
|
+
# @return (see vagrant?)
|
241
|
+
#
|
242
|
+
def vagrant_user?(node = __getnode)
|
243
|
+
!!(Etc.getpwnam("vagrant") rescue nil)
|
244
|
+
end
|
245
|
+
|
246
|
+
extend self
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
@@ -20,6 +20,8 @@ require_relative "../internal"
|
|
20
20
|
module ChefUtils
|
21
21
|
module DSL
|
22
22
|
module Windows
|
23
|
+
require "chef-utils/version_string"
|
24
|
+
|
23
25
|
include Internal
|
24
26
|
|
25
27
|
# Determine if the current node is Windows Server Core.
|
@@ -52,6 +54,26 @@ module ChefUtils
|
|
52
54
|
node["kernel"]["product_type"] == "Server"
|
53
55
|
end
|
54
56
|
|
57
|
+
# Determine the current Windows NT version. The NT version often differs from the marketing version, but offers a good way to find desktop and server releases that are based on the same codebase. IE: NT 6.3 is Windows 8.1 and Windows 2012 R2.
|
58
|
+
#
|
59
|
+
# @param [Chef::Node] node
|
60
|
+
#
|
61
|
+
# @return [ChefUtils::VersionString]
|
62
|
+
#
|
63
|
+
def windows_nt_version(node = __getnode)
|
64
|
+
ChefUtils::VersionString.new(node["os_version"])
|
65
|
+
end
|
66
|
+
|
67
|
+
# Determine the installed version of PowerShell
|
68
|
+
#
|
69
|
+
# @param [Chef::Node] node
|
70
|
+
#
|
71
|
+
# @return [ChefUtils::VersionString]
|
72
|
+
#
|
73
|
+
def powershell_version(node = __getnode)
|
74
|
+
ChefUtils::VersionString.new(node["languages"]["powershell"]["version"])
|
75
|
+
end
|
76
|
+
|
55
77
|
extend self
|
56
78
|
end
|
57
79
|
end
|
data/lib/chef-utils/version.rb
CHANGED
@@ -139,5 +139,11 @@ module ChefUtils
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
+
# Back-compat API for chef-sugar. The other APIs are preferable.
|
143
|
+
#
|
144
|
+
# @api private
|
145
|
+
def satisfies?(*constraints)
|
146
|
+
Gem::Requirement.new(*constraints).satisfied_by?(@parsed_version)
|
147
|
+
end
|
142
148
|
end
|
143
149
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,21 +3,25 @@ require "chef-utils"
|
|
3
3
|
# FIXME: dynamically generate this for accuracy
|
4
4
|
HELPER_MODULES = [
|
5
5
|
ChefUtils::DSL::Architecture,
|
6
|
+
ChefUtils::DSL::Cloud,
|
6
7
|
ChefUtils::DSL::Introspection,
|
7
8
|
ChefUtils::DSL::OS,
|
8
9
|
ChefUtils::DSL::PathSanity,
|
9
10
|
ChefUtils::DSL::Platform,
|
10
11
|
ChefUtils::DSL::PlatformFamily,
|
11
12
|
ChefUtils::DSL::Service,
|
13
|
+
ChefUtils::DSL::Virtualization,
|
12
14
|
ChefUtils::DSL::Which,
|
13
15
|
ChefUtils::DSL::Windows,
|
14
16
|
].freeze
|
15
17
|
|
16
18
|
ARCH_HELPERS = (ChefUtils::DSL::Architecture.methods - Module.methods).freeze
|
19
|
+
CLOUD_HELPERS = (ChefUtils::DSL::Cloud.methods - Module.methods).freeze
|
20
|
+
INTROSPECTION_HELPERS = (ChefUtils::DSL::Introspection.methods - Module.methods).freeze
|
17
21
|
OS_HELPERS = (ChefUtils::DSL::OS.methods - Module.methods).freeze
|
18
|
-
PLATFORM_HELPERS = (ChefUtils::DSL::Platform.methods - Module.methods).freeze
|
19
22
|
PLATFORM_FAMILY_HELPERS = (ChefUtils::DSL::PlatformFamily.methods - Module.methods).freeze
|
20
|
-
|
23
|
+
PLATFORM_HELPERS = (ChefUtils::DSL::Platform.methods - Module.methods).freeze
|
24
|
+
VIRTUALIZATION_HELPERS = (ChefUtils::DSL::Virtualization.methods - Module.methods).freeze
|
21
25
|
WINDOWS_HELPERS = (ChefUtils::DSL::Windows.methods - Module.methods).freeze
|
22
26
|
|
23
27
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018-2020, 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 "fauxhai"
|
20
|
+
|
21
|
+
def cloud_reports_true_for(*args, node:)
|
22
|
+
args.each do |method|
|
23
|
+
it "reports true for #{method}" do
|
24
|
+
expect(described_class.send(method, node)).to be true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
(CLOUD_HELPERS - args).each do |method|
|
28
|
+
it "reports false for #{method}" do
|
29
|
+
expect(described_class.send(method, node)).to be false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec.describe ChefUtils::DSL::Cloud do
|
35
|
+
( HELPER_MODULES - [ described_class ] ).each do |klass|
|
36
|
+
it "does not have methods that collide with #{klass}" do
|
37
|
+
expect((klass.methods - Module.methods) & CLOUD_HELPERS).to be_empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
CLOUD_HELPERS.each do |helper|
|
42
|
+
it "has the #{helper} in the ChefUtils module" do
|
43
|
+
expect(ChefUtils).to respond_to(helper)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "on ec2" do
|
48
|
+
cloud_reports_true_for(:cloud?, :ec2?, node: { "ec2" => {}, "cloud" => {} })
|
49
|
+
end
|
50
|
+
|
51
|
+
context "on gce" do
|
52
|
+
cloud_reports_true_for(:cloud?, :gce?, node: { "gce" => {}, "cloud" => {} })
|
53
|
+
end
|
54
|
+
|
55
|
+
context "on rackspace" do
|
56
|
+
cloud_reports_true_for(:cloud?, :rackspace?, node: { "rackspace" => {}, "cloud" => {} })
|
57
|
+
end
|
58
|
+
|
59
|
+
context "on eucalyptus" do
|
60
|
+
cloud_reports_true_for(:cloud?, :eucalyptus?, :euca?, node: { "eucalyptus" => {}, "cloud" => {} })
|
61
|
+
end
|
62
|
+
|
63
|
+
context "on linode" do
|
64
|
+
cloud_reports_true_for(:cloud?, :linode?, node: { "linode" => {}, "cloud" => {} })
|
65
|
+
end
|
66
|
+
|
67
|
+
context "on openstack" do
|
68
|
+
cloud_reports_true_for(:cloud?, :openstack?, node: { "openstack" => {}, "cloud" => {} })
|
69
|
+
end
|
70
|
+
|
71
|
+
context "on azure" do
|
72
|
+
cloud_reports_true_for(:cloud?, :azure?, node: { "azure" => {}, "cloud" => {} })
|
73
|
+
end
|
74
|
+
|
75
|
+
context "on digital_ocean" do
|
76
|
+
cloud_reports_true_for(:cloud?, :digital_ocean?, :digitalocean?, node: { "digital_ocean" => {}, "cloud" => {} })
|
77
|
+
end
|
78
|
+
|
79
|
+
context "on softlayer" do
|
80
|
+
cloud_reports_true_for(:cloud?, :softlayer?, node: { "softlayer" => {}, "cloud" => {} })
|
81
|
+
end
|
82
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright:: Copyright 2018-
|
2
|
+
# Copyright:: Copyright 2018-2020, Chef Software Inc.
|
3
3
|
# License:: Apache License, Version 2.0
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -165,4 +165,23 @@ RSpec.describe ChefUtils::DSL::Introspection do
|
|
165
165
|
end
|
166
166
|
end
|
167
167
|
end
|
168
|
+
|
169
|
+
context "#include_recipe?" do
|
170
|
+
it "is true when the recipe has been seen by the node" do
|
171
|
+
expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
|
172
|
+
expect(ChefUtils.include_recipe?("myrecipe", node)).to be true
|
173
|
+
end
|
174
|
+
it "is false when the recipe has not been seen by the node" do
|
175
|
+
expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
|
176
|
+
expect(ChefUtils.include_recipe?("myrecipe", node)).to be false
|
177
|
+
end
|
178
|
+
it "the alias is true when the recipe has been seen by the node" do
|
179
|
+
expect(node).to receive(:recipe?).with("myrecipe").and_return(true)
|
180
|
+
expect(ChefUtils.includes_recipe?("myrecipe", node)).to be true
|
181
|
+
end
|
182
|
+
it "the alias is false when the recipe has not been seen by the node" do
|
183
|
+
expect(node).to receive(:recipe?).with("myrecipe").and_return(false)
|
184
|
+
expect(ChefUtils.includes_recipe?("myrecipe", node)).to be false
|
185
|
+
end
|
186
|
+
end
|
168
187
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2018-2020, 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 "fauxhai"
|
20
|
+
|
21
|
+
def virtualization_reports_true_for(*args, node:)
|
22
|
+
args.each do |method|
|
23
|
+
it "reports true for #{method}" do
|
24
|
+
expect(described_class.send(method, node)).to be true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
(VIRTUALIZATION_HELPERS - args).each do |method|
|
28
|
+
it "reports false for #{method}" do
|
29
|
+
expect(described_class.send(method, node)).to be false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec.describe ChefUtils::DSL::Virtualization do
|
35
|
+
( HELPER_MODULES - [ described_class ] ).each do |klass|
|
36
|
+
it "does not have methods that collide with #{klass}" do
|
37
|
+
expect((klass.methods - Module.methods) & VIRTUALIZATION_HELPERS).to be_empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
VIRTUALIZATION_HELPERS.each do |helper|
|
42
|
+
it "has the #{helper} in the ChefUtils module" do
|
43
|
+
expect(ChefUtils).to respond_to(helper)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "on kvm" do
|
48
|
+
virtualization_reports_true_for(:guest?, :virtual?, :kvm?, node: { "virtualization" => { "system" => "kvm", "role" => "guest" } })
|
49
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :kvm_host?, node: { "virtualization" => { "system" => "kvm", "role" => "host" } })
|
50
|
+
end
|
51
|
+
context "on lxc" do
|
52
|
+
virtualization_reports_true_for(:guest?, :virtual?, :lxc?, node: { "virtualization" => { "system" => "lxc", "role" => "guest" } })
|
53
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :lxc_host?, node: { "virtualization" => { "system" => "lxc", "role" => "host" } })
|
54
|
+
end
|
55
|
+
context "on parallels" do
|
56
|
+
virtualization_reports_true_for(:guest?, :virtual?, :parallels?, node: { "virtualization" => { "system" => "parallels", "role" => "guest" } })
|
57
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :parallels_host?, node: { "virtualization" => { "system" => "parallels", "role" => "host" } })
|
58
|
+
end
|
59
|
+
context "on virtualbox" do
|
60
|
+
virtualization_reports_true_for(:guest?, :virtual?, :virtualbox?, :vbox?, node: { "virtualization" => { "system" => "vbox", "role" => "guest" } })
|
61
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :vbox_host?, node: { "virtualization" => { "system" => "vbox", "role" => "host" } })
|
62
|
+
end
|
63
|
+
context "on vmware" do
|
64
|
+
virtualization_reports_true_for(:guest?, :virtual?, :vmware?, node: { "virtualization" => { "system" => "vmware", "role" => "guest" } })
|
65
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :vmware_host?, node: { "virtualization" => { "system" => "vmware", "role" => "host" } })
|
66
|
+
end
|
67
|
+
context "on openvz" do
|
68
|
+
virtualization_reports_true_for(:guest?, :virtual?, :openvz?, node: { "virtualization" => { "system" => "openvz", "role" => "guest" } })
|
69
|
+
virtualization_reports_true_for(:hypervisor?, :physical?, :openvz_host?, node: { "virtualization" => { "system" => "openvz", "role" => "host" } })
|
70
|
+
end
|
71
|
+
context "on metal which is not a virt host" do
|
72
|
+
virtualization_reports_true_for(:physical?, node: {} )
|
73
|
+
end
|
74
|
+
end
|
@@ -17,13 +17,15 @@
|
|
17
17
|
|
18
18
|
require "spec_helper"
|
19
19
|
|
20
|
+
WINDOWS_BOOL_HELPERS = %i{windows_server_core? windows_server? windows_workstation?}.freeze
|
21
|
+
|
20
22
|
def windows_reports_true_for(*args)
|
21
23
|
args.each do |method|
|
22
24
|
it "reports true for #{method}" do
|
23
25
|
expect(described_class.send(method, node)).to be true
|
24
26
|
end
|
25
27
|
end
|
26
|
-
(
|
28
|
+
(WINDOWS_BOOL_HELPERS - args).each do |method|
|
27
29
|
it "reports false for #{method}" do
|
28
30
|
expect(described_class.send(method, node)).to be false
|
29
31
|
end
|
@@ -43,21 +45,39 @@ RSpec.describe ChefUtils::DSL::Windows do
|
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
context "
|
47
|
-
|
48
|
+
context "windows boolean helpers" do
|
49
|
+
context "on Windows Server Core" do
|
50
|
+
let(:node) { { "kernel" => { "server_core" => true } } }
|
48
51
|
|
49
|
-
|
50
|
-
|
52
|
+
windows_reports_true_for(:windows_server_core?)
|
53
|
+
end
|
54
|
+
|
55
|
+
context "on Windows Workstation" do
|
56
|
+
let(:node) { { "kernel" => { "product_type" => "Workstation" } } }
|
57
|
+
|
58
|
+
windows_reports_true_for(:windows_workstation?)
|
59
|
+
end
|
51
60
|
|
52
|
-
|
53
|
-
|
61
|
+
context "on Windows Server" do
|
62
|
+
let(:node) { { "kernel" => { "product_type" => "Server" } } }
|
54
63
|
|
55
|
-
|
64
|
+
windows_reports_true_for(:windows_server?)
|
65
|
+
end
|
56
66
|
end
|
57
67
|
|
58
|
-
context "on Windows Server" do
|
59
|
-
let(:node) { { "
|
68
|
+
context "#windows_nt_version on Windows Server 2012 R2" do
|
69
|
+
let(:node) { { "os_version" => "6.3.9600" } }
|
70
|
+
it "it returns a ChefUtils::VersionString object with 6.3.9600" do
|
71
|
+
expect(described_class.send(:windows_nt_version, node)).to eq "6.3.9600"
|
72
|
+
expect(described_class.send(:windows_nt_version, node)).to be_a_kind_of ChefUtils::VersionString
|
73
|
+
end
|
74
|
+
end
|
60
75
|
|
61
|
-
|
76
|
+
context "#powershell_version on Windows Server 2012 R2" do
|
77
|
+
let(:node) { { "languages" => { "powershell" => { "version" => "4.0" } } } }
|
78
|
+
it "it returns a ChefUtils::VersionString object with 4.0" do
|
79
|
+
expect(described_class.send(:powershell_version, node)).to eq "4.0"
|
80
|
+
expect(described_class.send(:powershell_version, node)).to be_a_kind_of ChefUtils::VersionString
|
81
|
+
end
|
62
82
|
end
|
63
83
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 15.
|
4
|
+
version: 15.8.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chef Software, Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -22,13 +22,16 @@ files:
|
|
22
22
|
- chef-utils.gemspec
|
23
23
|
- lib/chef-utils.rb
|
24
24
|
- lib/chef-utils/dsl/architecture.rb
|
25
|
+
- lib/chef-utils/dsl/cloud.rb
|
25
26
|
- lib/chef-utils/dsl/introspection.rb
|
26
27
|
- lib/chef-utils/dsl/os.rb
|
27
28
|
- lib/chef-utils/dsl/path_sanity.rb
|
28
29
|
- lib/chef-utils/dsl/platform.rb
|
29
30
|
- lib/chef-utils/dsl/platform_family.rb
|
31
|
+
- lib/chef-utils/dsl/platform_version.rb
|
30
32
|
- lib/chef-utils/dsl/service.rb
|
31
33
|
- lib/chef-utils/dsl/train_helpers.rb
|
34
|
+
- lib/chef-utils/dsl/virtualization.rb
|
32
35
|
- lib/chef-utils/dsl/which.rb
|
33
36
|
- lib/chef-utils/dsl/windows.rb
|
34
37
|
- lib/chef-utils/internal.rb
|
@@ -37,6 +40,7 @@ files:
|
|
37
40
|
- lib/chef-utils/version_string.rb
|
38
41
|
- spec/spec_helper.rb
|
39
42
|
- spec/unit/dsl/architecture_spec.rb
|
43
|
+
- spec/unit/dsl/cloud_spec.rb
|
40
44
|
- spec/unit/dsl/dsl_spec.rb
|
41
45
|
- spec/unit/dsl/introspection_spec.rb
|
42
46
|
- spec/unit/dsl/os_spec.rb
|
@@ -44,6 +48,7 @@ files:
|
|
44
48
|
- spec/unit/dsl/platform_family_spec.rb
|
45
49
|
- spec/unit/dsl/platform_spec.rb
|
46
50
|
- spec/unit/dsl/service_spec.rb
|
51
|
+
- spec/unit/dsl/virtualization_spec.rb
|
47
52
|
- spec/unit/dsl/which_spec.rb
|
48
53
|
- spec/unit/dsl/windows_spec.rb
|
49
54
|
- spec/unit/mash_spec.rb
|