]>
Commit | Line | Data |
---|---|---|
d2e6a577 FG |
1 | # -*- mode: ruby -*- |
2 | # vi: set ft=ruby : | |
3 | ||
4 | require 'yaml' | |
5 | require 'time' | |
6 | VAGRANTFILE_API_VERSION = '2' | |
7 | ||
8 | DEBUG = false | |
9 | ||
11fdf7f2 TL |
10 | global_settings = {} |
11 | if File.symlink?(__FILE__) | |
12 | global_config = File.expand_path( | |
13 | File.join( | |
14 | File.dirname(File.readlink(__FILE__)), | |
15 | 'global_vagrant_variables.yml') | |
16 | ) | |
17 | if File.exist?(global_config) | |
18 | global_settings = YAML.load_file(global_config) | |
19 | end | |
20 | end | |
21 | ||
22 | LIBVIRT_URI = global_settings.fetch('libvirt_uri', '') | |
23 | LIBVIRT_STORAGE_POOL = global_settings.fetch('libvirt_storage_pool', '') | |
24 | ||
d2e6a577 FG |
25 | config_file=File.expand_path(File.join(File.dirname(__FILE__), 'vagrant_variables.yml')) |
26 | settings=YAML.load_file(config_file) | |
27 | ||
28 | LABEL_PREFIX = settings['label_prefix'] ? settings['label_prefix'] + "-" : "" | |
29 | NMONS = settings['mon_vms'] | |
30 | NOSDS = settings['osd_vms'] | |
31 | NMDSS = settings['mds_vms'] | |
32 | NRGWS = settings['rgw_vms'] | |
33 | NNFSS = settings['nfs_vms'] | |
34 | RESTAPI = settings['restapi'] | |
35 | NRBD_MIRRORS = settings['rbd_mirror_vms'] | |
36 | CLIENTS = settings['client_vms'] | |
37 | NISCSI_GWS = settings['iscsi_gw_vms'] | |
38 | PUBLIC_SUBNET = settings['public_subnet'] | |
39 | CLUSTER_SUBNET = settings['cluster_subnet'] | |
40 | BOX = settings['vagrant_box'] | |
41 | CLIENT_BOX = settings['client_vagrant_box'] | |
42 | BOX_URL = settings['vagrant_box_url'] | |
9f95a23c | 43 | SYNC_DIR = settings.fetch('vagrant_sync_dir', '/vagrant') |
d2e6a577 FG |
44 | MEMORY = settings['memory'] |
45 | ETH = settings['eth'] | |
46 | USER = settings['ssh_username'] | |
47 | ||
48 | ASSIGN_STATIC_IP = settings.fetch('assign_static_ip', true) | |
49 | DISABLE_SYNCED_FOLDER = settings.fetch('vagrant_disable_synced_folder', false) | |
50 | DISK_UUID = Time.now.utc.to_i | |
51 | ||
52 | def create_vmdk(name, size) | |
53 | dir = Pathname.new(__FILE__).expand_path.dirname | |
54 | path = File.join(dir, '.vagrant', name + '.vmdk') | |
55 | `vmware-vdiskmanager -c -s #{size} -t 0 -a scsi #{path} \ | |
56 | 2>&1 > /dev/null` unless File.exist?(path) | |
57 | end | |
58 | ||
59 | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | |
60 | config.ssh.insert_key = false # workaround for https://github.com/mitchellh/vagrant/issues/5048 | |
61 | config.ssh.private_key_path = settings['ssh_private_key_path'] | |
62 | config.ssh.username = USER | |
63 | ||
d2e6a577 | 64 | config.vm.provider :libvirt do |lv| |
11fdf7f2 TL |
65 | # When using libvirt, avoid errors like: |
66 | # "CPU feature cmt not found" | |
d2e6a577 | 67 | lv.cpu_mode = 'host-passthrough' |
11fdf7f2 TL |
68 | # set libvirt uri if present |
69 | if not LIBVIRT_URI.empty? | |
70 | lv.uri = LIBVIRT_URI | |
71 | end | |
72 | # set libvirt storage pool if present | |
73 | if not LIBVIRT_STORAGE_POOL.empty? | |
74 | lv.storage_pool_name = LIBVIRT_STORAGE_POOL | |
75 | end | |
d2e6a577 FG |
76 | end |
77 | ||
d2e6a577 FG |
78 | (0..CLIENTS - 1).each do |i| |
79 | config.vm.define "#{LABEL_PREFIX}client#{i}" do |client| | |
80 | client.vm.box = CLIENT_BOX | |
181888fb | 81 | client.vm.hostname = "#{LABEL_PREFIX}client#{i}" |
d2e6a577 FG |
82 | if ASSIGN_STATIC_IP |
83 | client.vm.network :private_network, | |
84 | ip: "#{PUBLIC_SUBNET}.4#{i}" | |
85 | end | |
86 | # Virtualbox | |
87 | client.vm.provider :virtualbox do |vb| | |
88 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
89 | end | |
90 | ||
91 | # VMware | |
92 | client.vm.provider :vmware_fusion do |v| | |
93 | v.vmx['memsize'] = "#{MEMORY}" | |
94 | end | |
95 | ||
96 | # Libvirt | |
97 | client.vm.provider :libvirt do |lv| | |
98 | lv.memory = MEMORY | |
99 | lv.random_hostname = true | |
94b18763 | 100 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
101 | end |
102 | ||
103 | # Parallels | |
104 | client.vm.provider "parallels" do |prl| | |
181888fb | 105 | prl.name = "client#{i}" |
d2e6a577 FG |
106 | prl.memory = "#{MEMORY}" |
107 | end | |
108 | ||
109 | client.vm.provider :linode do |provider| | |
110 | provider.label = client.vm.hostname | |
111 | end | |
112 | end | |
113 | end | |
114 | ||
115 | (0..NRGWS - 1).each do |i| | |
116 | config.vm.define "#{LABEL_PREFIX}rgw#{i}" do |rgw| | |
117 | rgw.vm.box = BOX | |
118 | rgw.vm.box_url = BOX_URL | |
181888fb | 119 | rgw.vm.hostname = "#{LABEL_PREFIX}rgw#{i}" |
d2e6a577 FG |
120 | if ASSIGN_STATIC_IP |
121 | rgw.vm.network :private_network, | |
122 | ip: "#{PUBLIC_SUBNET}.5#{i}" | |
123 | end | |
124 | ||
125 | # Virtualbox | |
126 | rgw.vm.provider :virtualbox do |vb| | |
127 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
128 | end | |
129 | ||
130 | # VMware | |
131 | rgw.vm.provider :vmware_fusion do |v| | |
132 | v.vmx['memsize'] = "#{MEMORY}" | |
133 | end | |
134 | ||
135 | # Libvirt | |
136 | rgw.vm.provider :libvirt do |lv| | |
137 | lv.memory = MEMORY | |
138 | lv.random_hostname = true | |
94b18763 | 139 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
140 | end |
141 | ||
142 | # Parallels | |
143 | rgw.vm.provider "parallels" do |prl| | |
181888fb | 144 | prl.name = "rgw#{i}" |
d2e6a577 FG |
145 | prl.memory = "#{MEMORY}" |
146 | end | |
147 | ||
148 | rgw.vm.provider :linode do |provider| | |
149 | provider.label = rgw.vm.hostname | |
150 | end | |
151 | end | |
152 | end | |
153 | ||
154 | (0..NNFSS - 1).each do |i| | |
155 | config.vm.define "nfs#{i}" do |nfs| | |
156 | nfs.vm.box = BOX | |
157 | nfs.vm.box_url = BOX_URL | |
181888fb | 158 | nfs.vm.hostname = "nfs#{i}" |
d2e6a577 FG |
159 | if ASSIGN_STATIC_IP |
160 | nfs.vm.network :private_network, | |
161 | ip: "#{PUBLIC_SUBNET}.6#{i}" | |
162 | end | |
163 | ||
164 | # Virtualbox | |
165 | nfs.vm.provider :virtualbox do |vb| | |
166 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
167 | end | |
168 | ||
169 | # VMware | |
170 | nfs.vm.provider :vmware_fusion do |v| | |
171 | v.vmx['memsize'] = "#{MEMORY}" | |
172 | end | |
173 | ||
174 | # Libvirt | |
175 | nfs.vm.provider :libvirt do |lv| | |
176 | lv.memory = MEMORY | |
177 | lv.random_hostname = true | |
94b18763 | 178 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
179 | end |
180 | ||
181 | # Parallels | |
182 | nfs.vm.provider "parallels" do |prl| | |
181888fb | 183 | prl.name = "nfs#{i}" |
d2e6a577 FG |
184 | prl.memory = "#{MEMORY}" |
185 | end | |
186 | ||
187 | nfs.vm.provider :linode do |provider| | |
188 | provider.label = nfs.vm.hostname | |
189 | end | |
190 | end | |
191 | end | |
192 | ||
193 | (0..NMDSS - 1).each do |i| | |
194 | config.vm.define "#{LABEL_PREFIX}mds#{i}" do |mds| | |
195 | mds.vm.box = BOX | |
196 | mds.vm.box_url = BOX_URL | |
181888fb | 197 | mds.vm.hostname = "#{LABEL_PREFIX}mds#{i}" |
d2e6a577 FG |
198 | if ASSIGN_STATIC_IP |
199 | mds.vm.network :private_network, | |
200 | ip: "#{PUBLIC_SUBNET}.7#{i}" | |
201 | end | |
202 | # Virtualbox | |
203 | mds.vm.provider :virtualbox do |vb| | |
204 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
205 | end | |
206 | ||
207 | # VMware | |
208 | mds.vm.provider :vmware_fusion do |v| | |
209 | v.vmx['memsize'] = "#{MEMORY}" | |
210 | end | |
211 | ||
212 | # Libvirt | |
213 | mds.vm.provider :libvirt do |lv| | |
214 | lv.memory = MEMORY | |
215 | lv.random_hostname = true | |
94b18763 | 216 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
217 | end |
218 | # Parallels | |
219 | mds.vm.provider "parallels" do |prl| | |
181888fb | 220 | prl.name = "mds#{i}" |
d2e6a577 FG |
221 | prl.memory = "#{MEMORY}" |
222 | end | |
223 | ||
224 | mds.vm.provider :linode do |provider| | |
225 | provider.label = mds.vm.hostname | |
226 | end | |
227 | end | |
228 | end | |
229 | ||
230 | (0..NRBD_MIRRORS - 1).each do |i| | |
231 | config.vm.define "#{LABEL_PREFIX}rbd_mirror#{i}" do |rbd_mirror| | |
232 | rbd_mirror.vm.box = BOX | |
233 | rbd_mirror.vm.box_url = BOX_URL | |
181888fb | 234 | rbd_mirror.vm.hostname = "#{LABEL_PREFIX}rbd-mirror#{i}" |
d2e6a577 FG |
235 | if ASSIGN_STATIC_IP |
236 | rbd_mirror.vm.network :private_network, | |
237 | ip: "#{PUBLIC_SUBNET}.8#{i}" | |
238 | end | |
239 | # Virtualbox | |
240 | rbd_mirror.vm.provider :virtualbox do |vb| | |
241 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
242 | end | |
243 | ||
244 | # VMware | |
245 | rbd_mirror.vm.provider :vmware_fusion do |v| | |
246 | v.vmx['memsize'] = "#{MEMORY}" | |
247 | end | |
248 | ||
249 | # Libvirt | |
250 | rbd_mirror.vm.provider :libvirt do |lv| | |
251 | lv.memory = MEMORY | |
252 | lv.random_hostname = true | |
94b18763 | 253 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
254 | end |
255 | # Parallels | |
256 | rbd_mirror.vm.provider "parallels" do |prl| | |
181888fb | 257 | prl.name = "rbd-mirror#{i}" |
d2e6a577 FG |
258 | prl.memory = "#{MEMORY}" |
259 | end | |
260 | ||
261 | rbd_mirror.vm.provider :linode do |provider| | |
262 | provider.label = rbd_mirror.vm.hostname | |
263 | end | |
264 | end | |
265 | end | |
266 | ||
267 | (0..NISCSI_GWS - 1).each do |i| | |
268 | config.vm.define "#{LABEL_PREFIX}iscsi_gw#{i}" do |iscsi_gw| | |
269 | iscsi_gw.vm.box = BOX | |
270 | iscsi_gw.vm.box_url = BOX_URL | |
181888fb | 271 | iscsi_gw.vm.hostname = "#{LABEL_PREFIX}iscsi-gw#{i}" |
d2e6a577 FG |
272 | if ASSIGN_STATIC_IP |
273 | iscsi_gw.vm.network :private_network, | |
274 | ip: "#{PUBLIC_SUBNET}.9#{i}" | |
275 | end | |
276 | # Virtualbox | |
277 | iscsi_gw.vm.provider :virtualbox do |vb| | |
278 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
279 | end | |
280 | ||
281 | # VMware | |
282 | iscsi_gw.vm.provider :vmware_fusion do |v| | |
283 | v.vmx['memsize'] = "#{MEMORY}" | |
284 | end | |
285 | ||
286 | # Libvirt | |
287 | iscsi_gw.vm.provider :libvirt do |lv| | |
288 | lv.memory = MEMORY | |
289 | lv.random_hostname = true | |
94b18763 | 290 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
291 | end |
292 | # Parallels | |
293 | iscsi_gw.vm.provider "parallels" do |prl| | |
181888fb | 294 | prl.name = "iscsi-gw#{i}" |
d2e6a577 FG |
295 | prl.memory = "#{MEMORY}" |
296 | end | |
297 | ||
298 | iscsi_gw.vm.provider :linode do |provider| | |
299 | provider.label = iscsi_gw.vm.hostname | |
300 | end | |
301 | end | |
302 | end | |
303 | ||
304 | (0..NMONS - 1).each do |i| | |
305 | config.vm.define "#{LABEL_PREFIX}mon#{i}" do |mon| | |
306 | mon.vm.box = BOX | |
307 | mon.vm.box_url = BOX_URL | |
181888fb | 308 | mon.vm.hostname = "#{LABEL_PREFIX}mon#{i}" |
d2e6a577 FG |
309 | if ASSIGN_STATIC_IP |
310 | mon.vm.network :private_network, | |
311 | ip: "#{PUBLIC_SUBNET}.1#{i}" | |
312 | end | |
313 | # Virtualbox | |
314 | mon.vm.provider :virtualbox do |vb| | |
315 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
316 | end | |
317 | ||
318 | # VMware | |
319 | mon.vm.provider :vmware_fusion do |v| | |
320 | v.vmx['memsize'] = "#{MEMORY}" | |
321 | end | |
322 | ||
323 | # Libvirt | |
324 | mon.vm.provider :libvirt do |lv| | |
325 | lv.memory = MEMORY | |
326 | lv.random_hostname = true | |
94b18763 | 327 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
328 | end |
329 | ||
330 | # Parallels | |
331 | mon.vm.provider "parallels" do |prl| | |
181888fb | 332 | prl.name = "mon#{i}" |
d2e6a577 FG |
333 | prl.memory = "#{MEMORY}" |
334 | end | |
335 | ||
336 | mon.vm.provider :linode do |provider| | |
337 | provider.label = mon.vm.hostname | |
338 | end | |
339 | end | |
340 | end | |
341 | ||
342 | (0..NOSDS - 1).each do |i| | |
343 | config.vm.define "#{LABEL_PREFIX}osd#{i}" do |osd| | |
344 | osd.vm.box = BOX | |
345 | osd.vm.box_url = BOX_URL | |
181888fb | 346 | osd.vm.hostname = "#{LABEL_PREFIX}osd#{i}" |
d2e6a577 FG |
347 | if ASSIGN_STATIC_IP |
348 | osd.vm.network :private_network, | |
349 | ip: "#{PUBLIC_SUBNET}.10#{i}" | |
350 | osd.vm.network :private_network, | |
351 | ip: "#{CLUSTER_SUBNET}.20#{i}" | |
352 | end | |
353 | # Virtualbox | |
354 | osd.vm.provider :virtualbox do |vb| | |
355 | # Create our own controller for consistency and to remove VM dependency | |
356 | # but only do it once, otherwise it would fail when rebooting machines. | |
357 | # We assume this has run if one disk was created before | |
358 | unless File.exist?("disk-#{i}-0.vdi") | |
359 | vb.customize ['storagectl', :id, | |
360 | '--name', 'OSD Controller', | |
361 | '--add', 'scsi'] | |
362 | end | |
363 | (0..2).each do |d| | |
364 | vb.customize ['createhd', | |
365 | '--filename', "disk-#{i}-#{d}", | |
11fdf7f2 | 366 | '--size', '12000'] unless File.exist?("disk-#{i}-#{d}.vdi") |
d2e6a577 FG |
367 | vb.customize ['storageattach', :id, |
368 | '--storagectl', 'OSD Controller', | |
369 | '--port', 3 + d, | |
370 | '--device', 0, | |
371 | '--type', 'hdd', | |
372 | '--medium', "disk-#{i}-#{d}.vdi"] | |
373 | end | |
374 | vb.customize ['modifyvm', :id, '--memory', "#{MEMORY}"] | |
375 | end | |
376 | ||
377 | # VMware | |
378 | osd.vm.provider :vmware_fusion do |v| | |
379 | (0..1).each do |d| | |
380 | v.vmx["scsi0:#{d + 1}.present"] = 'TRUE' | |
381 | v.vmx["scsi0:#{d + 1}.fileName"] = | |
382 | create_vmdk("disk-#{i}-#{d}", '11000MB') | |
383 | end | |
384 | v.vmx['memsize'] = "#{MEMORY}" | |
385 | end | |
386 | ||
387 | # Libvirt | |
9f95a23c | 388 | driverletters = ('b'..'z').to_a |
d2e6a577 FG |
389 | osd.vm.provider :libvirt do |lv| |
390 | # always make /dev/sd{a/b/c/d} so that CI can ensure that | |
391 | # virtualbox and libvirt will have the same devices to use for OSDs | |
392 | (0..3).each do |d| | |
a4b75251 | 393 | lv.storage :file, :device => "sd#{driverletters[d]}", :size => '100G' |
d2e6a577 FG |
394 | end |
395 | lv.memory = MEMORY | |
396 | lv.random_hostname = true | |
94b18763 | 397 | lv.nic_model_type = "e1000" |
d2e6a577 FG |
398 | end |
399 | ||
400 | # Parallels | |
401 | osd.vm.provider "parallels" do |prl| | |
181888fb | 402 | prl.name = "osd#{i}" |
d2e6a577 FG |
403 | prl.memory = "#{MEMORY}" |
404 | (0..1).each do |d| | |
405 | prl.customize ["set", :id, | |
406 | "--device-add", | |
407 | "hdd", | |
408 | "--iface", | |
409 | "sata"] | |
410 | end | |
411 | end | |
412 | ||
413 | osd.vm.provider :linode do |provider| | |
414 | provider.label = osd.vm.hostname | |
415 | end | |
416 | ||
417 | end | |
418 | end | |
9f95a23c TL |
419 | |
420 | # Faster bootup. Disables mounting the sync folder for libvirt and virtualbox | |
421 | config.vm.synced_folder './', SYNC_DIR, disabled: DISABLE_SYNCED_FOLDER | |
422 | ||
d2e6a577 | 423 | end |