10
10
from lib .common import setup_formatted_and_mounted_disk , teardown_formatted_and_mounted_disk
11
11
from lib .netutil import is_ipv6
12
12
from lib .pool import Pool
13
+ from lib .sr import SR
13
14
from lib .vm import VM
14
15
from lib .xo import xo_cli
15
16
@@ -319,10 +320,22 @@ def create_vms(request, host):
319
320
- `name`: name of the VM to create (str)
320
321
- `template`: name (or UUID) of template to use (str)
321
322
323
+ Optional keys:
324
+ - `vdis`: dict-specifications for VDIs (Iterable[dict[str, str]])
325
+ Mandatory keys:
326
+ - `name`
327
+ - `size`
328
+
322
329
Example:
323
330
-------
324
331
> @pytest.mark.vm_definitions(dict(name="vm 1", template="Other install media"),
325
- > dict(name="vm 2", template="CentOS 7"))
332
+ > dict(name="vm 2",
333
+ > template="CentOS 7",
334
+ > vdis=[dict(name="vm 2 system disk",
335
+ > size="100GiB",
336
+ > )],
337
+ >
338
+ > ))
326
339
> def test_foo(create_vms):
327
340
> ...
328
341
@@ -334,10 +347,12 @@ def create_vms(request, host):
334
347
for marker in markers .args :
335
348
assert "name" in marker
336
349
assert "template" in marker
350
+ # FIXME should check optional vdis contents
337
351
# FIXME should check for extra args
338
352
339
353
try :
340
354
vms = []
355
+ vdis = []
341
356
for marker in markers .args :
342
357
vm_name = marker ["name" ]
343
358
vm_template = marker ["template" ]
@@ -346,15 +361,25 @@ def create_vms(request, host):
346
361
347
362
vm = host .vm_from_template (vm_name , vm_template )
348
363
364
+ # VM is now created, make sure we clean it up on any subsequent failure
349
365
vms .append (vm )
350
366
367
+ if "vdis" in marker :
368
+ for vdi_def in marker ["vdis" ]:
369
+ sr = SR (host .main_sr_uuid (), host .pool )
370
+ vdi = sr .create_vdi (vdi_def ["name" ], vdi_def ["size" ])
371
+ vdis .append (vdi )
372
+
351
373
yield vms
352
374
353
375
except Exception :
354
376
logging .error ("exception caught..." )
355
377
raise
356
378
357
379
finally :
380
+ for vdi in vdis :
381
+ logging .info ("<< Destroy VDI %s" , vdi .uuid )
382
+ vdi .destroy ()
358
383
for vm in vms :
359
384
logging .info ("<< Destroy VM %s" , vm .uuid )
360
385
vm .destroy (verify = True )
0 commit comments