[Kimchi-devel] [PATCH 1/2 v3] Choose disk image format in vm template - backend

Daniel Henrique Barboza danielhb at linux.vnet.ibm.com
Fri Oct 31 01:32:22 UTC 2014


These changes implements the backend support for setting the disk
image format in an existing VM template, by using a new parameter called
"format" in the 'disk' object of the template_update schema.

Supported formats: 'bochs', 'cloop', 'cow', 'dmg', 'qcow', 'qcow2',
'qed', 'raw', 'vmdk', 'vpc'.

Signed-off-by: Daniel Henrique Barboza <danielhb at linux.vnet.ibm.com>
---
 docs/API.md              | 1 +
 src/kimchi/API.json      | 8 +++++++-
 src/kimchi/i18n.py       | 3 ++-
 src/kimchi/vmtemplate.py | 5 ++++-
 4 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/docs/API.md b/docs/API.md
index 1338e26..8d78864 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -208,6 +208,7 @@ Represents a snapshot of the Virtual Machine's primary monitor.
         * index: The device index
         * size: The device size in GB
         * base: Base image of this disk
+        * format: Format of the image. Valid formats: bochs, cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc.
 
     * graphics *(optional)*: The graphics paramenters of this template
         * type: The type of graphics. It can be VNC or spice or None.
diff --git a/src/kimchi/API.json b/src/kimchi/API.json
index a1156d5..0ad36ab 100644
--- a/src/kimchi/API.json
+++ b/src/kimchi/API.json
@@ -208,7 +208,7 @@
                 "format": {
                     "description": "The format of the volume",
                     "type": "string",
-                    "pattern": "^qcow2|raw$",
+                    "pattern": "^(bochs|cloop|cow|dmg|qcow|qcow2|qed|raw|vmdk|vpc)$",
                     "error": "KCHVOL0015E"
                 },
                 "url": {
@@ -619,6 +619,12 @@
                                 "type": "integer",
                                 "minimum": 1,
                                 "error": "KCHTMPL0022E"
+                            },
+                            "format": {
+                                "description": "Type of the image of the disk",
+                                "type": "string",
+                                "pattern":  "^(bochs|cloop|cow|dmg|qcow|qcow2|qed|raw|vmdk|vpc)$",
+                                "error": "KCHTMPL0027E"
                             }
                         }
                     },
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 74ea98e..f789259 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -145,6 +145,7 @@ messages = {
     "KCHTMPL0024E": _("Cannot identify base image %(path)s format"),
     "KCHTMPL0025E": _("When specifying CPU topology, VCPUs must be a product of sockets, cores, and threads."),
     "KCHTMPL0026E": _("When specifying CPU topology, each element must be an integer greater than zero."),
+    "KCHTMPL0027E": _("Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."),
 
     "KCHPOOL0001E": _("Storage pool %(name)s already exists"),
     "KCHPOOL0002E": _("Storage pool %(name)s does not exist"),
@@ -197,7 +198,7 @@ messages = {
     "KCHVOL0012E": _("Storage type %(type)s does not support volume create and delete"),
     "KCHVOL0013E": _("Storage volume name must be a string"),
     "KCHVOL0014E": _("Storage volume allocation must be an integer number"),
-    "KCHVOL0015E": _("Storage volume format not supported"),
+    "KCHVOL0015E": _("Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."),
     "KCHVOL0016E": _("Storage volume requires a volume name"),
     "KCHVOL0017E": _("Unable to update database with storage volume information due error: %(err)s"),
     "KCHVOL0018E": _("Only one of parameter %(param)s can be specified"),
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 0541106..ff7ddb4 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -162,7 +162,10 @@ class VMTemplate(object):
             src = os.path.join(storage_path, volume)
             dev = "%s%s" % (self._bus_to_dev[self.info['disk_bus']],
                             string.lowercase[index])
-            fmt = 'raw' if self._get_storage_type() in ['logical'] else 'qcow2'
+            if self._get_storage_type() in ['logical']:
+                fmt = 'raw'
+            else:
+                fmt = disk.get('format', 'qcow2')
             params = {'src': src, 'dev': dev, 'bus': self.info['disk_bus'],
                       'type': fmt}
             ret += """
-- 
1.8.3.1




More information about the Kimchi-devel mailing list