corl 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
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