chef-utils 0.0.1 → 15.5.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d24b5af451ff85da3c24ed21d9d8d4719952c363a04c0e2256b3d2ec20331ec5
4
- data.tar.gz: f3657404413ddaa19753f0426897f78f9400e2eab85b7a576b77fd8b87b49424
3
+ metadata.gz: b52b97bdb973d51382ed8a0594fb95f8be34727380d03d2a5929b3beb3156364
4
+ data.tar.gz: ae37e164b4891c0fdd66c5e90a75813906b2c70311b0ceff6ca3f505f83412d3
5
5
  SHA512:
6
- metadata.gz: 1aea2d3445fd00f009ea1fe6093bfcbe4d8b9f2b20b68aa986ea39152f18631daee4a8b59b3ff92e7f63d599073d68e11361a6d401ff76ba8603118c364a3749
7
- data.tar.gz: 950ad3d80a9dab08ff42add5da97499d99e3d80d4e0f5bb2312344215480b3191f868f47e76c13ff70ce9125804a50ccd77c21e250ffd5b29e7b677d6ed49c60
6
+ metadata.gz: 68a6d7ea11a8f15d308748723cd2376ac01f1dc90c713fdf9735cc57d83f59a725e6e2a4b0747b20f659a5ea2f39df91f36a0720aa908a798ac7f003000b4ea1
7
+ data.tar.gz: bb88ff0308fb16377e49de5c1a63bb4b6341bec4fa26eb9674ef17476b3a88f3080c7622eab48beb4bd5aa206a61d2ad852093664ae3b50ee9f1723e3f0d7931
data/chef-utils.gemspec CHANGED
@@ -6,13 +6,21 @@ require "chef-utils/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "chef-utils"
8
8
  spec.version = ChefUtils::VERSION
9
- spec.authors = ["Adam Jacob"]
10
- spec.email = ["adam@chef.io"]
9
+ spec.authors = ["Chef Software, Inc"]
10
+ spec.email = ["oss@chef.io"]
11
11
 
12
12
  spec.summary = %q{Basic utility functions for Core Chef development}
13
- spec.homepage = "https://github.com/chef/chef"
13
+ spec.homepage = "https://github.com/chef/chef/tree/master/chef-utils"
14
14
  spec.license = "Apache-2.0"
15
15
 
16
+ spec.metadata = {
17
+ "bug_tracker_uri" => "https://github.com/chef/chef/issues",
18
+ "changelog_uri" => "https://github.com/chef/chef/CHANGELOG.md",
19
+ "documentation_uri" => "https://github.com/chef/chef/tree/master/chef-utils/README.md",
20
+ "homepage_uri" => "https://github.com/chef/chef/tree/master/chef-utils",
21
+ "source_code_uri" => "https://github.com/chef/chef/tree/master/chef-utils",
22
+ }
23
+
16
24
  spec.require_paths = ["lib"]
17
25
 
18
26
  #
