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