corl 0.4.4 → 0.4.5

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.
data/Gemfile.lock CHANGED
@@ -67,7 +67,7 @@ GEM
67
67
  log4r (1.1.10)
68
68
  mime-types (1.25.1)
69
69
  mini_portile (0.5.2)
70
- multi_json (1.9.0)
70
+ multi_json (1.9.2)
71
71
  multi_xml (0.5.5)
72
72
  multipart-post (2.0.0)
73
73
  net-scp (1.1.2)
@@ -76,7 +76,7 @@ GEM
76
76
  netrc (0.7.7)
77
77
  nokogiri (1.6.1)
78
78
  mini_portile (~> 0.5.0)
79
- nucleon (0.1.7)
79
+ nucleon (0.1.8)
80
80
  celluloid (~> 0.15)
81
81
  childprocess (~> 0.5.0)
82
82
  deep_merge (~> 1.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.5
@@ -14,10 +14,9 @@ chmod 0644 /etc/apt/sources.list.d/puppet.list || exit 62
14
14
  # Install Puppet
15
15
  apt-get -y update || exit 63
16
16
  apt-get -y install puppet || exit 64
17
- gem install libshadow || exit 65
18
17
 
19
18
  # Set up Hiera configuration
20
- mkdir -p /var/corl/config || exit 66
19
+ mkdir -p /var/corl/config || exit 65
21
20
 
22
21
  ( cat <<'EOP'
23
22
  ---
@@ -32,7 +31,7 @@ mkdir -p /var/corl/config || exit 66
32
31
  :hierarchy:
33
32
  - common
34
33
  EOP
35
- ) > /etc/hiera.yaml || exit 67
36
- chmod 0440 /etc/hiera.yaml || exit 68
34
+ ) > /etc/hiera.yaml || exit 66
35
+ chmod 0440 /etc/hiera.yaml || exit 67
37
36
 
38
- ln -fs /etc/hiera.yaml /etc/puppet/hiera.yaml || exit 69
37
+ ln -fs /etc/hiera.yaml /etc/puppet/hiera.yaml || exit 68
data/corl.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "corl"
8
- s.version = "0.4.4"
8
+ s.version = "0.4.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Adrian Webb"]
12
- s.date = "2014-03-19"
12
+ s.date = "2014-03-20"
13
13
  s.description = "Framework that provides a simple foundation for growing organically in the cloud"
14
14
  s.email = "adrian.webb@coralnexus.com"
15
15
  s.executables = ["corl"]
@@ -12,7 +12,6 @@ class Provision < Plugin::CloudAction
12
12
  :provision_failure
13
13
 
14
14
  register :dry_run, :bool, false
15
- register :color, :bool, true
16
15
  end
17
16
  end
18
17
 
@@ -72,10 +72,10 @@ class File < CORL.plugin_class(:configuration)
72
72
 
73
73
  if parser && raw && ! raw.empty?
74
74
  logger.debug("Source configuration file contents: #{raw}")
75
- file_properties = parser.parse(raw)
75
+ parse_properties = parser.parse(raw)
76
76
 
77
- generate_routes.call(config_name, file_properties)
78
- properties.import(file_properties)
77
+ generate_routes.call(config_name, parse_properties)
78
+ properties.import(parse_properties)
79
79
  end
80
80
  end
81
81
  end
@@ -121,8 +121,9 @@ class File < CORL.plugin_class(:configuration)
121
121
  else
122
122
  if local_router.is_a?(String)
123
123
  # Router is a config_name string
124
- file_data.set([ local_router, keys ].flatten, value)
125
- elsif router.is_a?(Hash)
124
+ file_data.set([ local_router, keys ].flatten, value)
125
+
126
+ elsif local_router.is_a?(Hash)
126
127
  # Router is a hash with sub options we have to pick from
127
128
  config_name = select_largest(local_router)
128
129
  file_data.set([ config_name, keys ].flatten, value)
@@ -182,7 +183,7 @@ class File < CORL.plugin_class(:configuration)
182
183
  end
183
184
  if success && ! config_files.empty?
184
185
  commit_files = [ config_files, method_config.get_array(:files) ].flatten
185
-
186
+
186
187
  logger.debug("Source configuration rendering: #{rendering}")
