From ba21d463de948697b1e884cae883a0e64a4d35f6 Mon Sep 17 00:00:00 2001
From: Amey Bhide <abhide@vmware.com>
Date: Fri, 22 May 2015 11:24:09 -0700
Subject: [PATCH] Add missing properties to image set command

Enable user to update the following image properties from OSC:
container-format, disk-format, size

Closes-Bug: #1446362
Change-Id: Id9f40f15702e8f14f0327a37fcc7d7971338c258
---
 doc/source/command-objects/image.rst         | 18 ++++++++++++++
 openstackclient/image/v1/image.py            | 25 +++++++++++++++++++-
 openstackclient/tests/image/v1/test_image.py |  9 +++++++
 3 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/doc/source/command-objects/image.rst b/doc/source/command-objects/image.rst
index 83036a64b7..18658651c3 100644
--- a/doc/source/command-objects/image.rst
+++ b/doc/source/command-objects/image.rst
@@ -205,6 +205,9 @@ Set image properties
         [--owner <project>]
         [--min-disk <disk-gb>]
         [--min-ram <disk-ram>]
+        [--container-format <container-format>]
+        [--disk-format <disk-format>]
+        [--size <size>]
         [--protected | --unprotected]
         [--public | --private]
         [--property <key=value> [...] ]
@@ -226,6 +229,21 @@ Set image properties
 
     Minimum RAM size needed to boot image, in megabytes
 
+.. option:: --container-format <container-format>
+
+    Container format of image.
+    Acceptable formats: ['ami', 'ari', 'aki', 'bare', 'ovf']
+
+.. option:: --disk-format <disk-format>
+
+    Disk format of image.
+    Acceptable formats: ['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
+                         'vdi', 'iso']
+
+.. option:: --size <size>
+
+    Size of image data (in bytes)
+
 .. option:: --protected
 
     Prevent image from being deleted
diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index 830b99bab8..d4d45fa287 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -508,6 +508,28 @@ class SetImage(show.ShowOne):
             type=int,
             help="Minimum RAM size needed to boot image, in megabytes",
         )
+        container_choices = ["ami", "ari", "aki", "bare", "ovf"]
+        parser.add_argument(
+            "--container-format",
+            metavar="<container-format>",
+            help=("Container format of image. Acceptable formats: %s" %
+                  container_choices),
+            choices=container_choices
+        )
+        disk_choices = ["ami", "ari", "aki", "vhd", "vmdk", "raw", "qcow2",
+                        "vdi", "iso"]
+        parser.add_argument(
+            "--disk-format",
+            metavar="<disk-format>",
+            help="Disk format of image. Acceptable formats: %s" % disk_choices,
+            choices=disk_choices
+        )
+        parser.add_argument(
+            "--size",
+            metavar="<size>",
+            type=int,
+            help="Size of image data (in bytes)"
+        )
         protected_group = parser.add_mutually_exclusive_group()
         protected_group.add_argument(
             "--protected",
@@ -545,7 +567,8 @@ class SetImage(show.ShowOne):
         image_client = self.app.client_manager.image
 
         kwargs = {}
-        copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties')
+        copy_attrs = ('name', 'owner', 'min_disk', 'min_ram', 'properties',
+                      'container_format', 'disk_format', 'size')
         for attr in copy_attrs:
             if attr in parsed_args:
                 val = getattr(parsed_args, attr, None)
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index ef7ca9eaa7..eec8cfa5c3 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -547,6 +547,9 @@ class TestImageSet(TestImage):
             '--owner', 'new-owner',
             '--min-disk', '2',
             '--min-ram', '4',
+            '--container-format', 'ovf',
+            '--disk-format', 'vmdk',
+            '--size', '35165824',
             image_fakes.image_name,
         ]
         verifylist = [
@@ -554,6 +557,9 @@ class TestImageSet(TestImage):
             ('owner', 'new-owner'),
             ('min_disk', 2),
             ('min_ram', 4),
+            ('container_format', 'ovf'),
+            ('disk_format', 'vmdk'),
+            ('size', 35165824),
             ('image', image_fakes.image_name),
         ]
         parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -566,6 +572,9 @@ class TestImageSet(TestImage):
             'owner': 'new-owner',
             'min_disk': 2,
             'min_ram': 4,
+            'container_format': 'ovf',
+            'disk_format': 'vmdk',
+            'size': 35165824
         }
         # ImageManager.update(image, **kwargs)
         self.images_mock.update.assert_called_with(