
From: Paulo Vital <pvital@linux.vnet.ibm.com> Changed API.json and model to accept empty parameters or missing the cdrom (ISO image) parameter while creating a new template. Now, when creating a new template and not specifying an ISO image it is assumed the template will use netboot - PXE/DHCP/TFTP/(NFS/HTTP/FTP). This is part of solution to Issue #372. Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- model/templates.py | 35 ++++++++++++++++++++++------------- vmtemplate.py | 2 +- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/model/templates.py b/model/templates.py index 8a29e02..bbf5081 100644 --- a/model/templates.py +++ b/model/templates.py @@ -41,18 +41,24 @@ class TemplatesModel(object): def create(self, params): name = params.get('name', '').strip() - iso = params.get('cdrom') - # check search permission - if iso and iso.startswith('/') and os.path.exists(iso): - st_mode = os.stat(iso).st_mode - if stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode): - user = UserTests().probe_user() - run_setfacl_set_attr(iso, user=user) - ret, excp = probe_file_permission_as_user(iso, user) - if ret is False: - raise InvalidParameter('KCHISO0008E', - {'filename': iso, 'user': user, - 'err': excp}) + iso = params.get('cdrom', '') + + if not iso: + # set template to boot via network card (net boot) + params['cdrom'] = 'netboot' + params['os_distro'] = 'unknown' + params['os_version'] = 'unknown' + else: + # check search permission + if iso and iso.startswith('/') and os.path.exists(iso): + st_mode = os.stat(iso).st_mode + if stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode): + user = UserTests().probe_user() + run_setfacl_set_attr(iso, user=user) + ret, excp = probe_file_permission_as_user(iso, user) + if ret is False: + raise InvalidParameter('KCHISO0008E', {'filename': iso, + 'user': user, 'err': excp}) conn = self.conn.get() for net_name in params.get(u'networks', []): @@ -64,7 +70,10 @@ class TemplatesModel(object): # Creates the template class with necessary information # Checkings will be done while creating this class, so any exception # will be raised here - t = LibvirtVMTemplate(params, scan=True, conn=self.conn) + if params['cdrom'] == 'netboot': + t = LibvirtVMTemplate(params, conn=self.conn) + else: + t = LibvirtVMTemplate(params, scan=True, conn=self.conn) # Validate cpu info t.cpuinfo_validate() diff --git a/vmtemplate.py b/vmtemplate.py index ef17ff6..435bf42 100644 --- a/vmtemplate.py +++ b/vmtemplate.py @@ -501,7 +501,7 @@ class VMTemplate(object): # validate iso integrity # FIXME when we support multiples cdrom devices iso = self.info.get('cdrom') - if iso: + if iso and (iso != 'netboot'): 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)): -- 2.5.0