187
188
  success = update_project(commit_files, method_config)
188
189
  end
@@ -34,7 +34,7 @@ class Physical < CORL.plugin_class(:machine)
34
34
  #---
35
35
 
36
36
  def hostname
37
- fact(:hostname)
37
+ fact(:fqdn)
38
38
  end
39
39
 
40
40
  #---
@@ -27,10 +27,10 @@ class Puppetnode < CORL.plugin_class(:provisioner)
27
27
  :debug => { :name => 'debug', :send => :info }
28
28
  }
29
29
  str = msg.respond_to?(:multiline) ? msg.multiline : msg.to_s
30
- str = msg.source == "Puppet" ? str : "#{msg.source}: #{str}"
30
+ str = msg.source == "Puppet" ? str : "#{CORL.blue(msg.source)}: #{str}"
31
31
  level = levels[msg.level]
32
32
 
33
- CORL.ui_group("puppetnode::#{name}(#{level[:name]})") do |ui|
33
+ CORL.ui_group("puppetnode::#{name}(#{CORL.yellow(level[:name])})", :cyan) do |ui|
34
34
  ui.send(level[:send], str)
35
35
  end
36
36
  end
@@ -116,23 +116,24 @@ class Puppetnode < CORL.plugin_class(:provisioner)
116
116
  # Provisioner interface operations
117
117
 
118
118
  def build(options = {})
119
- super do |locations, package_info, init_location|
120
- init_location.call(:modules, nil)
119
+ super do |locations, package_info|
120
+ success = true
121
121
 
122
- init_location.call(:profiles, :pp)
123
- init_location.call(:default, :pp)
124
-
125
122
  # Build modules
126
-
127
123
  locations[:module] = {}
128
124
 
129
125
  init_profile = lambda do |package_name, profile_name, profile_info|
130
- package_id = id(package_name)
131
- base_directory = File.join(locations[:modules], package_id.to_s, profile_name.to_s)
126
+ package_id = id(package_name)
127
+ base_directory = File.join(locations[:build], 'modules', package_id.to_s, profile_name.to_s)
128
+ profile_success = true
129
+
130
+ ui.info("Building CORL profile #{blue(profile_name)} modules into #{green(base_directory)}")
132
131
 
133
132
  if profile_info.has_key?(:modules)
134
133
  profile_info[:modules].each do |module_name, module_reference|
135
134
  module_directory = File.join(base_directory, module_name.to_s)
135
+
136
+ ui.info("Building Puppet module #{blue(module_name)} at #{purple(module_reference)} into #{green(module_directory)}")
136
137
 
137
138
  module_project = CORL.project(extended_config(:puppet_module, {
138
139
  :directory => File.join(build_directory, module_directory),
@@ -140,22 +141,34 @@ class Puppetnode < CORL.plugin_class(:provisioner)
140
141
  :create => true,
141
142
  :pull => true
142
143
  }))
143
- raise unless module_project
144
+ unless module_project
145
+ ui.warn("Puppet module #{cyan(module_name)} failed to initialize")
146
+ profile_success = false
147
+ break
148
+ end
144
149
  end
145
- locations[:module][profile_id(package_name, profile_name)] = base_directory
150
+ locations[:module][profile_id(package_name, profile_name)] = base_directory if profile_success
151
+ profile_success
146
152
  end
147
153
  end
148
154
 
149
155
  hash(package_info.get([ :provisioners, plugin_provider ])).each do |package_name, info|
150
156
  if info.has_key?(:profiles)
151
157
  info[:profiles].each do |profile_name, profile_info|
152
- init_profile.call(package_name, profile_name, profile_info)
158
+ unless init_profile.call(package_name, profile_name, profile_info)
159
+ success = false
160
+ break
161
+ end
153
162
  end
154
163
  end
155
164
  end
156
165
  profiles.each do |profile_name, profile_info|
157
- init_profile.call(plugin_name, profile_name, profile_info)
158
- end
166
+ unless init_profile.call(plugin_name, profile_name, profile_info)
167
+ success = false
168
+ break
169
+ end
170
+ end
171
+ success
159
172
  end
160
173
  end
161
174
 
@@ -194,37 +207,38 @@ class Puppetnode < CORL.plugin_class(:provisioner)
194
207
  classes = {}
