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
@@ -309,7 +310,8 @@ def imported_vm(host, vm_ref):
309
310
310
311
@pytest .fixture (scope = "class" )
311
312
def create_vms (request , host ):
312
- """Returns list of VM objects created from `vm_definitions` marker.
313
+ """
314
+ Returns list of VM objects created from `vm_definitions` marker.
313
315
314
316
`vm_definitions` marker test author to specify one or more VMs,
315
317
using one `dict` per VM.
@@ -318,11 +320,25 @@ def create_vms(request, host):
318
320
- `name`: name of the VM to create (str)
319
321
- `template`: name (or UUID) of template to use (str)
320
322
323
+ Optional keys:
324
+ - `vdis`: dict-specifications for VDIs (Iterable[dict[str, str]])
325
+ Mandatory keys:
326
+ - `name`
327
+ - `size`
328
+
321
329
Example:
322
- > @pytest.mark.vm_definitions(dict(name="vm 1", template="Other install media"),
323
- > dict(name="vm 2", template="CentOS 7"))
324
- > def test_foo(create_vms):
325
- > ...
330
+ -------
331
+ > @pytest.mark.vm_definitions(dict(name="vm 1", template="Other install media"),
332
+ > dict(name="vm 2",
333
+ > template="CentOS 7",
334
+ > vdis=[dict(name="vm 2 system disk",
335
+ > size="1GiB",
336
+ > )],
337
+ >
338
+ > ))
339
+ > def test_foo(create_vms):
340
+ > ...
341
+
326
342
"""
327
343
vm_name = "Test VM from scratch"
328
344
markers = request .node .get_closest_marker ("vm_definitions" )
@@ -331,10 +347,12 @@ def create_vms(request, host):
331
347
for marker in markers .args :
332
348
assert "name" in marker
333
349
assert "template" in marker
350
+ # FIXME should check optional vdis contents
334
351
# FIXME should check for extra args
335
352
336
353
try :
337
354
vms = []
355
+ vdis = []
338
356
for marker in markers .args :
339
357
vm_name = marker ["name" ]
340
358
vm_template = marker ["template" ]
@@ -343,15 +361,25 @@ def create_vms(request, host):
343
361
344
362
vm = host .vm_from_template (vm_name , vm_template )
345
363
364
+ # VM is now created, make sure we clean it up on any subsequent failure
346
365
vms .append (vm )
347
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
+
348
373
yield vms
349
374
350
375
except Exception :
351
376
logging .error ("exception caught..." )
352
377
raise
353
378
354
379
finally :
380
+ for vdi in vdis :
381
+ logging .info ("<< Destroy VDI %s" , vdi .uuid )
382
+ vdi .destroy ()
355
383
for vm in vms :
356
384
logging .info ("<< Destroy VM %s" , vm .uuid )
357
385
vm .destroy (verify = True )
0 commit comments