25202866 Nova resize fails with Pure storage iSCSI back-end s11u3-sru
authorSean Wilcox <sean.wilcox@oracle.com>
Fri, 03 Feb 2017 13:18:56 -0700
branchs11u3-sru
changeset 7643 eece4b285510
parent 7642 1a3fee2e8779
child 7644 b5a859411118
25202866 Nova resize fails with Pure storage iSCSI back-end
components/openstack/nova/files/solariszones/driver.py
--- a/components/openstack/nova/files/solariszones/driver.py	Fri Feb 03 11:14:15 2017 -0800
+++ b/components/openstack/nova/files/solariszones/driver.py	Fri Feb 03 13:18:56 2017 -0700
@@ -1,7 +1,7 @@
 # Copyright 2011 Justin Santa Barbara
 # All Rights Reserved.
 #
-# Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2017, Oracle and/or its affiliates. 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
@@ -538,6 +538,14 @@
 
         return self._kstat_control
 
+    def _initialize_volume_connection(self, context, volume_id, connection):
+        connection_info = self._volume_api.initialize_connection(context,
+                                                                 volume_id,
+                                                                 connection)
+        connection_info['serial'] = volume_id
+
+        return connection_info
+
     def init_host(self, host):
         """Initialize anything that is necessary for the driver to function,
         including catching up with currently running VM's on the given host.
@@ -1215,9 +1223,9 @@
         volume_id = volume['id']
 
         connector = self.get_volume_connector(instance)
-        connection_info = self._volume_api.initialize_connection(
-            context, volume_id, connector)
-        connection_info['serial'] = volume_id
+        connection_info = self._initialize_volume_connection(context,
+                                                             volume_id,
+                                                             connector)
 
         # Check connection_info to determine if the provided volume is
         # local to this compute node. If it is, then don't use it for
@@ -2533,7 +2541,10 @@
                     raise exception.ResizeError(reason=msg)
 
             if root_ci['driver_volume_type'] == 'iscsi':
-                volume_id = root_ci['data']['volume_id']
+                try:
+                    volume_id = root_ci['data']['volume_id']
+                except KeyError:
+                    volume_id = root_ci.get('serial')
             else:
                 volume_id = root_ci['serial']
 
@@ -2681,8 +2692,9 @@
             old_rvid = instance.system_metadata.get('old_instance_volid')
             if old_rvid:
                 connector = self.get_volume_connector(instance)
-                connection_info = self._volume_api.initialize_connection(
-                    context, old_rvid, connector)
+                connection_info = self._initialize_volume_connection(context,
+                                                                     old_rvid,
+                                                                     connector)
 
                 new_rvid = instance.system_metadata['new_instance_volid']
 
@@ -2852,9 +2864,9 @@
         :param samehost: is the resize happening on the same host
         """
         connector = self.get_volume_connector(instance)
-        connection_info = self._volume_api.initialize_connection(context,
-                                                                 replacement,
-                                                                 connector)
+        connection_info = self._initialize_volume_connection(context,
+                                                             replacement,
+                                                             connector)
         connection_info['serial'] = replacement
         rootmp = instance.root_device_name
 
@@ -2922,9 +2934,9 @@
         old_rvid = instance.system_metadata.get('old_instance_volid')
         if old_rvid:
             connector = self.get_volume_connector(instance)
-            connection_info = self._volume_api.initialize_connection(context,
-                                                                     old_rvid,
-                                                                     connector)
+            connection_info = self.initialize_volume_connection(context,
+                                                                old_rvid,
+                                                                connector)
 
             new_rvid = instance.system_metadata['new_instance_volid']
             self._volume_api.detach(context, new_rvid)