corl 0.4.15 → 0.4.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +6 -1
- data/Gemfile.lock +76 -30
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bootstrap/bootstrap.sh +5 -2
- data/bootstrap/os/ubuntu/00_base.sh +1 -1
- data/bootstrap/os/ubuntu/01_git.sh +9 -0
- data/bootstrap/os/ubuntu/05_ruby.sh +7 -4
- data/bootstrap/os/ubuntu/06_puppet.sh +2 -2
- data/corl.gemspec +23 -9
- data/lib/CORL/action/authorize.rb +2 -5
- data/lib/CORL/action/bootstrap.rb +1 -5
- data/lib/CORL/action/build.rb +2 -10
- data/lib/CORL/action/destroy.rb +2 -7
- data/lib/CORL/action/exec.rb +1 -5
- data/lib/CORL/action/image.rb +1 -5
- data/lib/CORL/action/images.rb +12 -10
- data/lib/CORL/action/ip.rb +21 -0
- data/lib/CORL/action/lookup.rb +5 -3
- data/lib/CORL/action/machines.rb +12 -10
- data/lib/CORL/action/provision.rb +4 -7
- data/lib/CORL/action/regions.rb +12 -10
- data/lib/CORL/action/seed.rb +9 -10
- data/lib/CORL/action/spawn.rb +29 -15
- data/lib/CORL/action/ssh.rb +1 -5
- data/lib/CORL/action/start.rb +1 -5
- data/lib/CORL/action/stop.rb +1 -5
- data/lib/CORL/action/vagrantfile.rb +55 -0
- data/lib/CORL/configuration/file.rb +4 -1
- data/lib/CORL/machine/physical.rb +1 -1
- data/lib/CORL/machine/vagrant.rb +358 -0
- data/lib/CORL/node/local.rb +2 -3
- data/lib/CORL/node/vagrant.rb +238 -0
- data/lib/core/facade.rb +25 -2
- data/lib/core/mixin/macro/network_settings.rb +35 -1
- data/lib/core/plugin/action.rb +53 -5
- data/lib/core/plugin/configuration.rb +19 -5
- data/lib/core/plugin/fog_machine.rb +1 -1
- data/lib/core/plugin/fog_node.rb +9 -9
- data/lib/core/plugin/machine.rb +6 -13
- data/lib/core/plugin/network.rb +23 -7
- data/lib/core/plugin/node.rb +69 -36
- data/lib/core/plugin/provisioner.rb +1 -2
- data/lib/core/vagrant/Vagrantfile +7 -0
- data/lib/core/vagrant/commands/launcher.rb +66 -0
- data/lib/core/vagrant/config.rb +308 -0
- data/lib/core/vagrant/plugins.rb +33 -0
- data/lib/core/vagrant/provisioner/config.rb +39 -0
- data/lib/core/vagrant/provisioner/provisioner.rb +46 -0
- data/lib/corl.rb +8 -0
- data/locales/en.yml +13 -1
- metadata +120 -59
@@ -8,8 +8,7 @@ class Provision < Plugin::CloudAction
|
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
11
|
-
codes :
|
12
|
-
:provision_failure
|
11
|
+
codes :provision_failure
|
13
12
|
|
14
13
|
register :dry_run, :bool, false
|
15
14
|
end
|
@@ -20,9 +19,9 @@ class Provision < Plugin::CloudAction
|
|
20
19
|
|
21
20
|
def execute
|
22
21
|
super do |node, network|
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
info('corl.actions.provision.start')
|
23
|
+
|
24
|
+
ensure_node(node) do
|
26
25
|
success = true
|
27
26
|
|
28
27
|
if CORL.admin?
|
@@ -47,8 +46,6 @@ class Provision < Plugin::CloudAction
|
|
47
46
|
myself.status = code.provision_failure unless success
|
48
47
|
end
|
49
48
|
end
|
50
|
-
else
|
51
|
-
myself.status = code.network_failure
|
52
49
|
end
|
53
50
|
end
|
54
51
|
end
|
data/lib/CORL/action/regions.rb
CHANGED
@@ -30,19 +30,21 @@ class Regions < Plugin::CloudAction
|
|
30
30
|
super do |local_node, network|
|
31
31
|
info('corl.actions.regions.start')
|
32
32
|
|
33
|
-
|
34
|
-
if
|
35
|
-
regions
|
36
|
-
|
37
|
-
|
33
|
+
ensure_network(network) do
|
34
|
+
if node = network.test_node(settings[:node_provider])
|
35
|
+
if regions = node.regions
|
36
|
+
regions.each do |region|
|
37
|
+
render(sprintf("> %s", region), { :prefix => false })
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
40
|
+
myself.result = regions
|
41
|
+
success('corl.actions.regions.results', { :regions => regions.length }) if regions.length > 1
|
42
|
+
else
|
43
|
+
myself.status = code.region_load_failure
|
44
|
+
end
|
41
45
|
else
|
42
|
-
myself.status = code.
|
46
|
+
myself.status = code.node_load_failure
|
43
47
|
end
|
44
|
-
else
|
45
|
-
myself.status = code.node_load_failure
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
data/lib/CORL/action/seed.rb
CHANGED
@@ -49,7 +49,7 @@ class Seed < Plugin::CloudAction
|
|
49
49
|
super do |node, network|
|
50
50
|
info('corl.actions.seed.start')
|
51
51
|
|
52
|
-
|
52
|
+
ensure_node(node) do
|
53
53
|
admin_exec do
|
54
54
|
network_path = lookup(:corl_network)
|
55
55
|
backup_path = File.join(Dir.tmpdir(), 'corl')
|
@@ -69,13 +69,14 @@ class Seed < Plugin::CloudAction
|
|
69
69
|
|
70
70
|
render("Seeding network configuration from #{settings[:project_reference]}")
|
71
71
|
project = CORL.project(extended_config(:project, {
|
72
|
-
:directory
|
73
|
-
:reference
|
74
|
-
:url
|
75
|
-
:revision
|
76
|
-
:create
|
77
|
-
:pull
|
78
|
-
:keys
|
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
|
+
:internal_ip => CORL.public_ip # Needed for seeding Vagrant VMs
|
79
80
|
}), project_info[:provider])
|
80
81
|
|
81
82
|
if project
|
@@ -105,8 +106,6 @@ class Seed < Plugin::CloudAction
|
|
105
106
|
myself.status = code.key_store_failure
|
106
107
|
end
|
107
108
|
end
|
108
|
-
else
|
109
|
-
myself.status = code.network_load_failure
|
110
109
|
end
|
111
110
|
end
|
112
111
|
end
|
data/lib/CORL/action/spawn.rb
CHANGED
@@ -10,23 +10,20 @@ class Spawn < Plugin::CloudAction
|
|
10
10
|
|
11
11
|
def configure
|
12
12
|
super do
|
13
|
-
codes :
|
14
|
-
:key_failure,
|
13
|
+
codes :key_failure,
|
15
14
|
:node_create_failure
|
16
15
|
|
17
16
|
register :groups, :array, []
|
18
17
|
register :region, :str, nil
|
19
18
|
register :machine_type, :str, nil
|
20
19
|
register :image, :str, nil
|
21
|
-
register :user, :str,
|
20
|
+
register :user, :str, nil
|
22
21
|
register :hostnames, :array, nil
|
23
22
|
|
24
23
|
keypair_config
|
25
24
|
|
26
25
|
config.defaults(CORL.action_config(:bootstrap))
|
27
26
|
config.defaults(CORL.action_config(:seed))
|
28
|
-
|
29
|
-
config[:project_reference].default = "github:::coraltech/cluster-test[master]"
|
30
27
|
end
|
31
28
|
end
|
32
29
|
|
@@ -45,18 +42,32 @@ class Spawn < Plugin::CloudAction
|
|
45
42
|
|
46
43
|
def execute
|
47
44
|
super do |node, network|
|
48
|
-
|
49
|
-
|
50
|
-
if network
|
45
|
+
ensure_network(network) do
|
51
46
|
if keypair && keypair_clean
|
52
47
|
hostnames = []
|
53
48
|
results = []
|
54
49
|
node_provider = settings.delete(:node_provider)
|
55
50
|
|
51
|
+
if CORL.vagrant? && ! CORL.loaded_plugins(:node).keys.include?(node_provider.to_sym)
|
52
|
+
settings[:machine_type] = node_provider
|
53
|
+
settings[:user] = :vagrant unless settings[:user]
|
54
|
+
node_provider = :vagrant
|
55
|
+
end
|
56
|
+
unless settings[:user]
|
57
|
+
settings[:user] = :root
|
58
|
+
end
|
59
|
+
|
60
|
+
info('corl.actions.spawn.start', { :node_provider => node_provider })
|
61
|
+
|
56
62
|
settings.delete(:hostnames).each do |hostname|
|
57
63
|
hostnames << extract_hostnames(hostname)
|
58
64
|
end
|
59
65
|
hostnames.flatten.each do |hostname|
|
66
|
+
if hostname.is_a?(Hash)
|
67
|
+
settings[:public_ip] = hostname[:ip]
|
68
|
+
hostname = hostname[:hostname]
|
69
|
+
end
|
70
|
+
|
60
71
|
if settings[:parallel]
|
61
72
|
results << network.future.add_node(node_provider, hostname, settings)
|
62
73
|
else
|
@@ -68,8 +79,6 @@ class Spawn < Plugin::CloudAction
|
|
68
79
|
else
|
69
80
|
myself.status = code.key_failure
|
70
81
|
end
|
71
|
-
else
|
72
|
-
myself.status = code.network_failure
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
@@ -82,14 +91,19 @@ class Spawn < Plugin::CloudAction
|
|
82
91
|
|
83
92
|
if hostname.match(/([^\[]+)\[([^\]]+)\](.*)/)
|
84
93
|
before = $1
|
85
|
-
|
94
|
+
extra = $2.strip
|
86
95
|
after = $3
|
87
96
|
|
88
|
-
|
89
|
-
|
97
|
+
if extra.match(/\-/)
|
98
|
+
low, high = extra.split(/\s*\-\s*/)
|
99
|
+
range = Range.new(low, high)
|
90
100
|
|
91
|
-
|
92
|
-
|
101
|
+
range.each do |item|
|
102
|
+
hostnames << "#{before}#{item}#{after}"
|
103
|
+
end
|
104
|
+
|
105
|
+
elsif extra.match(/\d+\.\d+\.\d+\.\d+/)
|
106
|
+
hostnames = [ { :hostname => "#{before}#{after}", :ip => extra } ]
|
93
107
|
end
|
94
108
|
else
|
95
109
|
hostnames = [ hostname ]
|
data/lib/CORL/action/ssh.rb
CHANGED
@@ -8,8 +8,6 @@ class Ssh < Plugin::CloudAction
|
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
11
|
-
codes :network_failure
|
12
|
-
|
13
11
|
register :ssh_nodes, :array, nil do |values|
|
14
12
|
if values.nil?
|
15
13
|
warn('corl.actions.bootstrap.errors.ssh_nodes_empty')
|
@@ -49,7 +47,7 @@ class Ssh < Plugin::CloudAction
|
|
49
47
|
|
50
48
|
def execute
|
51
49
|
super do |local_node, network|
|
52
|
-
|
50
|
+
ensure_network(network) do
|
53
51
|
batch_success = network.batch(settings[:ssh_nodes], settings[:node_provider], false) do |node|
|
54
52
|
render_options = { :id => node.id, :hostname => node.hostname }
|
55
53
|
|
@@ -64,8 +62,6 @@ class Ssh < Plugin::CloudAction
|
|
64
62
|
success
|
65
63
|
end
|
66
64
|
myself.status = code.batch_error unless batch_success
|
67
|
-
else
|
68
|
-
myself.status = code.network_failure
|
69
65
|
end
|
70
66
|
end
|
71
67
|
end
|
data/lib/CORL/action/start.rb
CHANGED
@@ -8,8 +8,6 @@ class Start < Plugin::CloudAction
|
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
11
|
-
codes :network_failure
|
12
|
-
|
13
11
|
register :start_nodes, :array, nil do |values|
|
14
12
|
if values.nil?
|
15
13
|
warn('corl.actions.start.errors.start_nodes_empty')
|
@@ -47,14 +45,12 @@ class Start < Plugin::CloudAction
|
|
47
45
|
|
48
46
|
def execute
|
49
47
|
super do |local_node, network|
|
50
|
-
|
48
|
+
ensure_network(network) do
|
51
49
|
batch_success = network.batch(settings[:start_nodes], settings[:node_provider], settings[:parallel]) do |node|
|
52
50
|
info('corl.actions.start.start', { :provider => node.plugin_provider, :name => node.plugin_name })
|
53
51
|
node.start
|
54
52
|
end
|
55
53
|
myself.status = code.batch_error unless batch_success
|
56
|
-
else
|
57
|
-
myself.status = code.network_failure
|
58
54
|
end
|
59
55
|
end
|
60
56
|
end
|
data/lib/CORL/action/stop.rb
CHANGED
@@ -8,8 +8,6 @@ class Stop < Plugin::CloudAction
|
|
8
8
|
|
9
9
|
def configure
|
10
10
|
super do
|
11
|
-
codes :network_failure
|
12
|
-
|
13
11
|
register :stop_nodes, :array, nil do |values|
|
14
12
|
if values.nil?
|
15
13
|
warn('corl.actions.stop.errors.stop_nodes_empty')
|
@@ -47,14 +45,12 @@ class Stop < Plugin::CloudAction
|
|
47
45
|
|
48
46
|
def execute
|
49
47
|
super do |local_node, network|
|
50
|
-
|
48
|
+
ensure_network(network) do
|
51
49
|
batch_success = network.batch(settings[:stop_nodes], settings[:node_provider], settings[:parallel]) do |node|
|
52
50
|
info('corl.actions.stop.start', { :provider => node.plugin_provider, :name => node.plugin_name })
|
53
51
|
node.stop
|
54
52
|
end
|
55
53
|
myself.status = code.batch_error unless batch_success
|
56
|
-
else
|
57
|
-
myself.status = code.network_failure
|
58
54
|
end
|
59
55
|
end
|
60
56
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
module CORL
|
3
|
+
module Action
|
4
|
+
class Vagrantfile < Plugin::CloudAction
|
5
|
+
|
6
|
+
#-----------------------------------------------------------------------------
|
7
|
+
# Settings
|
8
|
+
|
9
|
+
def configure
|
10
|
+
super do
|
11
|
+
codes :vagrant_backup_failure,
|
12
|
+
:vagrant_save_failure,
|
13
|
+
:network_save_failure
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#-----------------------------------------------------------------------------
|
18
|
+
# Action operations
|
19
|
+
|
20
|
+
def execute
|
21
|
+
super do |node, network|
|
22
|
+
info('corl.actions.vagrantfile.start')
|
23
|
+
|
24
|
+
ensure_network(network) do
|
25
|
+
generated_vagrantfile_name = File.join(CORL.lib_path, 'core', 'vagrant', 'Vagrantfile')
|
26
|
+
project_vagrantfile_name = File.join(network.directory, 'Vagrantfile')
|
27
|
+
success = true
|
28
|
+
|
29
|
+
corl_vagrantfile = Util::Disk.read(generated_vagrantfile_name)
|
30
|
+
|
31
|
+
if File.exists?(project_vagrantfile_name)
|
32
|
+
unless FileUtils.mv(project_vagrantfile_name, "#{project_vagrantfile_name}.backup", :force => true)
|
33
|
+
myself.status = code.vagrant_backup_failure
|
34
|
+
success = false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if success
|
39
|
+
unless Util::Disk.write(project_vagrantfile_name, corl_vagrantfile)
|
40
|
+
myself.status = code.vagrant_save_failure
|
41
|
+
success = false
|
42
|
+
end
|
43
|
+
|
44
|
+
if success
|
45
|
+
unless network.save({ :files => 'Vagrantfile' })
|
46
|
+
myself.status = code.network_save_failure
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -175,9 +175,12 @@ class File < CORL.plugin_class(:configuration)
|
|
175
175
|
separate.export.each do |config_name, router_data|
|
176
176
|
info = search[config_name]
|
177
177
|
provider = info[:provider]
|
178
|
-
file = info[:file]
|
178
|
+
file = info[:file]
|
179
|
+
file_dir = ::File.dirname(file)
|
179
180
|
deleted_keys = deleted_keys - [ config_name ]
|
180
181
|
|
182
|
+
FileUtils.mkdir_p(file_dir) unless Dir.exists?(file_dir)
|
183
|
+
|
181
184
|
if renderer = CORL.translator(method_config, provider)
|
182
185
|
rendering = renderer.generate(router_data)
|
183
186
|
|