]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix chown fail for nfs file without necessary permission
authorNavneet Singh <singn@netapp.com>
Sat, 3 Aug 2013 12:46:44 +0000 (18:16 +0530)
committerNavneet Singh <singn@netapp.com>
Sat, 3 Aug 2013 12:55:49 +0000 (18:25 +0530)
chown failed in case of volumes on nfs export when the
permission is not granted on the storage system. Upload
volume only requires read access on the nfs file and hence
chown is not neccessary when current user has read permission.
Chown only executed when read is not granted to the user.

Change-Id: Ifa8eff7e79c6e4f15a1feb7cabec8cae8a0b0a83
Closes-Bug:#1221205

cinder/image/image_utils.py

index c562a91da8e80012f58ad04dc9fbe5081c8bdca2..a364a6961556726360716dc85dd07f5d34dc7e12 100644 (file)
@@ -316,11 +316,8 @@ def fetch_to_volume_format(context, image_service,
         if backing_file is not None:
             raise exception.ImageUnacceptable(
                 image_id=image_id,
-                reason=_("fmt=%(fmt)s backed by:"
-                         "%(backing_file)s") % {
-                             'fmt': fmt,
-                             'backing_file': backing_file,
-                         })
+                reason=_("fmt=%(fmt)s backed by:%(backing_file)s")
+                % {'fmt': fmt, 'backing_file': backing_file, })
 
         # NOTE(jdg): I'm using qemu-img convert to write
         # to the volume regardless if it *needs* conversion or not
@@ -349,12 +346,13 @@ def upload_volume(context, image_service, image_meta, volume_path,
     if (image_meta['disk_format'] == volume_format):
         LOG.debug("%s was %s, no need to convert to %s" %
                   (image_id, volume_format, image_meta['disk_format']))
-        if os.name == 'nt':
-            with fileutils.file_open(volume_path) as image_file:
-                image_service.update(context, image_id, {}, image_file)
-        with utils.temporary_chown(volume_path):
+        if os.name == 'nt' or os.access(volume_path, os.R_OK):
             with fileutils.file_open(volume_path) as image_file:
                 image_service.update(context, image_id, {}, image_file)
+        else:
+            with utils.temporary_chown(volume_path):
+                with fileutils.file_open(volume_path) as image_file:
+                    image_service.update(context, image_id, {}, image_file)
         return
 
     if (CONF.image_conversion_dir and not