summaryrefslogtreecommitdiffstats
path: root/plugins/xenserver
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-01 15:49:59 +0000
committerGerrit Code Review <review@openstack.org>2012-08-01 15:49:59 +0000
commit56a5ba1170783cb968db76f16ef2217bac7a1272 (patch)
tree86cd83933c36933fa2215716a881bcdf0577a231 /plugins/xenserver
parenta9432ce66e07b075c582000087850111abf262dc (diff)
parent4f3291e3795460f0b8da5a029faa2e4a9271c8a9 (diff)
downloadnova-56a5ba1170783cb968db76f16ef2217bac7a1272.tar.gz
nova-56a5ba1170783cb968db76f16ef2217bac7a1272.tar.xz
nova-56a5ba1170783cb968db76f16ef2217bac7a1272.zip
Merge "XenAPI: Fix race-condition with cached images."
Diffstat (limited to 'plugins/xenserver')
-rw-r--r--plugins/xenserver/xenapi/contrib/rpmbuild/SPECS/openstack-xen-plugins.spec1
-rwxr-xr-xplugins/xenserver/xenapi/etc/xapi.d/plugins/workarounds65
2 files changed, 66 insertions, 0 deletions
diff --git a/plugins/xenserver/xenapi/contrib/rpmbuild/SPECS/openstack-xen-plugins.spec b/plugins/xenserver/xenapi/contrib/rpmbuild/SPECS/openstack-xen-plugins.spec
index 8f4415311..63b5e71d3 100644
--- a/plugins/xenserver/xenapi/contrib/rpmbuild/SPECS/openstack-xen-plugins.spec
+++ b/plugins/xenserver/xenapi/contrib/rpmbuild/SPECS/openstack-xen-plugins.spec
@@ -33,6 +33,7 @@ rm -rf $RPM_BUILD_ROOT
/etc/xapi.d/plugins/kernel
/etc/xapi.d/plugins/migration
/etc/xapi.d/plugins/pluginlib_nova.py
+/etc/xapi.d/plugins/workarounds
/etc/xapi.d/plugins/xenhost
/etc/xapi.d/plugins/xenstore.py
/etc/xapi.d/plugins/utils.py
diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/workarounds b/plugins/xenserver/xenapi/etc/xapi.d/plugins/workarounds
new file mode 100755
index 000000000..611436539
--- /dev/null
+++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/workarounds
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2012 Openstack, LLC
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Handle the uploading and downloading of images via Glance."""
+
+import cPickle as pickle
+try:
+ import json
+except ImportError:
+ import simplejson as json
+import os
+import shutil
+
+import XenAPIPlugin
+
+import utils
+
+#FIXME(sirp): should this use pluginlib from 5.6?
+from pluginlib_nova import *
+configure_logging('hacks')
+
+
+def _copy_vdis(sr_path, staging_path, vdi_uuids):
+ seq_num = 0
+ for vdi_uuid in vdi_uuids:
+ src = os.path.join(sr_path, "%s.vhd" % vdi_uuid)
+ dst = os.path.join(staging_path, "%d.vhd" % seq_num)
+ shutil.copyfile(src, dst)
+ seq_num += 1
+
+
+def safe_copy_vdis(session, args):
+ params = pickle.loads(exists(args, 'params'))
+ sr_path = params["sr_path"]
+ vdi_uuids = params["vdi_uuids"]
+ uuid_stack = params["uuid_stack"]
+
+ staging_path = utils.make_staging_area(sr_path)
+ try:
+ _copy_vdis(sr_path, staging_path, vdi_uuids)
+ imported_vhds = utils.import_vhds(sr_path, staging_path, uuid_stack)
+ finally:
+ utils.cleanup_staging_area(staging_path)
+
+ # Right now, it's easier to return a single string via XenAPI,
+ # so we'll json encode the list of VHDs.
+ return json.dumps(imported_vhds)
+
+
+if __name__ == '__main__':
+ XenAPIPlugin.dispatch({'safe_copy_vdis': safe_copy_vdis})