-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVagrantfile
141 lines (127 loc) · 5.19 KB
/
Vagrantfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = 2
DEFAULT_BOX = "base"
DEFAULT_RAM = 256
DEFAULT_CPUS = 1
COREOS_STABLE = "http://stable.release.core-os.net/amd64-usr/current/coreos_production_vagrant.json"
require 'yaml'
clockerConfig = YAML.load_file('clockerConfig.yaml')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
update_brooklyn_locations(clockerConfig['master']['node'], clockerConfig['slave']['hostname_template'],clockerConfig['slave']['ip_template'],clockerConfig['slave']['count'])
clockerConfig['master']['node'].each do |master_node|
#Create MASTERs
config.vm.define master_node['name'] do |master_node_config|
master_node_config.vm.hostname = master_node['name']
#Set BOX
if master_node.has_key?('box') then
master_node_config.vm.box = master_node['box']
elsif clockerConfig['master'].has_key?('box') then
master_node_config.vm.box = clockerConfig['master']['box']
else
master_node_config.vm.box = DEFAULT_BOX
end
#Configure Network
if master_node.has_key?("ip") then
master_node_config.vm.network "private_network", ip: master_node["ip"]
end
#Configure Port forwards
if master_node.has_key?("forwarded_ports") then
master_node["forwarded_ports"].each do |ports|
master_node_config.vm.network "forwarded_port", guest: ports["guest"], host: ports["host"], guest_ip: ports["guest_ip"]
end
end
#Custom SHELL Provisioning
if master_node.has_key?("shell")
master_node["shell"].each do |cmd|
master_node_config.vm.provision "shell", privileged: false, inline: cmd
end
end
#Configure VIRTUALBOX
master_node_config.vm.provider :virtualbox do |vb|
vb.name = master_node["name"]
#Configure RAM
if master_node.has_key?('ram') then
vb.memory = master_node['ram']
elsif clockerConfig['master'].has_key?('ram') then
vb.memory = clockerConfig['master']['ram']
else
vb.memory = DEFAULT_RAM
end
#Configure CPUs
if master_node.has_key?('cpus') then
vb.cpus = master_node['cpus']
elsif clockerConfig['master'].has_key?('cpus') then
vb.cpus = clockerConfig['master']['cpus']
else
vb.cpus = DEFAULT_CPUS
end
master_node_config.vm.post_up_message = "Node [%s] has been started but may still be installing software" % master_node['name']
end
end
end
#Create SLAVES
(1..clockerConfig['slave']['count']).each do |i|
config.vm.define vm_name = clockerConfig['slave']['hostname_template'] % [i] do |slave_node_config|
slave_node_config.vm.hostname = vm_name
#Set BOX
if clockerConfig['slave'].has_key?('box') then
slave_node_config.vm.box = clockerConfig['slave']['box']
else
slave_node_config.vm.box = DEFAULT_BOX
end
slave_node_config.vm.network "private_network", ip: clockerConfig['slave']['ip_template'] % [i]
#Custom SHELL Provisioning
if clockerConfig['slave'].has_key?("shell")
clockerConfig['slave']["shell"].each do |cmd|
slave_node_config.vm.provision "shell", privileged: false, inline: cmd
end
end
#Configure VIRTUALBOX
slave_node_config.vm.provider :virtualbox do |vb|
vb.name = vm_name
#Configure RAM
if clockerConfig['slave'].has_key?('ram') then
vb.memory = clockerConfig['slave']['ram']
else
vb.memory = DEFAULT_RAM
end
#Configure CPUs
if clockerConfig['slave'].has_key?('cpus') then
vb.cpus = clockerConfig['slave']['cpus']
else
vb.cpus = DEFAULT_CPUS
end
end
end
end
end
def update_brooklyn_locations(masters, slave_hostname_template, slave_ip_template, slave_node_count)
saved_lines = Array.new
File.readlines('files/.brooklyn/brooklyn.properties').each do |line|
if !line.start_with?('brooklyn.location') then
saved_lines.push(line)
end
end
File.open("files/.brooklyn/brooklyn.properties", "w") do |file|
file.puts saved_lines
#Add Masters
masters.each do |master|
file.puts "brooklyn.location.named.%s=byon:(hosts=\"%s\")" % [master['name'], master['ip']]
file.puts "brooklyn.location.named.%s.user=vagrant" % [master['name']]
file.puts "brooklyn.location.named.%s.password=vagrant" % [master['name']]
end
#Add Slaves
cluster_name = slave_hostname_template % ["-Cluster"]
file.puts "brooklyn.location.named.%s=byon:(hosts=\"%s\")" % [cluster_name , slave_ip_template % ["{1-%d}" % slave_node_count]]
file.puts "brooklyn.location.named.%s.user=vagrant" % [cluster_name]
file.puts "brooklyn.location.named.%s.password=vagrant" % [cluster_name]
(1..slave_node_count).each do |i|
host = slave_hostname_template % [i]
file.puts "brooklyn.location.named.%s=byon:(hosts=\"%s\")" % [host, slave_ip_template % [i]]
file.puts "brooklyn.location.named.%s.user=vagrant" % [host]
file.puts "brooklyn.location.named.%s.password=vagrant" % [host]
end
end
end