[Kimchi-devel] [PATCH 2/3] issue #565: Allow a template's ISO to be a block device

Crístian Viana vianac at linux.vnet.ibm.com
Thu Mar 19 02:51:49 UTC 2015


The current template code checks whether an ISO path is a regular file
(i.e. not a directory, not a char device, not a link). However, a block
device may also be a valid ISO path because storage volumes belonging
to logical pools are always block devices (e.g. /dev/mypool/myvol.iso),
and they should also be used to create templates.

Instead of allowing only regular files to be used as template ISOs,
allow block devices as well.

Fix issue #565 (Allow creating templates with device files).

Signed-off-by: Crístian Viana <vianac at linux.vnet.ibm.com>
---
 src/kimchi/isoinfo.py    |  7 +++++--
 src/kimchi/vmtemplate.py | 10 ++++++++--
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/kimchi/isoinfo.py b/src/kimchi/isoinfo.py
index b5a1769..badb002 100644
--- a/src/kimchi/isoinfo.py
+++ b/src/kimchi/isoinfo.py
@@ -22,6 +22,7 @@ import glob
 import platform
 import os
 import re
+import stat
 import struct
 import sys
 import urllib2
@@ -151,8 +152,10 @@ class IsoImage(object):
         self._scan()
 
     def _is_iso_remote(self):
-        if os.path.isfile(self.path):
-            return False
+        if os.path.exists(self.path):
+            st_mode = os.stat(self.path).st_mode
+            if stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode):
+                return False
 
         if check_url_path(self.path):
             return True
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index ef41d0a..ec477dd 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -19,6 +19,7 @@
 
 import os
 import socket
+import stat
 import time
 import urlparse
 import uuid
@@ -403,8 +404,13 @@ class VMTemplate(object):
         # validate iso integrity
         # FIXME when we support multiples cdrom devices
         iso = self.info.get('cdrom')
-        if iso and not (os.path.isfile(iso) or check_url_path(iso)):
-            invalid['cdrom'] = [iso]
+        if iso:
+            if os.path.exists(iso):
+                st_mode = os.stat(iso).st_mode
+                if not (stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode)):
+                    invalid['cdrom'] = [iso]
+            elif not check_url_path(iso):
+                invalid['cdrom'] = [iso]
 
         self.info['invalid'] = invalid
 
-- 
2.1.0




More information about the Kimchi-devel mailing list