summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorRick Harris <rick.harris@rackspace.com>2011-02-15 23:36:23 +0000
committerRick Harris <rick.harris@rackspace.com>2011-02-15 23:36:23 +0000
commitaf920572f42b07c3ea491015d30eb5001d1f735d (patch)
treeca87cbf93fc1b09fb7fc37484b13cdeaf6c01f6c /plugins
parent21a3d77fee681d05c465c74e40177ae022bc24af (diff)
Adding vhd hidden sanity check
Diffstat (limited to 'plugins')
-rw-r--r--plugins/xenserver/xenapi/etc/xapi.d/plugins/glance23
1 files changed, 22 insertions, 1 deletions
diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
index 43c58dcff..ceb9a2185 100644
--- a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
+++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance
@@ -140,6 +140,25 @@ def fixup_vhds(sr_path, staging_path, uuid_stack):
os.rename(orig_path, new_path)
return new_path
+ def assert_vhd_not_hidden(path):
+ """
+ This is a sanity check on the image; if a snap.vhd isn't
+ present, then the image.vhd better not be marked 'hidden' or it will
+ be deleted when moved into the SR.
+ """
+ vhd_query_args = shlex.split(
+ "vhd-util query -n %(path)s -f" % locals())
+ vhd_query_proc = subprocess.Popen(
+ vhd_query_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = _assert_process_success(vhd_query_proc, "vhd-util")
+ for line in out.splitlines():
+ if line.startswith('hidden'):
+ value = line.split(':')[1].strip()
+ if value == "1":
+ raise Exception(
+ "VHD %(path)s is marked as hidden without child" %
+ locals())
+
image_path = os.path.join(staging_path, 'image')
orig_base_copy_path = os.path.join(image_path, 'image.vhd')
@@ -158,6 +177,8 @@ def fixup_vhds(sr_path, staging_path, uuid_stack):
# orphaned)
link_vhds(snap_path, base_copy_path)
move_into_sr(snap_path)
+ else:
+ assert_vhd_not_hidden(base_copy_path)
move_into_sr(base_copy_path)
return vdi_uuid
@@ -276,7 +297,7 @@ def _assert_process_success(proc, cmd):
if ret != 0:
msg = "%(cmd)s returned non-zero exit code (%i): '%s'" % (ret, err)
raise Exception(msg)
-
+ return out, err
def download_image(session, args):
"""Download an image from Glance, unbundle it, and then deposit the VHDs