summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorMichael Still <mikal@stillhq.com>2012-12-20 13:56:00 +1100
committerMichael Still <mikal@stillhq.com>2012-12-21 09:29:15 +1100
commit0edb7d4db9d20afc88be8b562d3301a5bd667138 (patch)
treec88a1bb2e4b968a151c55fdbf8dd76ec05ef8617 /nova/virt
parent6085602f1b266d31d08b4a4b5bd33f7768d53a81 (diff)
Provide a configdrive helper which uses contextlib.
As suggested on review of Ib23d117ad4cd5dc92298a0812eb468f7d557417c. Resolves bug 1092248. Change-Id: I2829ac60732b86b9853983b03ef6f30f5c5a3283
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/configdrive.py14
-rw-r--r--nova/virt/hyperv/vmops.py16
-rw-r--r--nova/virt/libvirt/driver.py17
3 files changed, 27 insertions, 20 deletions
diff --git a/nova/virt/configdrive.py b/nova/virt/configdrive.py
index 2a1001577..321bf8389 100644
--- a/nova/virt/configdrive.py
+++ b/nova/virt/configdrive.py
@@ -17,6 +17,7 @@
"""Config Drive v2 helper."""
+import contextlib
import os
import shutil
import tempfile
@@ -54,7 +55,18 @@ CONF = cfg.CONF
CONF.register_opts(configdrive_opts)
-class ConfigDriveBuilder(object):
+@contextlib.contextmanager
+def config_drive_helper(instance_md=None):
+ cdb = _ConfigDriveBuilder(instance_md=instance_md)
+ try:
+ yield cdb
+ finally:
+ cdb.cleanup()
+
+
+class _ConfigDriveBuilder(object):
+ """Don't use this directly, use the fancy pants contextlib helper above!"""
+
def __init__(self, instance_md=None):
self.imagefile = None
diff --git a/nova/virt/hyperv/vmops.py b/nova/virt/hyperv/vmops.py
index fea1034f4..4ff89ef5e 100644
--- a/nova/virt/hyperv/vmops.py
+++ b/nova/virt/hyperv/vmops.py
@@ -194,15 +194,13 @@ class VMOps(baseops.BaseOps):
LOG.info(_('Creating config drive at %(path)s'),
{'path': configdrive_path_iso}, instance=instance)
- cdb = configdrive.ConfigDriveBuilder(instance_md=inst_md)
- try:
- cdb.make_drive(configdrive_path_iso)
- except exception.ProcessExecutionError, e:
- LOG.error(_('Creating config drive failed with error: %s'),
- e, instance=instance)
- raise
- finally:
- cdb.cleanup()
+ with configdrive.config_drive_helper(instance_md=inst_md) as cdb:
+ try:
+ cdb.make_drive(configdrive_path_iso)
+ except exception.ProcessExecutionError, e:
+ LOG.error(_('Creating config drive failed with error: %s'),
+ e, instance=instance)
+ raise
if not CONF.config_drive_cdrom:
drive_type = constants.IDE_DISK
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 9c78dc57d..198a8100a 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -1446,20 +1446,17 @@ class LibvirtDriver(driver.ComputeDriver):
inst_md = instance_metadata.InstanceMetadata(instance,
content=files, extra_md=extra_md)
- cdb = configdrive.ConfigDriveBuilder(instance_md=inst_md)
- try:
+ with configdrive.config_drive_helper(instance_md=inst_md) as cdb:
configdrive_path = basepath(fname='disk.config')
LOG.info(_('Creating config drive at %(path)s'),
{'path': configdrive_path}, instance=instance)
- cdb.make_drive(configdrive_path)
- except exception.ProcessExecutionError, e:
- LOG.error(_('Creating config drive failed with error: %s'),
- e, instance=instance)
- raise
-
- finally:
- cdb.cleanup()
+ try:
+ cdb.make_drive(configdrive_path)
+ except exception.ProcessExecutionError, e:
+ LOG.error(_('Creating config drive failed with error: %s'),
+ e, instance=instance)
+ raise
elif any((key, net, metadata, admin_pass, files)):
# If we're not using config_drive, inject into root fs