]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
ModifyVolume attributes on Clone.
authorJohn Griffith <john.griffith@solidfire.com>
Fri, 24 May 2013 04:57:57 +0000 (22:57 -0600)
committerJohn Griffith <john.griffith@solidfire.com>
Fri, 24 May 2013 15:07:47 +0000 (09:07 -0600)
Clones copy over the attributes from the source volume,
we want to keep some admin data like source-volid and if
it's a clone or not.  To do that we just need to call modifyvolume
after the clone operation and update this info.

Change-Id: I903fe6f8a57880abad8d315d091c1e57624a519c

cinder/volume/drivers/solidfire.py

index d42dba25cea4245f17a36a68580476aae58fcd66..11f3168c990bfa538e442e9cc3c5fc52d3ceb061 100644 (file)
@@ -317,26 +317,27 @@ class SolidFire(SanISCSIDriver):
         if 'qos' in sf_vol:
             qos = sf_vol['qos']
 
-        attributes = {'uuid': v_ref['id'],
-                      'is_clone': 'True',
-                      'src_uuid': src_uuid}
-
-        if qos:
-            for k, v in qos.items():
-                            attributes[k] = str(v)
-
         params = {'volumeID': int(sf_vol['volumeID']),
                   'name': 'UUID-%s' % v_ref['id'],
-                  'attributes': attributes,
                   'newAccountID': sfaccount['accountID'],
                   'qos': qos}
-
         data = self._issue_api_request('CloneVolume', params)
 
         if (('result' not in data) or ('volumeID' not in data['result'])):
             raise exception.SolidFireAPIDataException(data=data)
-
         sf_volume_id = data['result']['volumeID']
+
+        # NOTE(jdg): all attributes are copied via clone, need to do an update
+        # to set any that were provided
+        attributes = {'uuid': v_ref['id'],
+                      'is_clone': 'True',
+                      'src_uuid': src_uuid}
+
+        params = {'volumeID': sf_volume_id,
+                  'attributes': attributes}
+
+        data = self._issue_api_request('ModifyVolume', params)
+
         model_update = self._get_model_info(sfaccount, sf_volume_id)
         if model_update is None:
             mesg = _('Failed to get model update from clone')