chef-sugar-ng 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/lock.yml +3 -0
- data/.github/reaction.yml +1 -0
- data/.gitignore +26 -0
- data/.kitchen.yml +16 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +261 -0
- data/CONTRIBUTING.md +20 -0
- data/Gemfile +2 -0
- data/LICENSE +201 -0
- data/README.md +540 -0
- data/Rakefile +11 -0
- data/chef-sugar-ng.gemspec +33 -0
- data/lib/chef/sugar.rb +51 -0
- data/lib/chef/sugar/architecture.rb +171 -0
- data/lib/chef/sugar/cloud.rb +192 -0
- data/lib/chef/sugar/constraints.rb +108 -0
- data/lib/chef/sugar/constraints_dsl.rb +83 -0
- data/lib/chef/sugar/core_extensions.rb +19 -0
- data/lib/chef/sugar/core_extensions/array.rb +34 -0
- data/lib/chef/sugar/core_extensions/object.rb +27 -0
- data/lib/chef/sugar/core_extensions/string.rb +66 -0
- data/lib/chef/sugar/data_bag.rb +146 -0
- data/lib/chef/sugar/docker.rb +40 -0
- data/lib/chef/sugar/filters.rb +227 -0
- data/lib/chef/sugar/init.rb +62 -0
- data/lib/chef/sugar/ip.rb +48 -0
- data/lib/chef/sugar/kernel.rb +49 -0
- data/lib/chef/sugar/kitchen.rb +40 -0
- data/lib/chef/sugar/node.rb +213 -0
- data/lib/chef/sugar/platform.rb +327 -0
- data/lib/chef/sugar/platform_family.rb +179 -0
- data/lib/chef/sugar/ruby.rb +51 -0
- data/lib/chef/sugar/run_context.rb +41 -0
- data/lib/chef/sugar/shell.rb +147 -0
- data/lib/chef/sugar/vagrant.rb +77 -0
- data/lib/chef/sugar/version.rb +21 -0
- data/lib/chef/sugar/virtualization.rb +151 -0
- data/libraries/chef-sugar.rb +1 -0
- data/metadata.rb +24 -0
- data/recipes/default.rb +20 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/shared_examples.rb +20 -0
- data/spec/unit/chef/sugar/architecture_spec.rb +129 -0
- data/spec/unit/chef/sugar/cloud_spec.rb +149 -0
- data/spec/unit/chef/sugar/constraints_spec.rb +45 -0
- data/spec/unit/chef/sugar/core_extensions/array_spec.rb +10 -0
- data/spec/unit/chef/sugar/core_extensions/object_spec.rb +62 -0
- data/spec/unit/chef/sugar/core_extensions/string_spec.rb +48 -0
- data/spec/unit/chef/sugar/data_bag_spec.rb +118 -0
- data/spec/unit/chef/sugar/docker_spec.rb +39 -0
- data/spec/unit/chef/sugar/init_spec.rb +74 -0
- data/spec/unit/chef/sugar/ip_spec.rb +53 -0
- data/spec/unit/chef/sugar/kernel_spec.rb +16 -0
- data/spec/unit/chef/sugar/kitchen_spec.rb +18 -0
- data/spec/unit/chef/sugar/node_spec.rb +172 -0
- data/spec/unit/chef/sugar/platform_family_spec.rb +166 -0
- data/spec/unit/chef/sugar/platform_spec.rb +342 -0
- data/spec/unit/chef/sugar/ruby_spec.rb +39 -0
- data/spec/unit/chef/sugar/run_context_spec.rb +19 -0
- data/spec/unit/chef/sugar/shell_spec.rb +104 -0
- data/spec/unit/chef/sugar/vagrant_spec.rb +37 -0
- data/spec/unit/chef/sugar/virtualization_spec.rb +135 -0
- data/spec/unit/recipes/default_spec.rb +9 -0
- metadata +202 -0
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'chef/sugar/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'chef-sugar-ng'
|
8
|
+
spec.version = Chef::Sugar::VERSION
|
9
|
+
spec.authors = ['Seth Vargo']
|
10
|
+
spec.email = ['sethvargo@gmail.com']
|
11
|
+
spec.description = 'A series of helpful sugar of the Chef core and ' \
|
12
|
+
'other resources to make a cleaner, more lean recipe ' \
|
13
|
+
'DSL, enforce DRY principles, and make writing Chef ' \
|
14
|
+
'recipes an awesome experience!'
|
15
|
+
spec.summary = 'A collection of helper methods and modules that ' \
|
16
|
+
'make working with Chef recipes awesome.'
|
17
|
+
spec.homepage = 'https://github.com/chef/chef-sugar'
|
18
|
+
spec.license = 'Apache 2.0'
|
19
|
+
|
20
|
+
spec.required_ruby_version = '>= 2.2.2'
|
21
|
+
|
22
|
+
spec.files = `git ls-files`.split($/)
|
23
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
24
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
28
|
+
spec.add_development_dependency 'rake'
|
29
|
+
|
30
|
+
spec.add_development_dependency 'chefspec'
|
31
|
+
spec.add_development_dependency 'test-kitchen'
|
32
|
+
spec.add_development_dependency 'kitchen-vagrant'
|
33
|
+
end
|
data/lib/chef/sugar.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'chef/recipe'
|
18
|
+
require 'chef/resource'
|
19
|
+
require 'chef/provider'
|
20
|
+
|
21
|
+
class Chef
|
22
|
+
module Sugar
|
23
|
+
require_relative 'sugar/architecture'
|
24
|
+
require_relative 'sugar/cloud'
|
25
|
+
require_relative 'sugar/constraints'
|
26
|
+
require_relative 'sugar/constraints_dsl'
|
27
|
+
require_relative 'sugar/data_bag'
|
28
|
+
require_relative 'sugar/docker'
|
29
|
+
require_relative 'sugar/filters'
|
30
|
+
require_relative 'sugar/init'
|
31
|
+
require_relative 'sugar/ip'
|
32
|
+
require_relative 'sugar/kernel'
|
33
|
+
require_relative 'sugar/kitchen'
|
34
|
+
require_relative 'sugar/node'
|
35
|
+
require_relative 'sugar/platform'
|
36
|
+
require_relative 'sugar/platform_family'
|
37
|
+
require_relative 'sugar/ruby'
|
38
|
+
require_relative 'sugar/run_context'
|
39
|
+
require_relative 'sugar/shell'
|
40
|
+
require_relative 'sugar/vagrant'
|
41
|
+
require_relative 'sugar/version'
|
42
|
+
require_relative 'sugar/virtualization'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Chef::Recipe.send(:include, Chef::Sugar::DSL)
|
47
|
+
Chef::Recipe.send(:include, Chef::Sugar::RecipeDSL) # TODO: this is a hack
|
48
|
+
Chef::Resource.send(:include, Chef::Sugar::DSL)
|
49
|
+
Chef::Provider.send(:include, Chef::Sugar::DSL)
|
50
|
+
|
51
|
+
Object.send(:include, Chef::Sugar::Kernel)
|
@@ -0,0 +1,171 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
class Chef
|
18
|
+
module Sugar
|
19
|
+
module Architecture
|
20
|
+
extend self
|
21
|
+
|
22
|
+
#
|
23
|
+
# Determine if the current architecture is 64-bit
|
24
|
+
#
|
25
|
+
# @return [Boolean]
|
26
|
+
#
|
27
|
+
def _64_bit?(node)
|
28
|
+
%w(amd64 x86_64 ppc64 ppc64le s390x ia64 sparc64 aarch64 arch64 arm64 sun4v sun4u s390x)
|
29
|
+
.include?(node['kernel']['machine']) || ( node['kernel']['bits'] == '64' )
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# Determine if the current architecture is 32-bit
|
34
|
+
#
|
35
|
+
# @todo Make this more than "not 64-bit"
|
36
|
+
#
|
37
|
+
# @return [Boolean]
|
38
|
+
#
|
39
|
+
def _32_bit?(node)
|
40
|
+
!_64_bit?(node)
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Determine if the current architecture is i386
|
45
|
+
#
|
46
|
+
# @return [Boolean]
|
47
|
+
#
|
48
|
+
def i386?(node)
|
49
|
+
_32_bit?(node) && intel?(node)
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Determine if the current architecture is Intel.
|
54
|
+
#
|
55
|
+
# @return [Boolean]
|
56
|
+
#
|
57
|
+
def intel?(node)
|
58
|
+
%w(i86pc i386 x86_64 amd64 i686)
|
59
|
+
.include?(node['kernel']['machine'])
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Determine if the current architecture is SPARC.
|
64
|
+
#
|
65
|
+
# @return [Boolean]
|
66
|
+
#
|
67
|
+
def sparc?(node)
|
68
|
+
%w(sun4u sun4v)
|
69
|
+
.include?(node['kernel']['machine'])
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# Determine if the current architecture is Powerpc64 Big Endian
|
74
|
+
#
|
75
|
+
# @return [Boolean]
|
76
|
+
#
|
77
|
+
def ppc64?(node)
|
78
|
+
%w(ppc64)
|
79
|
+
.include?(node['kernel']['machine'])
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Determine if the current architecture is Powerpc64 Little Endian
|
84
|
+
#
|
85
|
+
# @return [Boolean]
|
86
|
+
#
|
87
|
+
def ppc64le?(node)
|
88
|
+
%w(ppc64le)
|
89
|
+
.include?(node['kernel']['machine'])
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Determine if the current architecture is PowerPC
|
94
|
+
#
|
95
|
+
# @return [Boolean]
|
96
|
+
#
|
97
|
+
def powerpc?(node)
|
98
|
+
%w(powerpc)
|
99
|
+
.include?(node['kernel']['machine'])
|
100
|
+
end
|
101
|
+
|
102
|
+
#
|
103
|
+
# Determine if the current architecture is ARM with Hard Float
|
104
|
+
#
|
105
|
+
# @return [Boolean]
|
106
|
+
#
|
107
|
+
def armhf?(node)
|
108
|
+
# Add more arm variants as needed here
|
109
|
+
%w(armv6l armv7l)
|
110
|
+
.include?(node['kernel']['machine'])
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# Determine if the current architecture is AArch64
|
115
|
+
#
|
116
|
+
# @return [Boolean]
|
117
|
+
#
|
118
|
+
def aarch64?(node)
|
119
|
+
# Add more arm variants as needed here
|
120
|
+
%w(aarch64)
|
121
|
+
.include?(node['kernel']['machine'])
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# Determine if the current architecture is s390x
|
126
|
+
#
|
127
|
+
# @return [Boolean]
|
128
|
+
#
|
129
|
+
def s390x?(node)
|
130
|
+
%w(s390x)
|
131
|
+
.include?(node['kernel']['machine'])
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
module DSL
|
136
|
+
# @see Chef::Sugar::Architecture#_64_bit?
|
137
|
+
def _64_bit?; Chef::Sugar::Architecture._64_bit?(node); end
|
138
|
+
|
139
|
+
# @see Chef::Sugar::Architecture#_32_bit?
|
140
|
+
def _32_bit?; Chef::Sugar::Architecture._32_bit?(node); end
|
141
|
+
|
142
|
+
# @see Chef::Sugar::Architecture#intel?
|
143
|
+
def i386?; Chef::Sugar::Architecture.i386?(node); end
|
144
|
+
|
145
|
+
# @see Chef::Sugar::Architecture#intel?
|
146
|
+
def intel?; Chef::Sugar::Architecture.intel?(node); end
|
147
|
+
|
148
|
+
# @see Chef::Sugar::Architecture#sparc?
|
149
|
+
def sparc?; Chef::Sugar::Architecture.sparc?(node); end
|
150
|
+
|
151
|
+
# @see Chef::Sugar::Architecture#ppc64?
|
152
|
+
def ppc64?; Chef::Sugar::Architecture.ppc64?(node); end
|
153
|
+
|
154
|
+
# @see Chef::Sugar::Architecture#ppc64le?
|
155
|
+
def ppc64le?; Chef::Sugar::Architecture.ppc64le?(node); end
|
156
|
+
|
157
|
+
# @see Chef::Sugar::Architecture#powerpc?
|
158
|
+
def powerpc?; Chef::Sugar::Architecture.powerpc?(node); end
|
159
|
+
|
160
|
+
# @see Chef::Sugar::Architecture#arm?
|
161
|
+
def armhf?; Chef::Sugar::Architecture.armhf?(node); end
|
162
|
+
|
163
|
+
# @see Chef::Sugar::Architecture#aarch64?
|
164
|
+
def aarch64?; Chef::Sugar::Architecture.aarch64?(node); end
|
165
|
+
|
166
|
+
# @see Chef::Sugar::Architecture#s390x?
|
167
|
+
def s390x?; Chef::Sugar::Architecture.s390x?(node); end
|
168
|
+
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
class Chef
|
18
|
+
module Sugar
|
19
|
+
module Cloud
|
20
|
+
extend self
|
21
|
+
|
22
|
+
#
|
23
|
+
# Return true if the current current node is in "the cloud".
|
24
|
+
#
|
25
|
+
# @param [Chef::Node] node
|
26
|
+
# the node to check
|
27
|
+
#
|
28
|
+
# @return [Boolean]
|
29
|
+
#
|
30
|
+
def cloud?(node)
|
31
|
+
node.key?('cloud')
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Return true if the current current node is in EC2
|
36
|
+
#
|
37
|
+
# @param [Chef::Node] node
|
38
|
+
# the node to check
|
39
|
+
#
|
40
|
+
# @return [Boolean]
|
41
|
+
#
|
42
|
+
def ec2?(node)
|
43
|
+
node.key?('ec2')
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Return true if the current current node is in GCE
|
48
|
+
#
|
49
|
+
# @param [Chef::Node] node
|
50
|
+
# the node to check
|
51
|
+
#
|
52
|
+
# @return [Boolean]
|
53
|
+
#
|
54
|
+
def gce?(node)
|
55
|
+
node.key?('gce')
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Return true if the current current node is in Rackspace
|
60
|
+
#
|
61
|
+
# @param [Chef::Node] node
|
62
|
+
# the node to check
|
63
|
+
#
|
64
|
+
# @return [Boolean]
|
65
|
+
#
|
66
|
+
def rackspace?(node)
|
67
|
+
node.key?('rackspace')
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
# Return true if the current current node is in Eucalyptus
|
72
|
+
#
|
73
|
+
# @param [Chef::Node] node
|
74
|
+
# the node to check
|
75
|
+
#
|
76
|
+
# @return [Boolean]
|
77
|
+
#
|
78
|
+
def eucalyptus?(node)
|
79
|
+
node.key?('eucalyptus')
|
80
|
+
end
|
81
|
+
alias_method :euca?, :eucalyptus?
|
82
|
+
|
83
|
+
#
|
84
|
+
# Return true if the current current node is in Linode
|
85
|
+
#
|
86
|
+
# @param [Chef::Node] node
|
87
|
+
# the node to check
|
88
|
+
#
|
89
|
+
# @return [Boolean]
|
90
|
+
#
|
91
|
+
def linode?(node)
|
92
|
+
node.key?('linode')
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# Return true if the current current node is in Openstack
|
97
|
+
#
|
98
|
+
# @param [Chef::Node] node
|
99
|
+
# the node to check
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
#
|
103
|
+
def openstack?(node)
|
104
|
+
node.key?('openstack')
|
105
|
+
end
|
106
|
+
|
107
|
+
#
|
108
|
+
# Return true if the current current node is in Cloudstack
|
109
|
+
#
|
110
|
+
# @param [Chef::Node] node
|
111
|
+
# the node to check
|
112
|
+
#
|
113
|
+
# @return [Boolean]
|
114
|
+
#
|
115
|
+
def cloudstack?(node)
|
116
|
+
node.key?('cloudstack')
|
117
|
+
end
|
118
|
+
|
119
|
+
#
|
120
|
+
# Return true if the current current node is in Azure
|
121
|
+
#
|
122
|
+
# @param [Chef::Node] node
|
123
|
+
# the node to check
|
124
|
+
#
|
125
|
+
# @return [Boolean]
|
126
|
+
#
|
127
|
+
def azure?(node)
|
128
|
+
node.key?('azure')
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# Return true if the current current node is in DigitalOcean
|
133
|
+
#
|
134
|
+
# @param [Chef::Node] node
|
135
|
+
# the node to check
|
136
|
+
#
|
137
|
+
# @return [Boolean]
|
138
|
+
#
|
139
|
+
def digitalocean?(node)
|
140
|
+
node.key?('digital_ocean')
|
141
|
+
end
|
142
|
+
|
143
|
+
#
|
144
|
+
# Return true if the current current node is in SoftLayer
|
145
|
+
#
|
146
|
+
# @param [Chef::Node] node
|
147
|
+
# the node to check
|
148
|
+
#
|
149
|
+
# @return [Boolean]
|
150
|
+
#
|
151
|
+
def softlayer?(node)
|
152
|
+
node.key?('softlayer')
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
module DSL
|
157
|
+
# @see Chef::Sugar::Cloud#cloud?
|
158
|
+
def cloud?; Chef::Sugar::Cloud.cloud?(node); end
|
159
|
+
|
160
|
+
# @see Chef::Sugar::Cloud#ec2?
|
161
|
+
def ec2?; Chef::Sugar::Cloud.ec2?(node); end
|
162
|
+
|
163
|
+
# @see Chef::Sugar::Cloud#gce?
|
164
|
+
def gce?; Chef::Sugar::Cloud.gce?(node); end
|
165
|
+
|
166
|
+
# @see Chef::Sugar::Cloud#rackspace?
|
167
|
+
def rackspace?; Chef::Sugar::Cloud.rackspace?(node); end
|
168
|
+
|
169
|
+
# @see Chef::Sugar::Cloud#eucalyptus?
|
170
|
+
def eucalyptus?; Chef::Sugar::Cloud.eucalyptus?(node); end
|
171
|
+
alias_method :euca?, :eucalyptus?
|
172
|
+
|
173
|
+
# @see Chef::Sugar::Cloud#linode?
|
174
|
+
def linode?; Chef::Sugar::Cloud.linode?(node); end
|
175
|
+
|
176
|
+
# @see Chef::Sugar::Cloud#openstack?
|
177
|
+
def openstack?; Chef::Sugar::Cloud.openstack?(node); end
|
178
|
+
|
179
|
+
# @see Chef::Sugar::Cloud#cloudstack?
|
180
|
+
def cloudstack?; Chef::Sugar::Cloud.cloudstack?(node); end
|
181
|
+
|
182
|
+
# @see Chef::Sugar::Cloud#azure?
|
183
|
+
def azure?; Chef::Sugar::Cloud.azure?(node); end
|
184
|
+
|
185
|
+
# @see Chef::Sugar::Cloud#digitalocean?
|
186
|
+
def digitalocean?; Chef::Sugar::Cloud.digitalocean?(node); end
|
187
|
+
|
188
|
+
# @see Chef::Sugar::Cloud#softlayer?
|
189
|
+
def softlayer?; Chef::Sugar::Cloud.softlayer?(node); end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|