195
208
 
196
209
  locations[:package].each do |name, package_directory|
197
- gateway = File.join(build_directory, package_directory, "#{type}.pp")
210
+ type_gateway = File.join(build_directory, package_directory, "#{type}.pp")
198
211
  resource_name = concatenate([ name, type ])
199
212
 
200
213
  add_search_path(type, resource_name) if add_search_path
201
214
 
202
- if File.exists?(gateway)
203
- import(gateway)
215
+ if File.exists?(type_gateway)
216
+ import(type_gateway)
204
217
  classes[resource_name] = parameters
205
218
  end
206
219
 
207
- directory = File.join(build_directory, package_directory, type.to_s)
208
- Dir.glob(File.join(directory, '*.pp')).each do |file|
220
+ type_directory = File.join(build_directory, package_directory, type.to_s)
221
+ Dir.glob(File.join(type_directory, '*.pp')).each do |file|
209
222
  resource_name = concatenate([ name, type, File.basename(file).gsub('.pp', '') ])
210
223
  import(file)
211
224
  classes[resource_name] = parameters
212
225
  end
213
226
  end
214
227
 
215
- gateway = File.join(build_directory, locations[:build], "#{type}.pp")
228
+ type_gateway = File.join(directory, "#{type}.pp")
216
229
  resource_name = concatenate([ plugin_name, type ])
217
230
 
218
231
  add_search_path(type, resource_name) if add_search_path
219
232
 
220
- if File.exists?(gateway)
221
- import(gateway)
233
+ if File.exists?(type_gateway)
234
+ import(type_gateway)
222
235
  classes[resource_name] = parameters
223
236
  end
224
237
 
225
- if locations.has_key?(type)
226
- directory = File.join(build_directory, locations[type])
227
- Dir.glob(File.join(directory, '*.pp')).each do |file|
238
+ type_directory = File.join(directory, type.to_s)
239
+
240
+ if File.directory?(type_directory)
241
+ Dir.glob(File.join(type_directory, '*.pp')).each do |file|
228
242
  resource_name = concatenate([ plugin_name, type, File.basename(file).gsub('.pp', '') ])
229
243
  import(file)
230
244
  classes[resource_name] = parameters
@@ -249,7 +263,7 @@ class Puppetnode < CORL.plugin_class(:provisioner)
249
263
  profiles.each do |profile|
250
264
  classes[profile.to_s] = { :require => 'Anchor[profile_start]' }
251
265
  end
252
-
266
+
253
267
  # Compile catalog
254
268
  node.classes = classes
255
269
  compiler.compile
@@ -4,6 +4,7 @@ module Plugin
4
4
  class Network < CORL.plugin_class(:base)
5
5
 
6
6
  init_plugin_collection
7
+ task_class TaskThread
7
8
 
8
9
  #-----------------------------------------------------------------------------
9
10
  # Cloud plugin interface
@@ -133,7 +134,7 @@ class Network < CORL.plugin_class(:base)
133
134
  local_node = node_by_ip(ip_address, require_new)
134
135
 
135
136
  if local_node.nil?
136
- name = Util::Data.ensure_value(lookup(:hostname), ip_address)
137
+ name = Util::Data.ensure_value(lookup(:fqdn), ip_address)
137
138
  local_node = CORL.node(name, extended_config(:local_node).import({ :meta => { :parent => myself }}), :local)
138
139
  else
139
140
  local_node.network = myself
@@ -4,6 +4,7 @@ module Plugin
4
4
  class Node < CORL.plugin_class(:base)
5
5
 
6
6
  include Celluloid
7
+ task_class TaskThread
7
8
 
8
9
  #-----------------------------------------------------------------------------
9
10
  # Node plugin interface
@@ -11,13 +12,15 @@ class Node < CORL.plugin_class(:base)
11
12
  def normalize(reload)
12
13
  super
13
14
 
15
+ @class_color = :purple
16
+
14
17
  export.each do |name, value|
15
18
  myself[name] = value
16
19
  end
17
20
 
18
21
  yield if block_given? # Chance to create a machine to feed hostname
19
22
 
20
- ui.resource = hostname
23
+ ui.resource = Util::Console.colorize(hostname, @class_color)
21
24
  logger = hostname
