corl 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -10
- data/Gemfile.lock +13 -11
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/corl +2 -54
- data/bootstrap/bootstrap.sh +91 -0
- data/bootstrap/lib/shell/LICENSE.txt +674 -0
- data/bootstrap/lib/shell/command.sh +214 -0
- data/bootstrap/lib/shell/filesystem.sh +139 -0
- data/bootstrap/lib/shell/load.sh +73 -0
- data/bootstrap/lib/shell/os.sh +67 -0
- data/bootstrap/lib/shell/script.sh +160 -0
- data/bootstrap/lib/shell/starter.sh +64 -0
- data/bootstrap/lib/shell/validators.sh +50 -0
- data/bootstrap/os/ubuntu/00_base.sh +5 -0
- data/bootstrap/os/ubuntu/01_git.sh +5 -0
- data/bootstrap/os/ubuntu/05_ruby.sh +7 -0
- data/bootstrap/os/ubuntu/06_puppet.sh +38 -0
- data/bootstrap/os/ubuntu/10_corl.sh +9 -0
- data/corl.gemspec +61 -124
- data/lib/{corl → CORL}/action/bootstrap.rb +13 -7
- data/lib/CORL/action/exec.rb +39 -0
- data/lib/CORL/action/image.rb +31 -0
- data/lib/{corl → CORL}/action/images.rb +1 -1
- data/lib/CORL/action/lookup.rb +34 -0
- data/lib/{corl → CORL}/action/machines.rb +1 -1
- data/lib/CORL/action/provision.rb +31 -0
- data/lib/{corl → CORL}/action/seed.rb +3 -3
- data/lib/{corl → CORL}/action/spawn.rb +2 -2
- data/lib/CORL/action/start.rb +31 -0
- data/lib/CORL/action/stop.rb +31 -0
- data/lib/{corl → CORL}/configuration/file.rb +1 -1
- data/lib/{corl → CORL}/event/puppet.rb +1 -1
- data/lib/{corl → CORL}/extension/puppetloader.rb +1 -1
- data/lib/{corl → CORL}/machine/fog.rb +3 -3
- data/lib/{corl → CORL}/machine/physical.rb +2 -2
- data/lib/{corl → CORL}/network/default.rb +1 -1
- data/lib/{corl → CORL}/node/aws.rb +0 -4
- data/lib/{corl → CORL}/node/google.rb +0 -4
- data/lib/{corl → CORL}/node/local.rb +1 -1
- data/lib/{corl → CORL}/node/rackspace.rb +0 -4
- data/lib/{corl → CORL}/provisioner/puppetnode.rb +1 -14
- data/lib/{corl → CORL}/provisioner/puppetnode/resource.rb +0 -0
- data/lib/{corl → CORL}/provisioner/puppetnode/resource_group.rb +0 -0
- data/lib/{corl → CORL}/template/environment.rb +1 -1
- data/lib/core/facade.rb +49 -0
- data/lib/{corl_core → core}/mixin/action/keypair.rb +10 -10
- data/lib/{corl_core → core}/mixin/lookup.rb +0 -0
- data/lib/{corl_core → core}/mod/hiera_backend.rb +0 -0
- data/lib/{corl_core/mixin/action/node.rb → core/plugin/action.rb} +66 -33
- data/lib/{corl_core → core}/plugin/configuration.rb +2 -2
- data/lib/{corl/node → core/plugin}/fog.rb +5 -1
- data/lib/{corl_core → core}/plugin/machine.rb +2 -2
- data/lib/{corl_core → core}/plugin/network.rb +4 -4
- data/lib/{corl_core → core}/plugin/node.rb +11 -9
- data/lib/{corl_core → core}/plugin/provisioner.rb +2 -2
- data/lib/{corl_core → core}/util/ssh.rb +1 -1
- data/lib/corl.rb +53 -112
- data/lib/puppet/parser/functions/ensure.rb +0 -4
- data/locales/en.yml +55 -148
- metadata +84 -222
- data/lib/corl/action/add.rb +0 -69
- data/lib/corl/action/clone.rb +0 -40
- data/lib/corl/action/create.rb +0 -55
- data/lib/corl/action/exec.rb +0 -41
- data/lib/corl/action/extract.rb +0 -49
- data/lib/corl/action/image.rb +0 -30
- data/lib/corl/action/lookup.rb +0 -35
- data/lib/corl/action/provision.rb +0 -37
- data/lib/corl/action/remove.rb +0 -51
- data/lib/corl/action/save.rb +0 -53
- data/lib/corl/action/start.rb +0 -37
- data/lib/corl/action/stop.rb +0 -30
- data/lib/corl/action/update.rb +0 -37
- data/lib/corl/command/shell.rb +0 -164
- data/lib/corl/event/regex.rb +0 -52
- data/lib/corl/project/git.rb +0 -465
- data/lib/corl/project/github.rb +0 -108
- data/lib/corl/template/json.rb +0 -16
- data/lib/corl/template/wrapper.rb +0 -16
- data/lib/corl/template/yaml.rb +0 -16
- data/lib/corl/translator/json.rb +0 -27
- data/lib/corl/translator/yaml.rb +0 -27
- data/lib/corl_core/codes.rb +0 -107
- data/lib/corl_core/config.rb +0 -337
- data/lib/corl_core/config/collection.rb +0 -57
- data/lib/corl_core/config/options.rb +0 -70
- data/lib/corl_core/core.rb +0 -59
- data/lib/corl_core/corl.rb +0 -254
- data/lib/corl_core/errors.rb +0 -84
- data/lib/corl_core/facade.rb +0 -126
- data/lib/corl_core/gems.rb +0 -72
- data/lib/corl_core/manager.rb +0 -425
- data/lib/corl_core/mixin/action/commit.rb +0 -58
- data/lib/corl_core/mixin/action/project.rb +0 -53
- data/lib/corl_core/mixin/action/push.rb +0 -52
- data/lib/corl_core/mixin/config/collection.rb +0 -53
- data/lib/corl_core/mixin/config/ops.rb +0 -53
- data/lib/corl_core/mixin/config/options.rb +0 -39
- data/lib/corl_core/mixin/macro/object_interface.rb +0 -361
- data/lib/corl_core/mixin/macro/plugin_interface.rb +0 -380
- data/lib/corl_core/mixin/settings.rb +0 -46
- data/lib/corl_core/mixin/sub_config.rb +0 -148
- data/lib/corl_core/mod/hash.rb +0 -29
- data/lib/corl_core/plugin/action.rb +0 -381
- data/lib/corl_core/plugin/base.rb +0 -374
- data/lib/corl_core/plugin/command.rb +0 -98
- data/lib/corl_core/plugin/event.rb +0 -53
- data/lib/corl_core/plugin/extension.rb +0 -12
- data/lib/corl_core/plugin/project.rb +0 -927
- data/lib/corl_core/plugin/template.rb +0 -80
- data/lib/corl_core/plugin/translator.rb +0 -38
- data/lib/corl_core/util/cli.rb +0 -352
- data/lib/corl_core/util/data.rb +0 -404
- data/lib/corl_core/util/disk.rb +0 -114
- data/lib/corl_core/util/git.rb +0 -47
- data/lib/corl_core/util/interface.rb +0 -319
- data/lib/corl_core/util/liquid.rb +0 -17
- data/lib/corl_core/util/package.rb +0 -93
- data/lib/corl_core/util/shell.rb +0 -239
- data/spec/corl_core/interface_spec.rb +0 -489
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module CORL
|
3
3
|
module Provisioner
|
4
|
-
class Puppetnode <
|
4
|
+
class Puppetnode < CORL.plugin_class(:provisioner)
|
5
5
|
|
6
6
|
#-----------------------------------------------------------------------------
|
7
7
|
# Provisioner plugin interface
|
@@ -25,19 +25,6 @@ class Puppetnode < Plugin::Provisioner
|
|
25
25
|
register
|
26
26
|
end
|
27
27
|
|
28
|
-
#---
|
29
|
-
|
30
|
-
def register
|
31
|
-
# Register Puppet CORL extensions
|
32
|
-
env.modules.each do |mod|
|
33
|
-
lib_dir = File.join(mod.path, 'lib', 'corl')
|
34
|
-
if File.directory?(lib_dir)
|
35
|
-
logger.debug("Registering Puppet module at #{lib_dir}")
|
36
|
-
Manager.connection.register(lib_dir)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
28
|
#-----------------------------------------------------------------------------
|
42
29
|
# Property accessor / modifiers
|
43
30
|
|
File without changes
|
File without changes
|
data/lib/core/facade.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Facade
|
4
|
+
|
5
|
+
#-----------------------------------------------------------------------------
|
6
|
+
# Core plugin type facade
|
7
|
+
|
8
|
+
def configuration(options, provider = nil)
|
9
|
+
plugin(:configuration, provider, options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def configurations(data, build_hash = false, keep_array = false)
|
13
|
+
plugins(:configuration, data, build_hash, keep_array)
|
14
|
+
end
|
15
|
+
|
16
|
+
#-----------------------------------------------------------------------------
|
17
|
+
# Cluster plugin type facade
|
18
|
+
|
19
|
+
def network(name, options = {}, provider = nil)
|
20
|
+
plugin(:network, provider, Config.ensure(options).import({ :name => name }))
|
21
|
+
end
|
22
|
+
|
23
|
+
def networks(data, build_hash = false, keep_array = false)
|
24
|
+
plugins(:network, data, build_hash, keep_array)
|
25
|
+
end
|
26
|
+
|
27
|
+
#---
|
28
|
+
|
29
|
+
def node(name, options = {}, provider = nil)
|
30
|
+
plugin(:node, provider, Config.ensure(options).import({ :name => name }))
|
31
|
+
end
|
32
|
+
|
33
|
+
def nodes(data, build_hash = false, keep_array = false)
|
34
|
+
plugins(:node, data, build_hash, keep_array)
|
35
|
+
end
|
36
|
+
|
37
|
+
#---
|
38
|
+
|
39
|
+
def provisioner(options, provider = nil)
|
40
|
+
plugin(:provisioner, provider, options)
|
41
|
+
end
|
42
|
+
|
43
|
+
#---
|
44
|
+
|
45
|
+
def provisioners(data, build_hash = false, keep_array = false)
|
46
|
+
plugins(:provisioner, data, build_hash, keep_array)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -8,41 +8,41 @@ module Keypair
|
|
8
8
|
# Options
|
9
9
|
|
10
10
|
def keypair_config
|
11
|
-
register :private_key, :str, nil, 'corl.core.
|
11
|
+
register :private_key, :str, nil, 'corl.core.mixin.action.keypair.options.private_key' do |value|
|
12
12
|
success = true
|
13
13
|
if value
|
14
14
|
file = File.expand_path(value)
|
15
15
|
if File.exists?(file)
|
16
16
|
unless Util::SSH.generate({ :private_key => file })
|
17
|
-
warn('corl.core.
|
17
|
+
warn('corl.core.mixin.action.keypair.errors.private_key_parse_error', { :value => file })
|
18
18
|
success = false
|
19
19
|
end
|
20
20
|
else
|
21
|
-
warn('corl.core.
|
21
|
+
warn('corl.core.mixin.action.keypair.errors.private_key_not_found', { :value => file })
|
22
22
|
success = false
|
23
23
|
end
|
24
24
|
end
|
25
25
|
success
|
26
26
|
end
|
27
27
|
|
28
|
-
register :require_password, :bool, false, 'corl.core.
|
28
|
+
register :require_password, :bool, false, 'corl.core.mixin.action.keypair.options.require_password'
|
29
29
|
|
30
|
-
register :key_type, :str, 'RSA', 'corl.core.
|
30
|
+
register :key_type, :str, 'RSA', 'corl.core.mixin.action.keypair.options.key_type' do |value|
|
31
31
|
key_type_choices = [ 'RSA', 'DSA' ]
|
32
32
|
unless key_type_choices.include?(value.to_s.upcase)
|
33
|
-
warn('corl.core.
|
33
|
+
warn('corl.core.mixin.action.keypair.errors.key_type', { :value => value, :choices => key_type_choices })
|
34
34
|
next false
|
35
35
|
end
|
36
36
|
true
|
37
37
|
end
|
38
|
-
register :key_bits, :int, 2048, 'corl.core.
|
38
|
+
register :key_bits, :int, 2048, 'corl.core.mixin.action.keypair.options.key_bits' do |value|
|
39
39
|
unless value >= 2048
|
40
|
-
warn('corl.core.
|
40
|
+
warn('corl.core.mixin.action.keypair.errors.key_bits', { :value => value, :required => 2048 })
|
41
41
|
next false
|
42
42
|
end
|
43
43
|
true
|
44
44
|
end
|
45
|
-
register :key_comment, :str, '', 'corl.core.
|
45
|
+
register :key_comment, :str, '', 'corl.core.mixin.action.keypair.options.key_comment'
|
46
46
|
|
47
47
|
config_subset(keypair_ignore)
|
48
48
|
end
|
@@ -89,7 +89,7 @@ module Keypair
|
|
89
89
|
if password
|
90
90
|
key_options[:passphrase] = password
|
91
91
|
else
|
92
|
-
warn('corl.core.
|
92
|
+
warn('corl.core.mixin.action.keypair.errors.no_password')
|
93
93
|
return nil
|
94
94
|
end
|
95
95
|
end
|
File without changes
|
File without changes
|
@@ -1,41 +1,56 @@
|
|
1
1
|
|
2
2
|
module CORL
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Plugin
|
4
|
+
class CloudAction < CORL.plugin_class(:action)
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Property accessor / modifiers
|
8
|
+
|
9
|
+
def namespace
|
10
|
+
:corl
|
11
|
+
end
|
12
|
+
|
13
|
+
#---
|
14
|
+
|
15
|
+
def configure
|
16
|
+
super do
|
17
|
+
node_config
|
18
|
+
yield if block_given?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
7
22
|
#-----------------------------------------------------------------------------
|
8
23
|
# Settings
|
9
24
|
|
10
25
|
def node_config
|
11
|
-
node_plugins =
|
26
|
+
node_plugins = CORL.loaded_plugins(:node)
|
12
27
|
|
13
|
-
register :parallel, :bool, true, 'corl.core.
|
14
|
-
register :net_provider, :str, :default, 'corl.core.
|
28
|
+
register :parallel, :bool, true, 'corl.core.action.options.parallel'
|
29
|
+
register :net_provider, :str, :default, 'corl.core.action.options.net_provider' do |value|
|
15
30
|
value = value.to_sym
|
16
|
-
network_plugins =
|
31
|
+
network_plugins = CORL.loaded_plugins(:network)
|
17
32
|
|
18
33
|
unless network_plugins.keys.include?(value)
|
19
|
-
warn('corl.core.
|
34
|
+
warn('corl.core.action.errors.network_provider', { :value => value, :choices => network_plugins.keys.join(", ") })
|
20
35
|
next false
|
21
36
|
end
|
22
37
|
true
|
23
38
|
end
|
24
|
-
register :node_provider, :str, :local, 'corl.core.
|
39
|
+
register :node_provider, :str, :local, 'corl.core.action.options.node_provider' do |value|
|
25
40
|
value = value.to_sym
|
26
41
|
|
27
42
|
unless node_plugins.keys.include?(value)
|
28
|
-
warn('corl.core.
|
43
|
+
warn('corl.core.action.errors.node_provider', { :value => value, :choices => node_plugins.keys.join(", ") })
|
29
44
|
next false
|
30
45
|
end
|
31
46
|
true
|
32
47
|
end
|
33
|
-
register :nodes, :array, [], 'corl.core.
|
48
|
+
register :nodes, :array, [], 'corl.core.action.options.nodes' do |values|
|
34
49
|
success = true
|
35
50
|
values.each do |value|
|
36
|
-
if info =
|
51
|
+
if info = CORL.plugin_class(:node).translate_reference(value)
|
37
52
|
if ! node_plugins.keys.include?(info[:provider].to_sym) || info[:name].empty?
|
38
|
-
warn('corl.core.
|
53
|
+
warn('corl.core.action.errors.nodes', { :value => value, :provider => info[:provider], :name => info[:name] })
|
39
54
|
success = false
|
40
55
|
end
|
41
56
|
end
|
@@ -49,28 +64,25 @@ module Node
|
|
49
64
|
def node_ignore
|
50
65
|
[ :parallel, :net_provider, :node_provider, :nodes ]
|
51
66
|
end
|
52
|
-
|
67
|
+
|
53
68
|
#-----------------------------------------------------------------------------
|
54
69
|
# Operations
|
55
70
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
71
|
+
def validate(node, network)
|
72
|
+
super(node, network)
|
73
|
+
end
|
74
|
+
|
75
|
+
#---
|
76
|
+
|
77
|
+
def execute
|
78
|
+
super(true, true) do
|
79
|
+
node_exec do |node, network|
|
80
|
+
hook_config = { :node => node, :network => network }
|
81
|
+
|
82
|
+
yield(node, network) if block_given? && extension_check(:exec_init, hook_config)
|
83
|
+
myself.status = extension_set(:exec_exit, status, hook_config)
|
84
|
+
end
|
63
85
|
end
|
64
|
-
|
65
|
-
# Load network if it exists
|
66
|
-
network_config = extended_config(:network, { :directory => network_path })
|
67
|
-
|
68
|
-
network = CORL.network(
|
69
|
-
CORL.sha1(network_config),
|
70
|
-
network_config,
|
71
|
-
settings[:net_provider]
|
72
|
-
)
|
73
|
-
network
|
74
86
|
end
|
75
87
|
|
76
88
|
#---
|
@@ -119,6 +131,28 @@ module Node
|
|
119
131
|
|
120
132
|
#---
|
121
133
|
|
134
|
+
def init_network(path = nil)
|
135
|
+
# Get network configuration path
|
136
|
+
if CORL.admin?
|
137
|
+
network_path = lookup(:corl_network)
|
138
|
+
Dir.mkdir(network_path) unless File.directory?(network_path)
|
139
|
+
else
|
140
|
+
network_path = ( path.nil? ? Dir.pwd : File.expand_path(path) )
|
141
|
+
end
|
142
|
+
|
143
|
+
# Load network if it exists
|
144
|
+
network_config = extended_config(:network, { :directory => network_path })
|
145
|
+
|
146
|
+
network = CORL.network(
|
147
|
+
CORL.sha1(network_config),
|
148
|
+
network_config,
|
149
|
+
settings[:net_provider]
|
150
|
+
)
|
151
|
+
network
|
152
|
+
end
|
153
|
+
|
154
|
+
#---
|
155
|
+
|
122
156
|
def execute_remote(node, network, op, data)
|
123
157
|
# Implement in sub classes if needed
|
124
158
|
data
|
@@ -126,4 +160,3 @@ module Node
|
|
126
160
|
end
|
127
161
|
end
|
128
162
|
end
|
129
|
-
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
|
2
|
+
nucleon_require(File.dirname(__FILE__), :node)
|
3
|
+
|
4
|
+
#---
|
5
|
+
|
2
6
|
module CORL
|
3
7
|
module Node
|
4
|
-
class Fog <
|
8
|
+
class Fog < CORL.plugin_class(:node)
|
5
9
|
|
6
10
|
#-----------------------------------------------------------------------------
|
7
11
|
# Node plugin interface
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
module
|
2
|
+
module Nucleon
|
3
3
|
module Plugin
|
4
|
-
class Network <
|
4
|
+
class Network < CORL.plugin_class(:base)
|
5
5
|
|
6
6
|
init_plugin_collection
|
7
7
|
|
@@ -48,7 +48,7 @@ class Network < Base
|
|
48
48
|
def node_groups
|
49
49
|
groups = {}
|
50
50
|
|
51
|
-
each_node_config
|
51
|
+
each_node_config do |provider, name, info|
|
52
52
|
search_node(provider, name, :groups, [], :array).each do |group|
|
53
53
|
group = group.to_sym
|
54
54
|
groups[group] = [] unless groups.has_key?(group)
|
@@ -107,7 +107,7 @@ class Network < Base
|
|
107
107
|
#---
|
108
108
|
|
109
109
|
def node_by_ip(public_ip)
|
110
|
-
each_node_config
|
110
|
+
each_node_config do |provider, name, info|
|
111
111
|
return node(provider, name) if info[:public_ip] == public_ip
|
112
112
|
end
|
113
113
|
nil
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
module
|
2
|
+
module Nucleon
|
3
3
|
module Plugin
|
4
|
-
class Node <
|
4
|
+
class Node < CORL.plugin_class(:base)
|
5
5
|
|
6
6
|
include Celluloid
|
7
7
|
|
@@ -12,7 +12,7 @@ class Node < Base
|
|
12
12
|
super
|
13
13
|
|
14
14
|
ui.resource = hostname
|
15
|
-
|
15
|
+
logger = hostname
|
16
16
|
|
17
17
|
@cli_interface = Util::Liquid.new do |method, args, &code|
|
18
18
|
result = exec({ :commands => [ [ method, args ].flatten.join(' ') ] }) do |op, data|
|
@@ -28,7 +28,7 @@ class Node < Base
|
|
28
28
|
action(method, *args) do |op, data|
|
29
29
|
code.call(op, data) if code
|
30
30
|
end
|
31
|
-
end
|
31
|
+
end
|
32
32
|
end
|
33
33
|
|
34
34
|
#---
|
@@ -304,7 +304,7 @@ class Node < Base
|
|
304
304
|
# Machine operations
|
305
305
|
|
306
306
|
def create_machine(name, provider, options = {})
|
307
|
-
CORL.
|
307
|
+
CORL.create_plugin(:machine, provider, extended_config(name, options).import({ :meta => { :parent => myself }}))
|
308
308
|
end
|
309
309
|
|
310
310
|
#---
|
@@ -461,7 +461,7 @@ class Node < Base
|
|
461
461
|
active_machine = local? ? local_machine : machine
|
462
462
|
|
463
463
|
if commands = config.get(:commands, nil)
|
464
|
-
|
464
|
+
render("Starting command execution: #{commands.join('; ')}")
|
465
465
|
results = active_machine.exec(commands, config.export) do |type, command, data|
|
466
466
|
if type == :error
|
467
467
|
alert(data)
|
@@ -498,7 +498,7 @@ class Node < Base
|
|
498
498
|
|
499
499
|
def command(command, options = {})
|
500
500
|
unless command.is_a?(CORL::Plugin::Command)
|
501
|
-
command = CORL.command(Config.new({ :command => command }).import(options), :
|
501
|
+
command = CORL.command(Config.new({ :command => command }).import(options), :bash)
|
502
502
|
end
|
503
503
|
results = exec({ :commands => [ command.to_s ] }) do |op, data|
|
504
504
|
yield(op, data) if block_given?
|
@@ -536,7 +536,7 @@ class Node < Base
|
|
536
536
|
myself.status = code.unknown_status
|
537
537
|
|
538
538
|
bootstrap_name = 'bootstrap'
|
539
|
-
bootstrap_path = config.get(:bootstrap_path, File.join(
|
539
|
+
bootstrap_path = config.get(:bootstrap_path, File.join(CORL.lib_path, '..', bootstrap_name))
|
540
540
|
bootstrap_glob = config.get(:bootstrap_glob, '**/*.sh')
|
541
541
|
bootstrap_init = config.get(:bootstrap_init, 'bootstrap.sh')
|
542
542
|
|
@@ -581,13 +581,15 @@ class Node < Base
|
|
581
581
|
|
582
582
|
# Execute bootstrap process
|
583
583
|
if status == code.success
|
584
|
-
remote_script = File.join(remote_bootstrap_path, bootstrap_init)
|
584
|
+
remote_script = File.join(remote_bootstrap_path, bootstrap_init)
|
585
|
+
|
585
586
|
result = command(remote_script) do |op, data|
|
586
587
|
yield("exec_#{op}".to_sym, data) if block_given?
|
587
588
|
data
|
588
589
|
end
|
589
590
|
|
590
591
|
if result.status != code.success
|
592
|
+
warn('corl.core.node.bootstrap.status', { :script => remote_script, :status => result.status })
|
591
593
|
myself.status = code.bootstrap_exec_failure
|
592
594
|
end
|
593
595
|
end
|