corl 0.4.0
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/.document +5 -0
- data/.gitmodules +4 -0
- data/Gemfile +24 -0
- data/Gemfile.lock +123 -0
- data/LICENSE.txt +674 -0
- data/README.rdoc +27 -0
- data/Rakefile +78 -0
- data/VERSION +1 -0
- data/bin/corl +55 -0
- data/corl.gemspec +228 -0
- data/lib/corl/action/add.rb +69 -0
- data/lib/corl/action/bootstrap.rb +83 -0
- data/lib/corl/action/clone.rb +40 -0
- data/lib/corl/action/create.rb +55 -0
- data/lib/corl/action/exec.rb +41 -0
- data/lib/corl/action/extract.rb +49 -0
- data/lib/corl/action/image.rb +30 -0
- data/lib/corl/action/images.rb +55 -0
- data/lib/corl/action/lookup.rb +35 -0
- data/lib/corl/action/machines.rb +51 -0
- data/lib/corl/action/provision.rb +37 -0
- data/lib/corl/action/remove.rb +51 -0
- data/lib/corl/action/save.rb +53 -0
- data/lib/corl/action/seed.rb +115 -0
- data/lib/corl/action/spawn.rb +75 -0
- data/lib/corl/action/start.rb +37 -0
- data/lib/corl/action/stop.rb +30 -0
- data/lib/corl/action/update.rb +37 -0
- data/lib/corl/command/shell.rb +164 -0
- data/lib/corl/configuration/file.rb +386 -0
- data/lib/corl/event/puppet.rb +90 -0
- data/lib/corl/event/regex.rb +52 -0
- data/lib/corl/extension/puppetloader.rb +24 -0
- data/lib/corl/machine/fog.rb +310 -0
- data/lib/corl/machine/physical.rb +161 -0
- data/lib/corl/network/default.rb +26 -0
- data/lib/corl/node/aws.rb +90 -0
- data/lib/corl/node/fog.rb +198 -0
- data/lib/corl/node/google.rb +115 -0
- data/lib/corl/node/local.rb +26 -0
- data/lib/corl/node/rackspace.rb +89 -0
- data/lib/corl/project/git.rb +465 -0
- data/lib/corl/project/github.rb +108 -0
- data/lib/corl/provisioner/puppetnode/resource.rb +245 -0
- data/lib/corl/provisioner/puppetnode/resource_group.rb +205 -0
- data/lib/corl/provisioner/puppetnode.rb +407 -0
- data/lib/corl/template/environment.rb +73 -0
- data/lib/corl/template/json.rb +16 -0
- data/lib/corl/template/wrapper.rb +16 -0
- data/lib/corl/template/yaml.rb +16 -0
- data/lib/corl/translator/json.rb +27 -0
- data/lib/corl/translator/yaml.rb +27 -0
- data/lib/corl.rb +173 -0
- data/lib/corl_core/codes.rb +107 -0
- data/lib/corl_core/config/collection.rb +57 -0
- data/lib/corl_core/config/options.rb +70 -0
- data/lib/corl_core/config.rb +337 -0
- data/lib/corl_core/core.rb +59 -0
- data/lib/corl_core/corl.rb +254 -0
- data/lib/corl_core/errors.rb +84 -0
- data/lib/corl_core/facade.rb +126 -0
- data/lib/corl_core/gems.rb +72 -0
- data/lib/corl_core/manager.rb +425 -0
- data/lib/corl_core/mixin/action/commit.rb +58 -0
- data/lib/corl_core/mixin/action/keypair.rb +105 -0
- data/lib/corl_core/mixin/action/node.rb +129 -0
- data/lib/corl_core/mixin/action/project.rb +53 -0
- data/lib/corl_core/mixin/action/push.rb +52 -0
- data/lib/corl_core/mixin/config/collection.rb +53 -0
- data/lib/corl_core/mixin/config/ops.rb +53 -0
- data/lib/corl_core/mixin/config/options.rb +39 -0
- data/lib/corl_core/mixin/lookup.rb +196 -0
- data/lib/corl_core/mixin/macro/object_interface.rb +361 -0
- data/lib/corl_core/mixin/macro/plugin_interface.rb +380 -0
- data/lib/corl_core/mixin/settings.rb +46 -0
- data/lib/corl_core/mixin/sub_config.rb +148 -0
- data/lib/corl_core/mod/hash.rb +29 -0
- data/lib/corl_core/mod/hiera_backend.rb +63 -0
- data/lib/corl_core/plugin/action.rb +381 -0
- data/lib/corl_core/plugin/base.rb +374 -0
- data/lib/corl_core/plugin/command.rb +98 -0
- data/lib/corl_core/plugin/configuration.rb +177 -0
- data/lib/corl_core/plugin/event.rb +53 -0
- data/lib/corl_core/plugin/extension.rb +12 -0
- data/lib/corl_core/plugin/machine.rb +266 -0
- data/lib/corl_core/plugin/network.rb +359 -0
- data/lib/corl_core/plugin/node.rb +904 -0
- data/lib/corl_core/plugin/project.rb +927 -0
- data/lib/corl_core/plugin/provisioner.rb +51 -0
- data/lib/corl_core/plugin/template.rb +80 -0
- data/lib/corl_core/plugin/translator.rb +38 -0
- data/lib/corl_core/util/cli.rb +352 -0
- data/lib/corl_core/util/data.rb +404 -0
- data/lib/corl_core/util/disk.rb +114 -0
- data/lib/corl_core/util/git.rb +47 -0
- data/lib/corl_core/util/interface.rb +319 -0
- data/lib/corl_core/util/liquid.rb +17 -0
- data/lib/corl_core/util/package.rb +93 -0
- data/lib/corl_core/util/shell.rb +239 -0
- data/lib/corl_core/util/ssh.rb +286 -0
- data/lib/facter/corl_config_ready.rb +13 -0
- data/lib/facter/corl_exists.rb +15 -0
- data/lib/facter/corl_network.rb +17 -0
- data/lib/hiera/corl_logger.rb +18 -0
- data/lib/puppet/indirector/corl.rb +27 -0
- data/lib/puppet/indirector/data_binding/corl.rb +6 -0
- data/lib/puppet/parser/functions/config_initialized.rb +26 -0
- data/lib/puppet/parser/functions/corl_include.rb +44 -0
- data/lib/puppet/parser/functions/corl_resources.rb +58 -0
- data/lib/puppet/parser/functions/deep_merge.rb +21 -0
- data/lib/puppet/parser/functions/ensure.rb +29 -0
- data/lib/puppet/parser/functions/file_exists.rb +19 -0
- data/lib/puppet/parser/functions/global_array.rb +35 -0
- data/lib/puppet/parser/functions/global_hash.rb +35 -0
- data/lib/puppet/parser/functions/global_options.rb +23 -0
- data/lib/puppet/parser/functions/global_param.rb +43 -0
- data/lib/puppet/parser/functions/interpolate.rb +26 -0
- data/lib/puppet/parser/functions/is_false.rb +21 -0
- data/lib/puppet/parser/functions/is_true.rb +21 -0
- data/lib/puppet/parser/functions/module_array.rb +38 -0
- data/lib/puppet/parser/functions/module_hash.rb +38 -0
- data/lib/puppet/parser/functions/module_options.rb +23 -0
- data/lib/puppet/parser/functions/module_param.rb +48 -0
- data/lib/puppet/parser/functions/name.rb +21 -0
- data/lib/puppet/parser/functions/render.rb +33 -0
- data/lib/puppet/parser/functions/value.rb +21 -0
- data/locales/en.yml +232 -0
- data/spec/corl_core/interface_spec.rb +489 -0
- data/spec/corl_mock_input.rb +29 -0
- data/spec/corl_test_kernel.rb +22 -0
- data/spec/spec_helper.rb +15 -0
- metadata +406 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Extract < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Action settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :extract_failure
|
12
|
+
|
13
|
+
register :path, :str, nil do |value|
|
14
|
+
unless File.directory?(value)
|
15
|
+
warn('corl.actions.extract.errors.path', { :value => value })
|
16
|
+
next false
|
17
|
+
end
|
18
|
+
true
|
19
|
+
end
|
20
|
+
register :encoded, :str, nil do |value|
|
21
|
+
@package = Util::Package.new(value)
|
22
|
+
if @package.data.export.empty?
|
23
|
+
warn('corl.actions.extract.errors.encoded', { :value => value })
|
24
|
+
next false
|
25
|
+
end
|
26
|
+
true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#---
|
32
|
+
|
33
|
+
def arguments
|
34
|
+
[ :path, :encoded ]
|
35
|
+
end
|
36
|
+
|
37
|
+
#-----------------------------------------------------------------------------
|
38
|
+
# Action operations
|
39
|
+
|
40
|
+
def execute
|
41
|
+
super do |node, network|
|
42
|
+
unless @package.extract(settings[:path])
|
43
|
+
myself.status = code.extract_failure
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Image < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Image action interface
|
8
|
+
|
9
|
+
def normalize
|
10
|
+
super('corl image')
|
11
|
+
end
|
12
|
+
|
13
|
+
#-----------------------------------------------------------------------------
|
14
|
+
# Action operations
|
15
|
+
|
16
|
+
def parse(parser)
|
17
|
+
end
|
18
|
+
|
19
|
+
#---
|
20
|
+
|
21
|
+
def execute
|
22
|
+
super do |node, network, status|
|
23
|
+
info('corl.core.actions.image.start')
|
24
|
+
|
25
|
+
status
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Images < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :node_load_failure,
|
12
|
+
:image_load_failure
|
13
|
+
|
14
|
+
register :match_case, :bool, false
|
15
|
+
register :require_all, :bool, false
|
16
|
+
register :search, :array, []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#---
|
21
|
+
|
22
|
+
def ignore
|
23
|
+
node_ignore - [ :node_provider ]
|
24
|
+
end
|
25
|
+
|
26
|
+
def arguments
|
27
|
+
[ :node_provider, :search ]
|
28
|
+
end
|
29
|
+
|
30
|
+
#-----------------------------------------------------------------------------
|
31
|
+
# Operations
|
32
|
+
|
33
|
+
def execute
|
34
|
+
super do |local_node, network|
|
35
|
+
info('corl.actions.images.start')
|
36
|
+
|
37
|
+
if node = network.test_node(settings[:node_provider])
|
38
|
+
if images = node.images(settings[:search], settings)
|
39
|
+
images.each do |image|
|
40
|
+
render(node.render_image(image), { :prefix => false })
|
41
|
+
end
|
42
|
+
|
43
|
+
myself.result = images
|
44
|
+
success('corl.actions.images.results', { :images => images.length }) if images.length > 1
|
45
|
+
else
|
46
|
+
myself.status = code.image_load_failure
|
47
|
+
end
|
48
|
+
else
|
49
|
+
myself.status = code.node_load_failure
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Lookup < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Lookup action interface
|
8
|
+
|
9
|
+
def normalize
|
10
|
+
super('corl lookup <property>')
|
11
|
+
end
|
12
|
+
|
13
|
+
#-----------------------------------------------------------------------------
|
14
|
+
# Action operations
|
15
|
+
|
16
|
+
def parse(parser)
|
17
|
+
parser.arg_str(:property, nil,
|
18
|
+
'corl.core.actions.create.options.property'
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
#---
|
23
|
+
|
24
|
+
def execute
|
25
|
+
super do |node, network, status|
|
26
|
+
property = settings[:property]
|
27
|
+
value = lookup(property)
|
28
|
+
|
29
|
+
ui.success(sprintf("#{property} = %s", value.inspect))
|
30
|
+
status
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Machines < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :node_load_failure,
|
12
|
+
:machine_load_failure
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
#---
|
17
|
+
|
18
|
+
def ignore
|
19
|
+
node_ignore - [ :node_provider ]
|
20
|
+
end
|
21
|
+
|
22
|
+
def arguments
|
23
|
+
[ :node_provider ]
|
24
|
+
end
|
25
|
+
|
26
|
+
#-----------------------------------------------------------------------------
|
27
|
+
# Operations
|
28
|
+
|
29
|
+
def execute
|
30
|
+
super do |local_node, network|
|
31
|
+
info('corl.actions.machines.start')
|
32
|
+
|
33
|
+
if node = network.test_node(settings[:node_provider])
|
34
|
+
if machine_types = node.machine_types
|
35
|
+
machine_types.each do |machine_type|
|
36
|
+
render(node.render_machine_type(machine_type), { :prefix => false })
|
37
|
+
end
|
38
|
+
|
39
|
+
myself.result = machine_types
|
40
|
+
success('corl.actions.machines.results', { :machines => machine_types.length }) if machine_types.length > 1
|
41
|
+
else
|
42
|
+
myself.status = code.machine_load_failure
|
43
|
+
end
|
44
|
+
else
|
45
|
+
myself.status = code.node_load_failure
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Provision < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Provision action interface
|
8
|
+
|
9
|
+
def normalize
|
10
|
+
super('corl provision [ <project_directory> ]')
|
11
|
+
end
|
12
|
+
|
13
|
+
#-----------------------------------------------------------------------------
|
14
|
+
# Action operations
|
15
|
+
|
16
|
+
def parse(parser)
|
17
|
+
parser.option_str(:provider, nil,
|
18
|
+
'--provider PROVISIONER_PROVIDER',
|
19
|
+
'corl.core.actions.provision.options.provider'
|
20
|
+
)
|
21
|
+
parser.arg_str(:directory, :default,
|
22
|
+
'corl.core.actions.provision.options.directory'
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
#---
|
27
|
+
|
28
|
+
def execute
|
29
|
+
super do |node, network, status|
|
30
|
+
info('corl.core.actions.provision.start')
|
31
|
+
|
32
|
+
status
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Remove < Plugin::Action
|
5
|
+
|
6
|
+
include Mixin::Action::Project
|
7
|
+
include Mixin::Action::Push
|
8
|
+
|
9
|
+
#-----------------------------------------------------------------------------
|
10
|
+
# Remove action interface
|
11
|
+
|
12
|
+
def normalize
|
13
|
+
super('corl remove <subproject/path>')
|
14
|
+
|
15
|
+
codes :project_failure => 20,
|
16
|
+
:delete_failure => 21,
|
17
|
+
:push_failure => 22
|
18
|
+
end
|
19
|
+
|
20
|
+
#-----------------------------------------------------------------------------
|
21
|
+
# Action operations
|
22
|
+
|
23
|
+
def parse(parser)
|
24
|
+
parser.arg_str(:sub_path, nil,
|
25
|
+
'corl.core.actions.remove.options.sub_path'
|
26
|
+
)
|
27
|
+
project_options(parser, true, true)
|
28
|
+
push_options(parser, true)
|
29
|
+
end
|
30
|
+
|
31
|
+
#---
|
32
|
+
|
33
|
+
def execute
|
34
|
+
super do |node, network, status|
|
35
|
+
info('corl.core.actions.remove.start')
|
36
|
+
|
37
|
+
if project = project_load(Dir.pwd, false)
|
38
|
+
if project.delete_subproject(settings[:sub_path])
|
39
|
+
status = code.push_failure unless push(project)
|
40
|
+
else
|
41
|
+
status = code.delete_failure
|
42
|
+
end
|
43
|
+
else
|
44
|
+
status = code.project_failure
|
45
|
+
end
|
46
|
+
status
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Save < Plugin::Action
|
5
|
+
|
6
|
+
include Mixin::Action::Project
|
7
|
+
include Mixin::Action::Commit
|
8
|
+
include Mixin::Action::Push
|
9
|
+
|
10
|
+
#-----------------------------------------------------------------------------
|
11
|
+
# Save action interface
|
12
|
+
|
13
|
+
def normalize
|
14
|
+
super('corl save [ <file> ... ]')
|
15
|
+
|
16
|
+
codes :project_failure => 20,
|
17
|
+
:commit_failure => 21,
|
18
|
+
:push_failure => 22
|
19
|
+
end
|
20
|
+
|
21
|
+
#-----------------------------------------------------------------------------
|
22
|
+
# Action operations
|
23
|
+
|
24
|
+
def parse(parser)
|
25
|
+
parser.arg_array(:files, '.',
|
26
|
+
'corl.core.actions.save.options.files'
|
27
|
+
)
|
28
|
+
project_options(parser, true, false)
|
29
|
+
commit_options(parser, false)
|
30
|
+
push_options(parser, true)
|
31
|
+
end
|
32
|
+
|
33
|
+
#---
|
34
|
+
|
35
|
+
def execute
|
36
|
+
super do |node, network, status|
|
37
|
+
info('corl.core.actions.save.start')
|
38
|
+
|
39
|
+
if project = project_load(Dir.pwd, false)
|
40
|
+
if commit(project, settings[:files])
|
41
|
+
status = code.push_failure unless push(project)
|
42
|
+
else
|
43
|
+
status = code.commit_failure
|
44
|
+
end
|
45
|
+
else
|
46
|
+
status = code.project_failure
|
47
|
+
end
|
48
|
+
status
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Seed < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :key_store_failure,
|
12
|
+
:project_failure,
|
13
|
+
:network_init_failure,
|
14
|
+
:network_load_failure,
|
15
|
+
:node_load_failure,
|
16
|
+
:node_save_failure
|
17
|
+
#---
|
18
|
+
|
19
|
+
register :project_branch, :str, 'master'
|
20
|
+
register :project_reference, :str, nil do |value|
|
21
|
+
value = value.to_sym
|
22
|
+
project_plugins = Manager.connection.loaded_plugins(:project)
|
23
|
+
|
24
|
+
if @project_info = Plugin::Project.translate_reference(value, true)
|
25
|
+
provider = @project_info[:provider]
|
26
|
+
else
|
27
|
+
provider = value
|
28
|
+
end
|
29
|
+
|
30
|
+
unless project_plugins.keys.include?(provider.to_sym)
|
31
|
+
warn('corl.actions.seed.errors.project_reference', { :value => value, :provider => provider, :choices => project_plugins.keys.join(', ') })
|
32
|
+
next false
|
33
|
+
end
|
34
|
+
true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#---
|
40
|
+
|
41
|
+
def arguments
|
42
|
+
[ :project_reference ]
|
43
|
+
end
|
44
|
+
|
45
|
+
#-----------------------------------------------------------------------------
|
46
|
+
# Operations
|
47
|
+
|
48
|
+
def execute
|
49
|
+
super do |node, network|
|
50
|
+
info('corl.actions.seed.start')
|
51
|
+
|
52
|
+
if node && network
|
53
|
+
admin_exec do
|
54
|
+
network_path = lookup(:corl_network)
|
55
|
+
backup_path = File.join(Dir.tmpdir(), 'corl')
|
56
|
+
|
57
|
+
render("Generating network SSH deploy keys")
|
58
|
+
|
59
|
+
if keys = Util::SSH.generate.store
|
60
|
+
if @project_info
|
61
|
+
project_info = Config.new(@project_info)
|
62
|
+
else
|
63
|
+
project_info = Config.new({ :provider => :git })
|
64
|
+
end
|
65
|
+
|
66
|
+
render("Backing up current network configuration")
|
67
|
+
FileUtils.rm_rf(backup_path)
|
68
|
+
FileUtils.mv(network_path, backup_path)
|
69
|
+
|
70
|
+
render("Seeding network configuration from #{settings[:project_reference]}")
|
71
|
+
project = CORL.project(extended_config(:project, {
|
72
|
+
:directory => network_path,
|
73
|
+
:reference => project_info.get(:reference, nil),
|
74
|
+
:url => project_info.get(:url, settings[:project_reference]),
|
75
|
+
:revision => project_info.get(:revision, settings[:project_branch]),
|
76
|
+
:create => true,
|
77
|
+
:pull => true,
|
78
|
+
:keys => keys
|
79
|
+
}), project_info[:provider])
|
80
|
+
|
81
|
+
if project
|
82
|
+
render("Finalizing network path and removing temporary backup")
|
83
|
+
FileUtils.chmod_R(0600, network_path)
|
84
|
+
FileUtils.rm_rf(backup_path)
|
85
|
+
|
86
|
+
render("Reinitializing network")
|
87
|
+
if network = init_network
|
88
|
+
if network.load
|
89
|
+
if node = network.local_node
|
90
|
+
render("Updating node network configurations")
|
91
|
+
myself.status = code.node_save_failure unless node.save
|
92
|
+
else
|
93
|
+
myself.status = code.node_load_failure
|
94
|
+
end
|
95
|
+
else
|
96
|
+
myself.status = code.network_load_failure
|
97
|
+
end
|
98
|
+
else
|
99
|
+
myself.status = code.network_init_failure
|
100
|
+
end
|
101
|
+
else
|
102
|
+
myself.status = code.project_failure
|
103
|
+
end
|
104
|
+
else
|
105
|
+
myself.status = code.key_store_failure
|
106
|
+
end
|
107
|
+
end
|
108
|
+
else
|
109
|
+
myself.status = code.network_load_failure
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Spawn < Plugin::Action
|
5
|
+
|
6
|
+
include Mixin::Action::Keypair
|
7
|
+
|
8
|
+
#----------------------------------------------------------------------------
|
9
|
+
# Settings
|
10
|
+
|
11
|
+
def configure
|
12
|
+
super do
|
13
|
+
codes :network_failure,
|
14
|
+
:key_failure,
|
15
|
+
:node_create_failure
|
16
|
+
|
17
|
+
register :region, :str, nil
|
18
|
+
register :machine_type, :str, nil
|
19
|
+
register :image, :str, nil
|
20
|
+
register :hostnames, :array, nil
|
21
|
+
|
22
|
+
keypair_config
|
23
|
+
|
24
|
+
bootstrap = CORL.action_config(:bootstrap)
|
25
|
+
config.defaults(bootstrap.config) if bootstrap
|
26
|
+
|
27
|
+
if seed = CORL.action_config(:seed)
|
28
|
+
seed.config[:project_reference].default = "github:::coraltech/cluster-test[master]"
|
29
|
+
config.defaults(seed.config)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
#---
|
35
|
+
|
36
|
+
def ignore
|
37
|
+
node_ignore - [ :parallel, :node_provider ] + [ :bootstrap_nodes ]
|
38
|
+
end
|
39
|
+
|
40
|
+
def arguments
|
41
|
+
[ :node_provider, :image, :hostnames ]
|
42
|
+
end
|
43
|
+
|
44
|
+
#-----------------------------------------------------------------------------
|
45
|
+
# Operations
|
46
|
+
|
47
|
+
def execute
|
48
|
+
super do |node, network|
|
49
|
+
info('corl.core.actions.spawn.start')
|
50
|
+
|
51
|
+
if network
|
52
|
+
if keypair && keypair_clean
|
53
|
+
results = []
|
54
|
+
node_provider = settings.delete(:node_provider)
|
55
|
+
|
56
|
+
settings.delete(:hostnames).each do |hostname|
|
57
|
+
if settings[:parallel]
|
58
|
+
results << network.future.add_node(node_provider, hostname, settings)
|
59
|
+
else
|
60
|
+
results << network.add_node(node_provider, hostname, settings)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
results = results.map { |future| future.value } if settings[:parallel]
|
64
|
+
myself.status = code.batch_error if results.include?(false)
|
65
|
+
else
|
66
|
+
myself.status = code.key_failure
|
67
|
+
end
|
68
|
+
else
|
69
|
+
myself.status = code.network_failure
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Start < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Start action interface
|
8
|
+
|
9
|
+
def normalize
|
10
|
+
super('corl start <node_reference>')
|
11
|
+
end
|
12
|
+
|
13
|
+
#-----------------------------------------------------------------------------
|
14
|
+
# Action operations
|
15
|
+
|
16
|
+
def parse(parser)
|
17
|
+
parser.option_str(:provider, :rackspace,
|
18
|
+
'--provider DEFAULT_NODE_PROVIDER',
|
19
|
+
'corl.core.actions.start.options.provider'
|
20
|
+
)
|
21
|
+
parser.arg_str(:node_reference, nil,
|
22
|
+
'corl.core.actions.start.options.node_reference'
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
#---
|
27
|
+
|
28
|
+
def execute
|
29
|
+
super do |node, network, status|
|
30
|
+
info('corl.core.actions.start.start')
|
31
|
+
|
32
|
+
status
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Stop < Plugin::Action
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Stop action interface
|
8
|
+
|
9
|
+
def normalize
|
10
|
+
super('corl stop')
|
11
|
+
end
|
12
|
+
|
13
|
+
#-----------------------------------------------------------------------------
|
14
|
+
# Action operations
|
15
|
+
|
16
|
+
def parse(parser)
|
17
|
+
end
|
18
|
+
|
19
|
+
#---
|
20
|
+
|
21
|
+
def execute
|
22
|
+
super do |node, network, status|
|
23
|
+
info('corl.core.actions.stop.start')
|
24
|
+
|
25
|
+
status
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Update < Plugin::Action
|
5
|
+
|
6
|
+
include Mixin::Action::Project
|
7
|
+
|
8
|
+
#-----------------------------------------------------------------------------
|
9
|
+
# Update action interface
|
10
|
+
|
11
|
+
def normalize
|
12
|
+
super('corl update')
|
13
|
+
|
14
|
+
codes :project_failure => 20
|
15
|
+
end
|
16
|
+
|
17
|
+
#-----------------------------------------------------------------------------
|
18
|
+
# Action operations
|
19
|
+
|
20
|
+
def parse(parser)
|
21
|
+
project_options(parser, true, true)
|
22
|
+
end
|
23
|
+
|
24
|
+
#---
|
25
|
+
|
26
|
+
def execute
|
27
|
+
super do |node, network, status|
|
28
|
+
info('corl.core.actions.update.start')
|
29
|
+
|
30
|
+
project = project_load(Dir.pwd, true)
|
31
|
+
status = code.project_failure unless project
|
32
|
+
status
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|