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 +2 -2
- data/VERSION +1 -1
- data/bootstrap/os/ubuntu/06_puppet.sh +4 -5
- data/corl.gemspec +2 -2
- data/lib/CORL/action/provision.rb +0 -1
- data/lib/CORL/configuration/file.rb +7 -6
- data/lib/CORL/machine/physical.rb +1 -1
- data/lib/CORL/provisioner/puppetnode.rb +41 -27
- data/lib/core/plugin/network.rb +2 -1
- data/lib/core/plugin/node.rb +28 -16
- data/lib/core/plugin/provisioner.rb +49 -65
- data/locales/en.yml +3 -2
- metadata +24 -24
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.
|
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.
|
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.
|
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
|
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
|
36
|
-
chmod 0440 /etc/hiera.yaml || exit
|
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
|
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.
|
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-
|
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"]
|
@@ -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
|
-
|
75
|
+
parse_properties = parser.parse(raw)
|
76
76
|
|
77
|
-
generate_routes.call(config_name,
|
78
|
-
properties.import(
|
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
|
-
|
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
|
@@ -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
|
120
|
-
|
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
|
131
|
-
base_directory
|
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
|
-
|
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
|
-
|
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
|
-
|
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?(
|
203
|
-
import(
|
215
|
+
if File.exists?(type_gateway)
|
216
|
+
import(type_gateway)
|
204
217
|
classes[resource_name] = parameters
|
205
218
|
end
|
206
219
|
|
207
|
-
|
208
|
-
Dir.glob(File.join(
|
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
|
-
|
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?(
|
221
|
-
import(
|
233
|
+
if File.exists?(type_gateway)
|
234
|
+
import(type_gateway)
|
222
235
|
classes[resource_name] = parameters
|
223
236
|
end
|
224
237
|
|
225
|
-
|
226
|
-
|
227
|
-
|
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
|
data/lib/core/plugin/network.rb
CHANGED
@@ -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(:
|
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
|
data/lib/core/plugin/node.rb
CHANGED
@@ -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
|
371
|
-
|
373
|
+
config = Config.ensure(options)
|
374
|
+
success = true
|
372
375
|
|
373
376
|
provisioners.each do |provider, collection|
|
374
|
-
|
375
|
-
profiles = provider_info[:profiles]
|
377
|
+
ui.info("Building #{provider} provisioner collection")
|
376
378
|
|
377
379
|
collection.each do |name, provisioner|
|
378
|
-
|
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
|
-
|
389
|
+
if success
|
390
|
+
ui.success("Saving successful build")
|
391
|
+
|
392
|
+
myself[:build] = Time.now.to_s
|
383
393
|
|
384
|
-
|
385
|
-
|
386
|
-
|
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(
|
639
|
+
alert(data.gsub(/^(\e\[\d\d?m)?\[[^\]]+\]\s*/, '\\1'))
|
628
640
|
else
|
629
|
-
render(data.gsub(
|
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
|
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[:
|
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
|
-
|
155
|
+
unless project
|
156
|
+
ui.warn("Project #{cyan(name)} failed to initialize")
|
157
|
+
package_success = false
|
158
|
+
end
|
182
159
|
|
183
|
-
|
184
|
-
|
160
|
+
if package_success
|
161
|
+
package_info.import(project.export)
|
162
|
+
locations[:package][name] = package_directory
|
185
163
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
-
|
213
|
-
|
214
|
-
|
193
|
+
if success
|
194
|
+
# Build provider specific components
|
195
|
+
success = yield(locations, package_info) if block_given?
|
215
196
|
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
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
|
+
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *3809680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: fog
|
27
|
-
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: *
|
35
|
+
version_requirements: *3808700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: unf
|
38
|
-
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: *
|
46
|
+
version_requirements: *3807080
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: facter
|
49
|
-
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: *
|
57
|
+
version_requirements: *3821840
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: hiera
|
60
|
-
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: *
|
68
|
+
version_requirements: *3820160
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: puppet
|
71
|
-
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: *
|
79
|
+
version_requirements: *3830860
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
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: *
|
90
|
+
version_requirements: *3830020
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: jeweler
|
93
|
-
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: *
|
101
|
+
version_requirements: *3829000
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rspec
|
104
|
-
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: *
|
112
|
+
version_requirements: *3828100
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rdoc
|
115
|
-
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: *
|
123
|
+
version_requirements: *3827260
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: yard
|
126
|
-
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: *
|
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
|