]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/functional/Vagrantfile
import ceph 16.2.7
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / functional / Vagrantfile
CommitLineData
d2e6a577
FG
1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4require 'yaml'
5require 'time'
6VAGRANTFILE_API_VERSION = '2'
7
8DEBUG = false
9
11fdf7f2
TL
10global_settings = {}
11if 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
20end
21
22LIBVIRT_URI = global_settings.fetch('libvirt_uri', '')
23LIBVIRT_STORAGE_POOL = global_settings.fetch('libvirt_storage_pool', '')
24
d2e6a577
FG
25config_file=File.expand_path(File.join(File.dirname(__FILE__), 'vagrant_variables.yml'))
26settings=YAML.load_file(config_file)
27
28LABEL_PREFIX = settings['label_prefix'] ? settings['label_prefix'] + "-" : ""
29NMONS = settings['mon_vms']
30NOSDS = settings['osd_vms']
31NMDSS = settings['mds_vms']
32NRGWS = settings['rgw_vms']
33NNFSS = settings['nfs_vms']
34RESTAPI = settings['restapi']
35NRBD_MIRRORS = settings['rbd_mirror_vms']
36CLIENTS = settings['client_vms']
37NISCSI_GWS = settings['iscsi_gw_vms']
38PUBLIC_SUBNET = settings['public_subnet']
39CLUSTER_SUBNET = settings['cluster_subnet']
40BOX = settings['vagrant_box']
41CLIENT_BOX = settings['client_vagrant_box']
42BOX_URL = settings['vagrant_box_url']
9f95a23c 43SYNC_DIR = settings.fetch('vagrant_sync_dir', '/vagrant')
d2e6a577
FG
44MEMORY = settings['memory']
45ETH = settings['eth']
46USER = settings['ssh_username']
47
48ASSIGN_STATIC_IP = settings.fetch('assign_static_ip', true)
49DISABLE_SYNCED_FOLDER = settings.fetch('vagrant_disable_synced_folder', false)
50DISK_UUID = Time.now.utc.to_i
51
52def 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)
57end
58
59Vagrant.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 423end