From 1afd8f62cd5b59c9bd3042af6dbc4ba94717c023 Mon Sep 17 00:00:00 2001
From: NiallBunting <niall.bunting@hp.com>
Date: Fri, 18 Sep 2015 15:21:59 +0000
Subject: [PATCH] Image fix bug with --volume

Currently after calling the cinderclient to create an image from a volume,
it also then tries to create another image. This fails as the keyword
volume is unexpected. This add checks so the image is not created in
this case. Allowing --volume to not throw an error when it has worked.

Change-Id: I67e650eb0b8c331d86515e3e326c39a5d6dad5e1
Closes-Bug: 1497221
---
 openstackclient/image/v1/image.py | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index 68c81cd58d..81d384f71f 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -213,6 +213,8 @@ class CreateImage(show.ShowOne):
         if parsed_args.private:
             kwargs['is_public'] = False
 
+        info = {}
+
         if not parsed_args.location and not parsed_args.copy_from:
             if parsed_args.volume:
                 volume_client = self.app.client_manager.volume
@@ -241,18 +243,18 @@ class CreateImage(show.ShowOne):
                     # do a chunked transfer
                     kwargs["data"] = sys.stdin
 
-        # Wrap the call to catch exceptions in order to close files
-        try:
-            image = image_client.images.create(**kwargs)
-        finally:
-            # Clean up open files - make sure data isn't a string
-            if ('data' in kwargs and hasattr(kwargs['data'], 'close') and
-               kwargs['data'] != sys.stdin):
-                    kwargs['data'].close()
+        if not parsed_args.volume:
+            # Wrap the call to catch exceptions in order to close files
+            try:
+                image = image_client.images.create(**kwargs)
+            finally:
+                # Clean up open files - make sure data isn't a string
+                if ('data' in kwargs and hasattr(kwargs['data'], 'close') and
+                   kwargs['data'] != sys.stdin):
+                        kwargs['data'].close()
 
-        info = {}
-        info.update(image._info)
-        info['properties'] = utils.format_dict(info.get('properties', {}))
+            info.update(image._info)
+            info['properties'] = utils.format_dict(info.get('properties', {}))
         return zip(*sorted(six.iteritems(info)))