22
25
 
23
26
  myself[:settings] = [ "all", plugin_provider.to_s, plugin_name.to_s ] | setting(:settings, [], :array)
@@ -162,7 +165,7 @@ class Node < CORL.plugin_class(:base)
162
165
  hostname = myself[:hostname]
163
166
 
164
167
  if hostname.to_s != ui.resource.to_s
165
- ui.resource = hostname
168
+ ui.resource = Util::Console.colorize(hostname, @class_color)
166
169
  logger = hostname
167
170
  end
168
171
  hostname
@@ -221,7 +224,7 @@ class Node < CORL.plugin_class(:base)
221
224
 
222
225
  def private_key
223
226
  config_key = myself[:private_key]
224
- return File.expand_path(config_key) if config_key
227
+ return File.expand_path(config_key, network.directory) if config_key
225
228
  nil
226
229
  end
227
230
 
@@ -233,7 +236,7 @@ class Node < CORL.plugin_class(:base)
233
236
 
234
237
  def public_key
235
238
  config_key = myself[:public_key]
236
- return File.expand_path(config_key) if config_key
239
+ return File.expand_path(config_key, network.directory) if config_key
237
240
  end
238
241
 
239
242
  #---
@@ -367,24 +370,33 @@ class Node < CORL.plugin_class(:base)
367
370
  # Machine operations
368
371
 
369
372
  def build(options = {})
370
- config = Config.ensure(options)
371
- info = provisioner_info
373
+ config = Config.ensure(options)
374
+ success = true
372
375
 
373
376
  provisioners.each do |provider, collection|
374
- provider_info = info[provider]
375
- profiles = provider_info[:profiles]
377
+ ui.info("Building #{provider} provisioner collection")
376
378
 
377
379
  collection.each do |name, provisioner|
378
- provisioner.build(options)
380
+ ui.info("Building #{name} provisioner")
381
+
382
+ unless provisioner.build(options)
383
+ success = false
384
+ break
385
+ end
379
386
  end
380
387
  end
381
388
 
382
- myself[:build] = Time.now.to_s
389
+ if success
390
+ ui.success("Saving successful build")
391
+
392
+ myself[:build] = Time.now.to_s
383
393
 
384
- save(extended_config(:build, {
385
- :message => config.get(:message, "Built #{plugin_provider} node: #{plugin_name}"),
386
- :remote => config.get(:remote, :edit)
387
- }))
394
+ success = save(extended_config(:build, {
395
+ :message => config.get(:message, "Built #{plugin_provider} node: #{plugin_name}"),
396
+ :remote => config.get(:remote, :edit)
397
+ }))
398
+ end
399
+ success
388
400
  end
389
401
 
390
402
  #---
@@ -624,9 +636,9 @@ class Node < CORL.plugin_class(:base)
624
636
  results = active_machine.exec(commands, config.export) do |type, command, data|
625
637
  unless local?
626
638
  if type == :error
627
- alert(data.gsub(/^\[[^\]]+\]\s*/, ''))
639
+ alert(data.gsub(/^(\e\[\d\d?m)?\[[^\]]+\]\s*/, '\\1'))
628
640
  else
629
- render(data.gsub(/^\[[^\]]+\]\s*/, ''))
641
+ render(data.gsub(/^(\e\[\d\d?m)?\[[^\]]+\]\s*/, '\\1'))
630
642
  end
631
643
  end
632
644
  yield(:progress, { :type => type, :command => command, :data => data }) if block_given?
@@ -38,7 +38,7 @@ class Provisioner < CORL.plugin_class(:base)
38
38
  end
39
39
 
40
40
  def directory
41
- myself[:directory]
41
+ File.join(network.directory, myself[:directory])
42
42
  end
43
43
 
44
44
  #---
@@ -136,89 +136,79 @@ class Provisioner < CORL.plugin_class(:base)
136
136
  #---
137
137
 
138
138
  def build(options = {})
139
- config = Config.ensure(options)
140
-
141
- locations = Config.new({ :package => {} })
139
+ config = Config.ensure(options)
140
+ success = true
141
+ locations = Config.new({ :build => id.to_s, :package => {} })
142
142
  package_info = Config.new
143
143
 
