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 +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
|