data/lib/chef-utils.rb ADDED
@@ -0,0 +1,43 @@
1
+ #
2
+ # Copyright:: Copyright 2015-2019, 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 "chef-utils/dsl/architecture"
19
+ require_relative "chef-utils/dsl/introspection"
20
+ require_relative "chef-utils/dsl/os"
21
+ require_relative "chef-utils/dsl/path_sanity"
22
+ require_relative "chef-utils/dsl/platform"
23
+ require_relative "chef-utils/dsl/platform_family"
24
+ require_relative "chef-utils/dsl/service"
25
+ require_relative "chef-utils/dsl/train_helpers"
26
+ require_relative "chef-utils/dsl/which"
27
+ require_relative "chef-utils/mash"
28
+
29
+ # This is the Chef Infra Client DSL, not everytihng needs to go in here
30
+ module ChefUtils
31
+ include ChefUtils::DSL::Architecture
32
+ include ChefUtils::DSL::OS
33
+ include ChefUtils::DSL::PlatformFamily
34
+ include ChefUtils::DSL::Platform
35
+ include ChefUtils::DSL::Introspection
36
+ # FIXME: include ChefUtils::DSL::Which in Chef 16.0
37
+ # FIXME: include ChefUtils::DSL::PathSanity in Chef 16.0
38
+ # FIXME: include ChefUtils::DSL::TrainHelpers in Chef 16.0
39
+ # ChefUtils::DSL::Service is deliberately excluded
40
+
41
+ CANARY = 1 # used as a guard for requires
42
+ extend self
43
+ end
@@ -0,0 +1,117 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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 Architecture
23
+ include Internal
24
+
25
+ # Determine if the current architecture is 64-bit
26
+ #
27
+ # @return [Boolean]
28
+ #
29
+ def _64_bit?(node = __getnode)
30
+ %w{amd64 x86_64 ppc64 ppc64le s390x ia64 sparc64 aarch64 arch64 arm64 sun4v sun4u}
31
+ .include?(node["kernel"]["machine"])
32
+ end
33
+
34
+ # Determine if the current architecture is 32-bit
35
+ #
36
+ # @return [Boolean]
37
+ #
38
+ def _32_bit?(node = __getnode)
39
+ !_64_bit?(node)
40
+ end
41
+
42
+ # Determine if the current architecture is i386
43
+ #
44
+ # @return [Boolean]
45
+ #
46
+ def i386?(node = __getnode)
47
+ _32_bit?(node) && intel?(node)
48
+ end
49
+
50
+ # Determine if the current architecture is Intel.
51
+ #
52
+ # @return [Boolean]
53
+ #
54
+ def intel?(node = __getnode)
55
+ %w{i86pc i386 x86_64 amd64 i686}.include?(node["kernel"]["machine"])
56
+ end
57
+
58
+ # Determine if the current architecture is SPARC.
59
+ #
60
+ # @return [Boolean]
61
+ #
62
+ def sparc?(node = __getnode)
63
+ %w{sun4u sun4v}.include?(node["kernel"]["machine"])
64
+ end
65
+
66
+ # Determine if the current architecture is Powerpc64 Big Endian
67
+ #
68
+ # @return [Boolean]
69
+ #
70
+ def ppc64?(node = __getnode)
71
+ %w{ppc64}.include?(node["kernel"]["machine"])
72
+ end
73
+
74
+ # Determine if the current architecture is Powerpc64 Little Endian
75
+ #
76
+ # @return [Boolean]
77
+ #
78
+ def ppc64le?(node = __getnode)
79
+ %w{ppc64le}.include?(node["kernel"]["machine"])
80
+ end
81
+
82
+ # Determine if the current architecture is PowerPC.
83
+ #
84
+ # @return [Boolean]
85
+ #
86
+ def powerpc?(node = __getnode)
87
+ %w{powerpc}.include?(node["kernel"]["machine"])
88
+ end
89
+
90
+ # Determine if the current architecture is 32-bit ARM
91
+ #
92
+ # @return [Boolean]
93
+ #
94
+ def armhf?(node = __getnode)
95
+ %w{armhf}.include?(node["kernel"]["machine"])
96
+ end
97
+
98
+ # Determine if the current architecture is s390x
99
+ #
100
+ # @return [Boolean]
101
+ #
102
+ def s390x?(node = __getnode)
103
+ %w{s390x}.include?(node["kernel"]["machine"])
104
+ end
105
+
106
+ # Determine if the current architecture is s390
107
+ #
108
+ # @return [Boolean]
109
+ #
110
+ def s390?(node = __getnode)
111
+ %w{s390}.include?(node["kernel"]["machine"])
112
+ end
113
+
114
+ extend self
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,93 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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 "train_helpers"
19
+
20
+ module ChefUtils
21
+ module DSL
22
+ # This is for "introspection" helpers in the sense that we are inspecting the
23
+ # actual server or image under management to determine running state (duck-typing the system).
24
+ # The helpers here may use the node object state from ohai, but typically not the big 5: platform,
25
+ # platform_family, platform_version, arch, os. The helpers here should infer somewhat
26
+ # higher level facts about the system.
27
+ #
28
+ module Introspection
29
+ include TrainHelpers
30
+
31
+ # Returns whether the node is a docker container.
32
+ #
33
+ # @param [Chef::Node] node
34
+ #
35
+ # @return [Boolean]
36
+ #
37
+ def docker?(node = __getnode)
38
+ # Using "File.exist?('/.dockerinit') || File.exist?('/.dockerenv')" makes Travis sad,
39
+ # and that makes us sad too.
40
+ !!(node && node.read("virtualization", "systems", "docker") == "guest")
41
+ end
42
+
43
+ # @param [Chef::Node] node
44
+ #
45
+ # @return [Boolean]
46
+ #
47
+ def systemd?(node = __getnode)
48
+ file_exist?("/proc/1/comm") && file_open("/proc/1/comm").gets.chomp == "systemd"
49
+ end
50
+
51
+ # @param [Chef::Node] node
52
+ #
53
+ # @return [Boolean]
54
+ #
55
+ def kitchen?(node = __getnode)
56
+ ENV.key?("TEST_KITCHEN")
57
+ end
58
+
59
+ # @param [Chef::Node] node
60
+ #
61
+ # @return [Boolean]
62
+ #
63
+ def ci?(node = __getnode)
64
+ ENV.key?("CI")
65
+ end
66
+
67
+ # @param [String] svc_name
68
+ #
69
+ # @return [Boolean]
70
+ #
71
+ def has_systemd_service_unit?(svc_name)
72
+ %w{ /etc /usr/lib /lib /run }.any? do |load_path|
73
+ file_exist?(
74
+ "#{load_path}/systemd/system/#{svc_name.gsub(/@.*$/, "@")}.service"
75
+ )
76
+ end
77
+ end
78
+
79
+ # @param [String] svc_name
80
+ #
81
+ # @return [Boolean]
82
+ #
83
+ def has_systemd_unit?(svc_name)
84
+ # TODO: stop supporting non-service units with service resource
85
+ %w{ /etc /usr/lib /lib /run }.any? do |load_path|
86
+ file_exist?("#{load_path}/systemd/system/#{svc_name}")
87
+ end
88
+ end
89
+
90
+ extend self
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,55 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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 OS
23
+ include Internal
24
+
25
+ #
26
+ # NOTE CAREFULLY: Most node['os'] values should not appear in this file at all.
27
+ #
28
+ # For cases where node['os'] == node['platform_family'] == node['platform'] then
29
+ # only the platform helper should be added.
30
+ #
31
+
32
+ # Determine if the current node is linux.
33
+ #
34
+ # @param [Chef::Node] node
35
+ #
36
+ # @return [Boolean]
37
+ #
38
+ def linux?(node = __getnode)
39
+ node["os"] == "linux"
40
+ end
41
+
42
+ # Determine if the current node is darwin.
43
+ #
44
+ # @param [Chef::Node] node
45
+ #
46
+ # @return [Boolean]
47
+ #
48
+ def darwin?(node = __getnode)
49
+ node["os"] == "darwin"
50
+ end
51
+
52
+ extend self
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,58 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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
+ require_relative "platform_family"
20
+
21
+ module ChefUtils
22
+ module DSL
23
+ module PathSanity
24
+ include Internal
25
+
26
+ def sanitized_path(env = nil)
27
+ env_path = env ? env["PATH"] : __env_path
28
+ env_path = "" if env_path.nil?
29
+ path_separator = ChefUtils.windows? ? ";" : ":"
30
+ # ensure the Ruby and Gem bindirs are included for omnibus chef installs
31
+ new_paths = env_path.split(path_separator)
32
+ [ ChefUtils::DSL::PathSanity.ruby_bindir, ChefUtils::DSL::PathSanity.gem_bindir ].compact.each do |path|
33
+ new_paths = [ path ] + new_paths unless new_paths.include?(path)
34
+ end
35
+ ChefUtils::DSL::PathSanity.sane_paths.each do |path|
36
+ new_paths << path unless new_paths.include?(path)
37
+ end
38
+ new_paths.join(path_separator).encode("utf-8", invalid: :replace, undef: :replace)
39
+ end
40
+
41
+ class << self
42
+ def sane_paths
43
+ ChefUtils.windows? ? %w{} : %w{/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin}
44
+ end
45
+
46
+ def ruby_bindir
47
+ RbConfig::CONFIG["bindir"]
48
+ end
49
+
50
+ def gem_bindir
51
+ Gem.bindir
52
+ end
53
+ end
54
+
55
+ extend self
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,339 @@
1
+ #
2
+ # Copyright:: Copyright 2018-2019, 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 Platform
23
+ include Internal
24
+
25
+ # NOTE: if you are adding new platform helpers they should all have the `_platform?` suffix.
26
+ # DO NOT add new short aliases without the suffix (they will be deprecated in the future)
27
+ # aliases here are mostly for backwards compatibility with chef-sugar and new ones are DISCOURAGED.
28
+ # generally there should be one obviously correct way to do things.
29
+
30
+ # Determine if the current node is linux mint.
31
+ #
32
+ # @param [Chef::Node] node
33
+ #
34
+ # @return [Boolean]
35
+ #
36
+ def linuxmint?(node = __getnode)
37
+ node["platform"] == "linuxmint"
38
+ end
39
+ # chef-sugar backcompat methods
40
+ alias_method :mint?, :linuxmint?
41
+ alias_method :linux_mint?, :linuxmint?
42
+ alias_method :linuxmint_platform?, :linuxmint?
43
+
44
+ # Determine if the current node is ubuntu.
45
+ #
46
+ # @param [Chef::Node] node
47
+ #
48
+ # @return [Boolean]
49
+ #
50
+ def ubuntu?(node = __getnode)
51
+ node["platform"] == "ubuntu"
52
+ end
53
+ alias_method :ubuntu_platform?, :ubuntu?
54
+
55
+ # Determine if the current node is raspbian.
56
+ #
57
+ # @param [Chef::Node] node
58
+ #
59
+ # @return [Boolean]
60
+ #
61
+ def raspbian?(node = __getnode)
62
+ node["platform"] == "raspbian"
63
+ end
64
+ alias_method :raspbian_platform?, :raspbian?
65
+
66
+ # Determine if the current node is debian.
67
+ #
68
+ # @param [Chef::Node] node
69
+ #
70
+ # @return [Boolean]
71
+ #
72
+ def debian_platform?(node = __getnode)
73
+ node["platform"] == "debian"
74
+ end
75
+
76
+ # Determine if the current node is amazon linux.
77
+ #
78
+ # @param [Chef::Node] node
79
+ #
80
+ # @return [Boolean]
81
+ #
82
+ def amazon_platform?(node = __getnode)
83
+ node["platform"] == "amazon"
84
+ end
85
+
86
+ # Determine if the current node is redhat enterprise.
87
+ #
88
+ # @param [Chef::Node] node
89
+ #
90
+ # @return [Boolean]
91
+ #
92
+ def redhat?(node = __getnode)
93
+ node["platform"] == "redhat"
94
+ end
95
+ # chef-sugar backcompat methods
96
+ alias_method :redhat_enterprise?, :redhat?
97
+ alias_method :redhat_enterprise_linux?, :redhat?
98
+ alias_method :redhat_platform?, :redhat?
99
+
100
+ # Determine if the current node is centos.
101
+ #
102
+ # @param [Chef::Node] node
103
+ #
104
+ # @return [Boolean]
105
+ #
106
+ def centos?(node = __getnode)
107
+ node["platform"] == "centos"
108
+ end
109
+ alias_method :centos_platform?, :centos?
110
+
111
+ # Determine if the current node is oracle linux.
112
+ #
113
+ # @param [Chef::Node] node
114
+ #
115
+ # @return [Boolean]
116
+ #
117
+ def oracle?(node = __getnode)
118
+ node["platform"] == "oracle"
119
+ end
120
+ # chef-sugar backcompat methods
121
+ alias_method :oracle_linux?, :oracle?
122
+ alias_method :oracle_platform?, :oracle?
123
+
124
+ # Determine if the current node is scientific linux.
125
+ #
126
+ # @param [Chef::Node] node
127
+ #
128
+ # @return [Boolean]
129
+ #
130
+ def scientific?(node = __getnode)
131
+ node["platform"] == "scientific"
132
+ end
133
+ # chef-sugar backcompat methods
134
+ alias_method :scientific_linux?, :scientific?
135
+ alias_method :scientific_platform?, :scientific?
136
+
137
+ # Determine if the current node is clearos.
138
+ #
139
+ # @param [Chef::Node] node
140
+ #
141
+ # @return [Boolean]
142
+ #
143
+ def clearos?(node = __getnode)
144
+ node["platform"] == "clearos"
145
+ end
146
+ alias_method :clearos_platform?, :clearos?
147
+
148
+ # Determine if the current node is fedora.
149
+ #
150
+ # @param [Chef::Node] node
151
+ #
152
+ # @return [Boolean]
153
+ #
154
+ def fedora_platform?(node = __getnode)
155
+ node["platform"] == "fedora"
156
+ end
157
+
158
+ # Determine if the current node is arch
159
+ #
160
+ # @param [Chef::Node] node
161
+ #
162
+ # @return [Boolean]
163
+ #
164
+ def arch_platform?(node = __getnode)
165
+ node["platform"] == "arch"
166
+ end
167
+
168
+ # Determine if the current node is solaris2
169
+ #
170
+ # @param [Chef::Node] node
171
+ #
172
+ # @return [Boolean]
173
+ #
174
+ def solaris2_platform?(node = __getnode)
175
+ node["platform"] == "solaris2"
176
+ end
177
+
178
+ # Determine if the current node is smartos
179
+ #
180
+ # @param [Chef::Node] node
181
+ #
182
+ # @return [Boolean]
183
+ #
184
+ def smartos_platform?(node = __getnode)
185
+ node["platform"] == "smartos"
186
+ end
187
+
188
+ # Determine if the current node is omnios
189
+ #
190
+ # @param [Chef::Node] node
191
+ #
192
+ # @return [Boolean]
193
+ #
194
+ def omnios?(node = __getnode)
195
+ node["platform"] == "omnios"
196
+ end
197
+ alias_method :omnios_platform?, :omnios?
198
+
199
+ # Determine if the current node is openindiana
200
+ #
201
+ # @param [Chef::Node] node
202
+ #
203
+ # @return [Boolean]
204
+ #
205
+ def openindiana?(node = __getnode)
206
+ node["platform"] == "openindiana"
207
+ end
208
+ alias_method :openindiana_platform?, :openindiana?
209
+
210
+ # Determine if the current node is nexentacore
211
+ #
212
+ # @param [Chef::Node] node
213
+ #
214
+ # @return [Boolean]
215
+ #
216
+ def nexentacore?(node = __getnode)
217
+ node["platform"] == "nexentacore"
218
+ end
219
+ alias_method :nexentacore_platform?, :nexentacore?
220
+
221
+ # Determine if the current node is aix
222
+ #
223
+ # @param [Chef::Node] node
224
+ #
225
+ # @return [Boolean]
226
+ #
227
+ def aix_platform?(node = __getnode)
228
+ node["platform"] == "aix"
229
+ end
230
+
231
+ # Determine if the current node is freebsd
232
+ #
233
+ # @param [Chef::Node] node
234
+ #
235
+ # @return [Boolean]
236
+ #
237
+ def freebsd_platform?(node = __getnode)
238
+ node["platform"] == "freebsd"
239
+ end
240
+
241
+ # Determine if the current node is openbsd
242
+ #
243
+ # @param [Chef::Node] node
244
+ #
245
+ # @return [Boolean]
246
+ #
247
+ def openbsd_platform?(node = __getnode)
248
+ node["platform"] == "openbsd"
249
+ end
250
+
251
+ # Determine if the current node is netbsd
252
+ #
253
+ # @param [Chef::Node] node
254
+ #
255
+ # @return [Boolean]
256
+ #
257
+ def netbsd_platform?(node = __getnode)
258
+ node["platform"] == "netbsd"
259
+ end
260
+
261
+ # Determine if the current node is dragonflybsd
262
+ #
263
+ # @param [Chef::Node] node
264
+ #
265
+ # @return [Boolean]
266
+ #
267
+ def dragonfly_platform?(node = __getnode)
268
+ node["platform"] == "dragonfly"
269
+ end
270
+
271
+ # Determine if the current node is MacOS.
272
+ #
273
+ # @param [Chef::Node] node
274
+ #
275
+ # @return [Boolean]
276
+ #
277
+ def macos_platform?(node = __getnode)
278
+ node["platform"] == "mac_os_x"
279
+ end
280
+ alias_method :mac_os_x_platform?, :macos_platform?
281
+
282
+ # Determine if the current node is gentoo
283
+ #
284
+ # @param [Chef::Node] node
285
+ #
286
+ # @return [Boolean]
287
+ #
288
+ def gentoo_platform?(node = __getnode)
289
+ node["platform"] == "gentoo"
290
+ end
291
+
292
+ # Determine if the current node is slackware.
293
+ #
294
+ # @param [Chef::Node] node
295
+ #
296
+ # @return [Boolean]
297
+ #
298
+ def slackware_platform?(node = __getnode)
299
+ node["platform"] == "slackware"
300
+ end
301
+
302
+ # Determine if the current node is SuSE.
303
+ #
304
+ # @param [Chef::Node] node
305
+ #
306
+ # @return [Boolean]
307
+ #
308
+ def suse_platform?(node = __getnode)
309
+ node["platform"] == "suse"
310
+ end
311
+
312
+ # Determine if the current node is OpenSuSE.
313
+ #
314
+ # @param [Chef::Node] node
315
+ #
316
+ # @return [Boolean]
317
+ #
318
+ def opensuse?(node = __getnode)
319
+ node["platform"] == "opensuse" || node["platform"] == "opensuseleap"
320
+ end
321
+ alias_method :opensuse_platform?, :opensuse?
322
+ alias_method :opensuseleap_platform?, :opensuse?
323
+ alias_method :leap_platform?, :opensuse?
324
+ # NOTE: to anyone adding :tumbleweed_platform? - :[opensuse]leap_platform? should be false on tumbleweed, :opensuse[_platform]? should be true
325
+
326
+ # Determine if the current node is Windows.
327
+ #
328
+ # @param [Chef::Node] node
329
+ #
330
+ # @return [Boolean]
331
+ #
332
+ def windows_platform?(node = __getnode)
333
+ node["platform"] == "windows"
334
+ end
335
+
336
+ extend self
337
+ end
338
+ end
339
+ end