144
- init_location = lambda do |name, ext = '', base_directory = nil|
145
- name = name.to_sym
146
- base_directory = directory if base_directory.nil?
147
- build_base = build_directory
148
-
149
- # Create directory
150
- locations[name] = File.join(locations[:build], name.to_s)
151
- FileUtils.mkdir_p(File.join(build_base, locations[name]))
152
-
153
- # Copy directory contents
154
- unless ext.nil?
155
- ext = ! ext.to_s.empty? ? ".#{ext}" : ''
156
- local_directory = File.join(base_directory, name.to_s)
157
-
158
- if File.directory?(local_directory)
159
- unless Dir.glob(File.join(local_directory, "*#{ext}")).empty?
160
- FileUtils.cp_r(local_directory, File.join(build_base, locations[:build]))
161
- end
162
- end
163
-
164
- # Copy gateway file
165
- gateway_file = File.join(base_directory, "#{name}#{ext}")
166
-
167
- if File.exists?(gateway_file)
168
- FileUtils.cp(gateway_file, File.join(build_base, locations[:build]))
169
- end
170
- end
171
- end
172
-
173
144
  init_package = lambda do |name, reference|
174
- package_directory = File.join(locations[:packages], id(name).to_s)
145
+ package_directory = File.join(locations[:build], 'packages', id(name).to_s)
146
+ package_success = true
147
+
148
+ ui.info("Building package #{blue(name)} at #{purple(reference)} into #{green(package_directory)}")
175
149
 
176
150
  project = CORL.configuration(extended_config(:package, {
177
151
  :directory => File.join(build_directory, package_directory),
178
152
  :url => reference,
179
153
  :create => true
180
154
  }))
181
- raise unless project
155
+ unless project
156
+ ui.warn("Project #{cyan(name)} failed to initialize")
157
+ package_success = false
158
+ end
182
159
 
183
- package_info.import(project.export)
184
- locations[:package][name] = package_directory
160
+ if package_success
161
+ package_info.import(project.export)
162
+ locations[:package][name] = package_directory
185
163
 
186
- if project.get([ :provisioners, plugin_provider ], false)
187
- project.get_hash([ :provisioners, plugin_provider ]).each do |prov_name, info|
188
- if info.has_key?(:packages)
189
- info[:packages].each do |sub_name, sub_reference|
190
- init_package.call(sub_name, sub_reference)
164
+ if project.get([ :provisioners, plugin_provider ], false)
165
+ project.get_hash([ :provisioners, plugin_provider ]).each do |prov_name, info|
166
+ if info.has_key?(:packages)
167
+ info[:packages].each do |sub_name, sub_reference|
168
+ unless init_package.call(sub_name, sub_reference)
169
+ package_success = false
170
+ break
171
+ end
172
+ end
191
173
  end
192
174
  end
193
175
  end
194
176
  end
177
+ package_success
195
178
  end
196
179
 
197
- locations[:build] = id.to_s
198
180
  local_build_directory = File.join(build_directory, locations[:build])
199
181
 
200
182
  FileUtils.rm_rf(local_build_directory)
201
183
  FileUtils.mkdir_p(local_build_directory)
202
184
 
203
- init_location.call(:packages, nil)
204
-
205
185
  # Build packages
206
186
  packages.each do |name, reference|
207
- init_package.call(name, reference)
187
+ unless init_package.call(name, reference)
188
+ success = false
189
+ break
190
+ end
208
191
  end
209
-
210
- yield(locations, package_info, init_location) if block_given?
211
192
 
212
- myself[:build_locations] = locations.export
213
- myself[:build_info] = package_info.get([ :provisioners, plugin_provider ])
214
- myself[:build_profiles] = find_profiles
193
+ if success
194
+ # Build provider specific components
195
+ success = yield(locations, package_info) if block_given?
215
196
 
216
- network.save(config.import({
217
- :commit => true,
218
- :allow_empty => true,
219
- :message => config.get(:message, "Built #{plugin_provider} provisioner #{plugin_name}"),
220
- :remote => config.get(:remote, :edit)
221
- }))
197
+ if success
198
+ # Save the updates (should build the same on all nodes in same system)
199
+ myself[:build_locations] = locations.export
200
+ myself[:build_info] = package_info.get([ :provisioners, plugin_provider ])
201
+ myself[:build_profiles] = find_profiles
202
+
203
+ success = network.save(config.import({
204
+ :commit => true,
205
+ :allow_empty => true,
206
+ :message => config.get(:message, "Built #{plugin_provider} provisioner #{plugin_name}"),
207
+ :remote => config.get(:remote, :edit)
208
+ }))
209
+ end
210
+ end
211
+ success
222
212
  end
