diff options
-rw-r--r-- | nova/tests/test_configdrive2.py | 4 | ||||
-rw-r--r-- | nova/tests/test_virt_drivers.py | 2 | ||||
-rw-r--r-- | nova/virt/configdrive.py | 25 | ||||
-rw-r--r-- | nova/virt/hyperv/vmops.py | 2 | ||||
-rw-r--r-- | nova/virt/libvirt/driver.py | 2 | ||||
-rw-r--r-- | nova/virt/xenapi/vm_utils.py | 2 |
6 files changed, 19 insertions, 18 deletions
diff --git a/nova/tests/test_configdrive2.py b/nova/tests/test_configdrive2.py index 91c2a4e5e..260ab28c7 100644 --- a/nova/tests/test_configdrive2.py +++ b/nova/tests/test_configdrive2.py @@ -45,7 +45,7 @@ class ConfigDriveTestCase(test.TestCase): self.mox.ReplayAll() - with configdrive.config_drive_helper() as c: + with configdrive.ConfigDriveBuilder() as c: c._add_file('this/is/a/path/hello', 'This is some content') (fd, imagefile) = tempfile.mkstemp(prefix='cd_iso_') os.close(fd) @@ -77,7 +77,7 @@ class ConfigDriveTestCase(test.TestCase): self.mox.ReplayAll() - with configdrive.config_drive_helper() as c: + with configdrive.ConfigDriveBuilder() as c: c._add_file('this/is/a/path/hello', 'This is some content') (fd, imagefile) = tempfile.mkstemp(prefix='cd_vfat_') os.close(fd) diff --git a/nova/tests/test_virt_drivers.py b/nova/tests/test_virt_drivers.py index 9e9309dfe..199ae30b1 100644 --- a/nova/tests/test_virt_drivers.py +++ b/nova/tests/test_virt_drivers.py @@ -114,7 +114,7 @@ class _FakeDriverBackendTestCase(object): # We can't actually make a config drive v2 because ensure_tree has # been faked out - self.stubs.Set(nova.virt.configdrive._ConfigDriveBuilder, + self.stubs.Set(nova.virt.configdrive.ConfigDriveBuilder, 'make_drive', fake_make_drive) def _teardown_fakelibvirt(self): diff --git a/nova/virt/configdrive.py b/nova/virt/configdrive.py index 9255ab851..d4352c5e6 100644 --- a/nova/virt/configdrive.py +++ b/nova/virt/configdrive.py @@ -17,7 +17,6 @@ """Config Drive v2 helper.""" -import contextlib import os import shutil import tempfile @@ -58,17 +57,8 @@ CONF.register_opts(configdrive_opts) CONFIGDRIVESIZE_BYTES = 64 * 1024 * 1024 -@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!""" +class ConfigDriveBuilder(object): + """Build config drives, optionally as a context manager.""" def __init__(self, instance_md=None): self.imagefile = None @@ -82,6 +72,17 @@ class _ConfigDriveBuilder(object): if instance_md is not None: self.add_instance_metadata(instance_md) + def __enter__(self): + return self + + def __exit__(self, exctype, excval, exctb): + if exctype is not None: + # NOTE(mikal): this means we're being cleaned up because an + # exception was thrown. All bets are off now, and we should not + # swallow the exception + return False + self.cleanup() + def _add_file(self, path, data): filepath = os.path.join(self.tempdir, path) dirname = os.path.dirname(filepath) diff --git a/nova/virt/hyperv/vmops.py b/nova/virt/hyperv/vmops.py index 83493f7ff..1fba15506 100644 --- a/nova/virt/hyperv/vmops.py +++ b/nova/virt/hyperv/vmops.py @@ -192,7 +192,7 @@ class VMOps(baseops.BaseOps): LOG.info(_('Creating config drive at %(path)s'), {'path': configdrive_path_iso}, instance=instance) - with configdrive.config_drive_helper(instance_md=inst_md) as cdb: + with configdrive.ConfigDriveBuilder(instance_md=inst_md) as cdb: try: cdb.make_drive(configdrive_path_iso) except exception.ProcessExecutionError, e: diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 83d2c96bd..42d9dd99b 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -1385,7 +1385,7 @@ class LibvirtDriver(driver.ComputeDriver): inst_md = instance_metadata.InstanceMetadata(instance, content=files, extra_md=extra_md) - with configdrive.config_drive_helper(instance_md=inst_md) as cdb: + with configdrive.ConfigDriveBuilder(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) diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index ac35a4f2b..6a0116098 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -894,7 +894,7 @@ def generate_configdrive(session, instance, vm_ref, userdevice, inst_md = instance_metadata.InstanceMetadata(instance, content=files, extra_md=extra_md) - with configdrive.config_drive_helper(instance_md=inst_md) as cdb: + with configdrive.ConfigDriveBuilder(instance_md=inst_md) as cdb: with utils.tempdir() as tmp_path: tmp_file = os.path.join(tmp_path, 'configdrive') cdb.make_drive(tmp_file) |