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
@@ -350,10 +351,22 @@ def create_vms(request, host):
350
351
- `name`: name of the VM to create (str)
351
352
- `template`: name (or UUID) of template to use (str)
352
353
354
+ Optional keys:
355
+ - `vdis`: dict-specifications for VDIs (Iterable[dict[str, str]])
356
+ Mandatory keys:
357
+ - `name`
358
+ - `size`
359
+
353
360
Example:
354
361
-------
355
362
> @pytest.mark.vm_definitions(dict(name="vm 1", template="Other install media"),
356
- > dict(name="vm 2", template="CentOS 7"))
363
+ > dict(name="vm 2",
364
+ > template="CentOS 7",
365
+ > vdis=[dict(name="vm 2 system disk",
366
+ > size="100GiB",
367
+ > )],
368
+ >
369
+ > ))
357
370
> def test_foo(create_vms):
358
371
> ...
359
372
@@ -364,10 +377,12 @@ def create_vms(request, host):
364
377
for marker in markers .args :
365
378
assert "name" in marker
366
379
assert "template" in marker
380
+ # FIXME should check optional vdis contents
367
381
# FIXME should check for extra args
368
382
369
383
try :
370
384
vms = []
385
+ vdis = []
371
386
for marker in markers .args :
372
387
vm_name = marker ["name" ]
373
388
vm_template = marker ["template" ]
@@ -376,15 +391,25 @@ def create_vms(request, host):
376
391
377
392
vm = host .vm_from_template (vm_name , vm_template )
378
393
394
+ # VM is now created, make sure we clean it up on any subsequent failure
379
395
vms .append (vm )
380
396
397
+ if "vdis" in marker :
398
+ for vdi_def in marker ["vdis" ]:
399
+ sr = SR (host .main_sr_uuid (), host .pool )
400
+ vdi = sr .create_vdi (vdi_def ["name" ], vdi_def ["size" ])
401
+ vdis .append (vdi )
402
+
381
403
yield vms
382
404
383
405
except Exception :
384
406
logging .error ("exception caught..." )
385
407
raise
386
408
387
409
finally :
410
+ for vdi in vdis :
411
+ logging .info ("<< Destroy VDI %s" , vdi .uuid )
412
+ vdi .destroy ()
388
413
for vm in vms :
389
414
logging .info ("<< Destroy VM %s" , vm .uuid )
390
415
vm .destroy (verify = True )
0 commit comments