11
11
from lib .common import setup_formatted_and_mounted_disk , teardown_formatted_and_mounted_disk
12
12
from lib .netutil import is_ipv6
13
13
from lib .pool import Pool
14
+ from lib .sr import SR
14
15
from lib .vm import VM
15
16
from lib .xo import xo_cli
16
17
@@ -366,10 +367,22 @@ def create_vms(request, host):
366
367
- `name`: name of the VM to create (str)
367
368
- `template`: name (or UUID) of template to use (str)
368
369
370
+ Optional keys:
371
+ - `vdis`: dict-specifications for VDIs (Iterable[dict[str, str]])
372
+ Mandatory keys:
373
+ - `name`
374
+ - `size`
375
+
369
376
Example:
370
377
-------
371
378
> @pytest.mark.vm_definitions(dict(name="vm 1", template="Other install media"),
372
- > dict(name="vm 2", template="CentOS 7"))
379
+ > dict(name="vm 2",
380
+ > template="CentOS 7",
381
+ > vdis=[dict(name="vm 2 system disk",
382
+ > size="100GiB",
383
+ > )],
384
+ >
385
+ > ))
373
386
> def test_foo(create_vms):
374
387
> ...
375
388
@@ -380,10 +393,12 @@ def create_vms(request, host):
380
393
for vm_def in marker .args :
381
394
assert "name" in vm_def
382
395
assert "template" in vm_def
396
+ # FIXME should check optional vdis contents
383
397
# FIXME should check for extra args
384
398
385
399
try :
386
400
vms = []
401
+ vdis = []
387
402
for vm_def in marker .args :
388
403
vm_name = vm_def ["name" ]
389
404
vm_template = vm_def ["template" ]
@@ -392,15 +407,25 @@ def create_vms(request, host):
392
407
393
408
vm = host .vm_from_template (vm_name , vm_template )
394
409
410
+ # VM is now created, make sure we clean it up on any subsequent failure
395
411
vms .append (vm )
396
412
413
+ if "vdis" in marker :
414
+ for vdi_def in marker ["vdis" ]:
415
+ sr = SR (host .main_sr_uuid (), host .pool )
416
+ vdi = sr .create_vdi (vdi_def ["name" ], vdi_def ["size" ])
417
+ vdis .append (vdi )
418
+
397
419
yield vms
398
420
399
421
except Exception :
400
422
logging .error ("exception caught..." )
401
423
raise
402
424
403
425
finally :
426
+ for vdi in vdis :
427
+ logging .info ("<< Destroy VDI %s" , vdi .uuid )
428
+ vdi .destroy ()
404
429
for vm in vms :
405
430
logging .info ("<< Destroy VM %s" , vm .uuid )
406
431
vm .destroy (verify = True )
0 commit comments