corl 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/corl.gemspec +12 -7
- data/lib/CORL/action/build.rb +30 -0
- data/lib/CORL/action/provision.rb +34 -8
- data/lib/CORL/configuration/file.rb +50 -64
- data/lib/CORL/provisioner/puppetnode.rb +186 -314
- data/lib/core/mixin/lookup.rb +20 -15
- data/lib/core/mixin/macro/network_settings.rb +52 -0
- data/lib/core/plugin/action.rb +1 -1
- data/lib/core/plugin/configuration.rb +43 -4
- data/lib/core/plugin/network.rb +16 -3
- data/lib/core/plugin/node.rb +69 -2
- data/lib/core/plugin/provisioner.rb +286 -11
- data/lib/{CORL/provisioner/puppetnode → core/util/puppet}/resource.rb +36 -40
- data/lib/{CORL/provisioner/puppetnode → core/util/puppet}/resource_group.rb +33 -41
- data/lib/core/util/puppet.rb +303 -0
- data/lib/corl.rb +34 -11
- data/lib/facter/corl_build.rb +8 -0
- data/lib/facter/corl_exists.rb +3 -3
- data/lib/facter/corl_network.rb +1 -1
- data/lib/facter/custom_facts.rb +24 -0
- data/lib/facter/vagrant_exists.rb +15 -0
- data/lib/hiera/corl_logger.rb +1 -1
- data/lib/puppet/indirector/corl.rb +2 -2
- data/lib/puppet/parser/functions/corl_include.rb +10 -14
- data/lib/puppet/parser/functions/corl_initialize.rb +15 -0
- data/lib/puppet/parser/functions/{deep_merge.rb → corl_merge.rb} +4 -4
- data/lib/puppet/parser/functions/corl_resources.rb +9 -4
- data/lib/puppet/parser/functions/global_array.rb +1 -1
- data/lib/puppet/parser/functions/global_hash.rb +1 -1
- data/lib/puppet/parser/functions/global_param.rb +1 -1
- data/lib/puppet/parser/functions/interpolate.rb +1 -1
- data/lib/puppet/parser/functions/module_array.rb +8 -9
- data/lib/puppet/parser/functions/module_hash.rb +7 -8
- data/lib/puppet/parser/functions/module_param.rb +4 -5
- data/lib/puppet/parser/functions/name.rb +1 -1
- data/lib/puppet/parser/functions/render.rb +5 -5
- metadata +34 -29
- data/lib/CORL/extension/puppetloader.rb +0 -24
- data/lib/puppet/parser/functions/config_initialized.rb +0 -26
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
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.3"
|
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-16"
|
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"]
|
@@ -45,6 +45,7 @@ Gem::Specification.new do |s|
|
|
45
45
|
"corl.gemspec",
|
46
46
|
"lib/CORL/action/authorize.rb",
|
47
47
|
"lib/CORL/action/bootstrap.rb",
|
48
|
+
"lib/CORL/action/build.rb",
|
48
49
|
"lib/CORL/action/destroy.rb",
|
49
50
|
"lib/CORL/action/exec.rb",
|
50
51
|
"lib/CORL/action/image.rb",
|
@@ -60,7 +61,6 @@ Gem::Specification.new do |s|
|
|
60
61
|
"lib/CORL/action/stop.rb",
|
61
62
|
"lib/CORL/configuration/file.rb",
|
62
63
|
"lib/CORL/event/puppet.rb",
|
63
|
-
"lib/CORL/extension/puppetloader.rb",
|
64
64
|
"lib/CORL/machine/aws.rb",
|
65
65
|
"lib/CORL/machine/physical.rb",
|
66
66
|
"lib/CORL/machine/rackspace.rb",
|
@@ -69,13 +69,12 @@ Gem::Specification.new do |s|
|
|
69
69
|
"lib/CORL/node/local.rb",
|
70
70
|
"lib/CORL/node/rackspace.rb",
|
71
71
|
"lib/CORL/provisioner/puppetnode.rb",
|
72
|
-
"lib/CORL/provisioner/puppetnode/resource.rb",
|
73
|
-
"lib/CORL/provisioner/puppetnode/resource_group.rb",
|
74
72
|
"lib/CORL/template/environment.rb",
|
75
73
|
"lib/core/errors.rb",
|
76
74
|
"lib/core/facade.rb",
|
77
75
|
"lib/core/mixin/action/keypair.rb",
|
78
76
|
"lib/core/mixin/lookup.rb",
|
77
|
+
"lib/core/mixin/macro/network_settings.rb",
|
79
78
|
"lib/core/mod/fog_aws_server.rb",
|
80
79
|
"lib/core/mod/hiera_backend.rb",
|
81
80
|
"lib/core/plugin/action.rb",
|
@@ -86,17 +85,23 @@ Gem::Specification.new do |s|
|
|
86
85
|
"lib/core/plugin/network.rb",
|
87
86
|
"lib/core/plugin/node.rb",
|
88
87
|
"lib/core/plugin/provisioner.rb",
|
88
|
+
"lib/core/util/puppet.rb",
|
89
|
+
"lib/core/util/puppet/resource.rb",
|
90
|
+
"lib/core/util/puppet/resource_group.rb",
|
89
91
|
"lib/corl.rb",
|
92
|
+
"lib/facter/corl_build.rb",
|
90
93
|
"lib/facter/corl_config_ready.rb",
|
91
94
|
"lib/facter/corl_exists.rb",
|
92
95
|
"lib/facter/corl_network.rb",
|
96
|
+
"lib/facter/custom_facts.rb",
|
97
|
+
"lib/facter/vagrant_exists.rb",
|
93
98
|
"lib/hiera/corl_logger.rb",
|
94
99
|
"lib/puppet/indirector/corl.rb",
|
95
100
|
"lib/puppet/indirector/data_binding/corl.rb",
|
96
|
-
"lib/puppet/parser/functions/config_initialized.rb",
|
97
101
|
"lib/puppet/parser/functions/corl_include.rb",
|
102
|
+
"lib/puppet/parser/functions/corl_initialize.rb",
|
103
|
+
"lib/puppet/parser/functions/corl_merge.rb",
|
98
104
|
"lib/puppet/parser/functions/corl_resources.rb",
|
99
|
-
"lib/puppet/parser/functions/deep_merge.rb",
|
100
105
|
"lib/puppet/parser/functions/ensure.rb",
|
101
106
|
"lib/puppet/parser/functions/file_exists.rb",
|
102
107
|
"lib/puppet/parser/functions/global_array.rb",
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Build < Plugin::CloudAction
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :network_failure
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
#-----------------------------------------------------------------------------
|
16
|
+
# Operations
|
17
|
+
|
18
|
+
def execute
|
19
|
+
super do |node, network|
|
20
|
+
if network && node
|
21
|
+
info('corl.actions.build.start')
|
22
|
+
node.build
|
23
|
+
else
|
24
|
+
myself.status = code.network_failure
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -8,22 +8,48 @@ class Provision < Plugin::CloudAction
|
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
11
|
-
|
12
|
-
|
11
|
+
codes :network_failure,
|
12
|
+
:provision_failure
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def arguments
|
17
|
-
[ :directory ]
|
18
|
-
end
|
19
|
-
|
20
16
|
#-----------------------------------------------------------------------------
|
21
17
|
# Operations
|
22
18
|
|
23
19
|
def execute
|
24
20
|
super do |node, network|
|
25
|
-
|
26
|
-
|
21
|
+
if network && node
|
22
|
+
info('corl.actions.provision.start')
|
23
|
+
|
24
|
+
success = true
|
25
|
+
|
26
|
+
if CORL.admin?
|
27
|
+
unless node.build_time && File.directory?(network.build_directory)
|
28
|
+
success = node.build
|
29
|
+
end
|
30
|
+
|
31
|
+
if success
|
32
|
+
provisioner_info = node.provisioner_info
|
33
|
+
|
34
|
+
node.provisioners.each do |provider, collection|
|
35
|
+
provider_info = provisioner_info[provider]
|
36
|
+
profiles = provider_info[:profiles]
|
37
|
+
|
38
|
+
collection.each do |name, provisioner|
|
39
|
+
build_profiles = provisioner.build_profiles
|
40
|
+
|
41
|
+
if supported_profiles = provisioner.supported_profiles(profiles)
|
42
|
+
profile_success = provisioner.provision(supported_profiles)
|
43
|
+
success = false unless profile_success
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
myself.status = code.provision_failure unless success
|
48
|
+
end
|
49
|
+
end
|
50
|
+
else
|
51
|
+
myself.status = code.network_failure
|
52
|
+
end
|
27
53
|
end
|
28
54
|
end
|
29
55
|
end
|
@@ -7,19 +7,10 @@ class File < CORL.plugin_class(:configuration)
|
|
7
7
|
# Configuration plugin interface
|
8
8
|
|
9
9
|
def normalize(reload)
|
10
|
-
super
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
:directory => _delete(:directory, Dir.pwd),
|
15
|
-
:url => _delete(:url),
|
16
|
-
:revision => _delete(:revision)
|
17
|
-
}), _delete(:project_provider))
|
18
|
-
|
19
|
-
_set(:search, Config.new)
|
20
|
-
_set(:router, Config.new)
|
21
|
-
|
22
|
-
set_location(@project)
|
10
|
+
super do
|
11
|
+
_set(:search, Config.new)
|
12
|
+
_set(:router, Config.new)
|
13
|
+
end
|
23
14
|
end
|
24
15
|
|
25
16
|
#---
|
@@ -30,22 +21,9 @@ class File < CORL.plugin_class(:configuration)
|
|
30
21
|
Util::Disk.close(file_name)
|
31
22
|
end
|
32
23
|
end
|
33
|
-
|
34
|
-
#-----------------------------------------------------------------------------
|
35
|
-
# Checks
|
36
|
-
|
37
|
-
def can_persist?
|
38
|
-
project.can_persist?
|
39
|
-
end
|
40
|
-
|
24
|
+
|
41
25
|
#-----------------------------------------------------------------------------
|
42
26
|
# Property accessors / modifiers
|
43
|
-
|
44
|
-
def project
|
45
|
-
@project
|
46
|
-
end
|
47
|
-
|
48
|
-
#---
|
49
27
|
|
50
28
|
def search
|
51
29
|
_get(:search)
|
@@ -60,29 +38,10 @@ class File < CORL.plugin_class(:configuration)
|
|
60
38
|
#-----------------------------------------------------------------------------
|
61
39
|
|
62
40
|
def set_location(directory)
|
63
|
-
|
64
|
-
logger.debug("Setting source project directory from other project at #{directory.directory}")
|
65
|
-
project.set_location(directory.directory)
|
66
|
-
|
67
|
-
elsif directory && directory.is_a?(String) || directory.is_a?(Symbol)
|
68
|
-
logger.debug("Setting source project directory to #{directory}")
|
69
|
-
project.set_location(directory.to_s)
|
70
|
-
end
|
41
|
+
super
|
71
42
|
search_files if directory
|
72
43
|
end
|
73
44
|
|
74
|
-
#---
|
75
|
-
|
76
|
-
def remote(name)
|
77
|
-
project.remote(name)
|
78
|
-
end
|
79
|
-
|
80
|
-
#---
|
81
|
-
|
82
|
-
def set_remote(name, location)
|
83
|
-
project.set_remote(name, location)
|
84
|
-
end
|
85
|
-
|
86
45
|
#-----------------------------------------------------------------------------
|
87
46
|
# Configuration loading / saving
|
88
47
|
|
@@ -132,10 +91,13 @@ class File < CORL.plugin_class(:configuration)
|
|
132
91
|
# file_data[config_name][key...] = config
|
133
92
|
|
134
93
|
def separate
|
135
|
-
file_data
|
94
|
+
file_data = Config.new
|
95
|
+
default_provider = CORL.type_default(:translator)
|
136
96
|
|
137
97
|
split_config = lambda do |properties, local_router, parents = []|
|
138
98
|
properties.each do |name, value|
|
99
|
+
next if name.to_sym == :nodes
|
100
|
+
|
139
101
|
keys = [ parents, name ].flatten
|
140
102
|
|
141
103
|
if value.is_a?(Hash) && ! value.empty?
|
@@ -171,8 +133,7 @@ class File < CORL.plugin_class(:configuration)
|
|
171
133
|
file_data.set([ config_name, keys ].flatten, value)
|
172
134
|
else
|
173
135
|
# Resort to sane defaults
|
174
|
-
|
175
|
-
config_name = "corl.#{default_provider}"
|
136
|
+
config_name = "corl.#{default_provider}"
|
176
137
|
file_data.set([ config_name, keys ].flatten, value)
|
177
138
|
end
|
178
139
|
end
|
@@ -180,8 +141,16 @@ class File < CORL.plugin_class(:configuration)
|
|
180
141
|
end
|
181
142
|
end
|
182
143
|
|
144
|
+
if config.get(:nodes, false)
|
145
|
+
config[:nodes].each do |provider, data|
|
146
|
+
data.each do |name, info|
|
147
|
+
file_data.set([ ::File.join('nodes', provider.to_s, "#{name}.#{default_provider}"), :nodes, provider, name ], info)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
183
152
|
# Whew! Glad that's over...
|
184
|
-
split_config.call(config.export, router.export)
|
153
|
+
split_config.call(Util::Data.subset(config.export, config.keys - [ :nodes ]), router.export)
|
185
154
|
file_data
|
186
155
|
end
|
187
156
|
protected :separate
|
@@ -313,27 +282,44 @@ class File < CORL.plugin_class(:configuration)
|
|
313
282
|
# Utilities
|
314
283
|
|
315
284
|
def search_files
|
285
|
+
|
286
|
+
add_search_file = lambda do |config_name, file, provider, info|
|
287
|
+
if Util::Disk.exists?(file)
|
288
|
+
search[config_name] = {
|
289
|
+
:provider => provider,
|
290
|
+
:info => info,
|
291
|
+
:file => file
|
292
|
+
}
|
293
|
+
ObjectSpace.define_finalizer(myself, myself.class.finalize(file))
|
294
|
+
else
|
295
|
+
logger.info("Configuration file #{file} does not exist")
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
316
299
|
if Util::Data.empty?(project.directory)
|
317
300
|
logger.debug("Clearing configuration file information")
|
318
301
|
search.clear
|
319
302
|
else
|
320
|
-
|
303
|
+
translators = CORL.loaded_plugins(:translator)
|
304
|
+
file_bases = [ "corl", extension_collect(:base) ].flatten
|
305
|
+
|
306
|
+
project.localize do
|
307
|
+
translators.each do |provider, info|
|
308
|
+
Dir.glob(::File.join('nodes', '**', "*.#{provider}")).each do |file|
|
309
|
+
config_name = file
|
310
|
+
file = ::File.join(project.directory, file)
|
311
|
+
|
312
|
+
add_search_file.call(config_name, file, provider, info)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
321
316
|
|
322
|
-
|
317
|
+
translators.each do |provider, info|
|
323
318
|
file_bases.each do |file_base|
|
324
319
|
config_name = "#{file_base}.#{provider}"
|
325
320
|
file = Util::Disk.filename([ project.directory, config_name ])
|
326
|
-
|
327
|
-
|
328
|
-
search[config_name] = {
|
329
|
-
:provider => provider,
|
330
|
-
:info => info,
|
331
|
-
:file => file
|
332
|
-
}
|
333
|
-
ObjectSpace.define_finalizer(myself, myself.class.finalize(file))
|
334
|
-
else
|
335
|
-
logger.info("Configuration file #{file} does not exist")
|
336
|
-
end
|
321
|
+
|
322
|
+
add_search_file.call(config_name, file, provider, info)
|
337
323
|
end
|
338
324
|
end
|
339
325
|
logger.debug("Setting configuration file information to #{search.inspect}")
|