223
213
 
224
214
  #---
@@ -232,16 +222,10 @@ class Provisioner < CORL.plugin_class(:base)
232
222
 
233
223
  def provision(profiles, options = {})
234
224
  config = Config.ensure(options)
235
-
236
- use_colors = Util::Console.use_colors
237
- Util::Console.use_colors = config.get(:color, true)
238
-
239
225
  success = yield(config) if block_given?
226
+
240
227
  Config.save_properties(Config.get_options(:corl_log)) if success
241
228
  success
242
-
243
- ensure
244
- Util::Console.use_colors = use_colors
245
229
  end
246
230
 
247
231
  #-----------------------------------------------------------------------------
@@ -310,7 +294,7 @@ class Provisioner < CORL.plugin_class(:base)
310
294
  str.to_s.split('__')
311
295
  end.flatten
312
296
  else
313
- components = [ components.to_s ]
297
+ components = [ components.to_s.split('__') ].flatten
314
298
  end
315
299
 
316
300
  if capitalize
data/locales/en.yml CHANGED
@@ -152,11 +152,12 @@ en:
152
152
  Project reference %{value} failed to parse or provider %{provider} isn't loaded >> Possible providers: %{choices}
153
153
  start: |-
154
154
  Now seeding CORL node
155
+ build:
156
+ start:
157
+ Building provisioner project
155
158
  provision:
156
159
  options:
157
160
  dry_run: |-
158
161
  Whether or not to build the provisioner catalog without configuring the system (default %{default_value})
159
- color: |-
160
- Whether or not to output log messages in color (default %{default_value})
161
162
  start: |-
162
163
  Starting provision run
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-19 00:00:00.000000000 Z
12
+ date: 2014-03-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nucleon
16
- requirement: &13324860 !ruby/object:Gem::Requirement
16
+ requirement: &3809680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13324860
24
+ version_requirements: *3809680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: fog
27
- requirement: &13324220 !ruby/object:Gem::Requirement
27
+ requirement: &3808700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.20'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *13324220
35
+ version_requirements: *3808700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: unf
38
- requirement: &13323500 !ruby/object:Gem::Requirement
38
+ requirement: &3807080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0.1'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *13323500
46
+ version_requirements: *3807080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: facter
49
- requirement: &13320840 !ruby/object:Gem::Requirement
49
+ requirement: &3821840 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.7'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *13320840
57
+ version_requirements: *3821840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: hiera
60
- requirement: &13320140 !ruby/object:Gem::Requirement
60
+ requirement: &3820160 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '1.3'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *13320140
68
+ version_requirements: *3820160
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: puppet
71
- requirement: &13319540 !ruby/object:Gem::Requirement
71
+ requirement: &3830860 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '3.2'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *13319540
79
+ version_requirements: *3830860
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &13319060 !ruby/object:Gem::Requirement
82
+ requirement: &3830020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '1.2'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *13319060
90
+ version_requirements: *3830020
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &13318580 !ruby/object:Gem::Requirement
93
+ requirement: &3829000 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '2.0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *13318580
101
+ version_requirements: *3829000
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rspec
104
- requirement: &13944680 !ruby/object:Gem::Requirement
104
+ requirement: &3828100 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '2.10'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *13944680
112
+ version_requirements: *3828100
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rdoc
115
- requirement: &13804500 !ruby/object:Gem::Requirement
115
+ requirement: &3827260 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '3.12'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *13804500
123
+ version_requirements: *3827260
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: yard
126
- requirement: &13627500 !ruby/object:Gem::Requirement
126
+ requirement: &3826400 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,7 +131,7 @@ dependencies:
131
131
  version: '0.8'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *13627500
134
+ version_requirements: *3826400
135
135
  description: Framework that provides a simple foundation for growing organically in
136
136
  the cloud
137
137
  email: adrian.webb@coralnexus.com