def template_update(self, name, params): old_t = self.template_lookup(name) new_t = copy.copy(old_t) new_t.update(params) ident = name new_storagepool = new_t.get(u'storagepool', '') try: self._get_storagepool(pool_name_from_uri(new_storagepool)) except Exception: msg_args = {'pool': new_storagepool, 'template': name} raise InvalidParameter("KCHTMPL0004E", msg_args) for net_name in params.get(u'networks', []): try: self._get_network(net_name) except NotFoundError: msg_args = {'network': net_name, 'template': name} raise InvalidParameter("KCHTMPL0003E", msg_args) self.template_delete(name) try: ident = self.templates_create(new_t) except: ident = self.templates_create(old_t) raise return ident
def _get_disks_xml(self, vm_uuid): # Current implementation just allows to create disk in one single # storage pool, so we cannot mix the types (scsi volumes vs img file) storage_type = self._get_storage_type() storage_path = self._get_storage_path() base_disk_params = {'type': 'disk', 'disk': 'file', 'bus': self.info['disk_bus']} logical_disk_params = {'format': 'raw'} iscsi_disk_params = {'disk': 'block', 'format': 'raw'} scsi_disk = 'volume' if self.fc_host_support else 'block' scsi_disk_params = {'disk': scsi_disk, 'type': 'lun', 'format': 'raw', 'bus': 'scsi'} disks_xml = '' pool_name = pool_name_from_uri(self.info['storagepool']) for index, disk in enumerate(self.info['disks']): params = dict(base_disk_params) params['format'] = disk['format'] params.update(locals().get('%s_disk_params' % storage_type, {})) params['index'] = index volume = disk.get('volume') if volume is not None: params['path'] = self._get_volume_path(pool_name, volume) else: volume = "%s-%s.img" % (vm_uuid, params['index']) params['path'] = os.path.join(storage_path, volume) disks_xml += get_disk_xml(params)[1] return unicode(disks_xml, 'utf-8')
def create(self, params): name = params['name'] conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: pool_name = pool_name_from_uri(pool_uri) try: conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) t = LibvirtVMTemplate(params, scan=True) session.store('template', name, t.info) return name
def _get_iscsi_disks_xml(self): def build_disk_xml(children=[]): disk = E.disk(type='volume', device='disk') disk.extend(children) return etree.tostring(disk) ret = "" children = [] auth = self._get_storage_auth() if auth: etree_auth = E.auth(username=auth['username']) etree_auth.append( E.secret(type=auth['type'], usage=auth['libvirtiscsi'])) children.append(etree_auth) children.append(E.driver(name='qemu', type='raw')) disk_bus = self.info['disk_bus'] dev_prefix = self._bus_to_dev[disk_bus] pool_name = pool_name_from_uri(self.info['storagepool']) for i, d in enumerate(self.info['disks']): source = E.source(pool=pool_name, volume=d.get('volume'), mode='host') # FIXME if more than 26 disks target = E.target(dev=dev_prefix + string.lowercase[i], bus=disk_bus) ret += build_disk_xml(children + [source, target]) return ret
def create(self, params): name = params.get('name', '').strip() if not name: iso = params['cdrom'] iso_name = os.path.splitext(iso[iso.rfind('/') + 1:])[0] name = iso_name + str(int(time.time()*1000)) params['name'] = name conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: pool_name = pool_name_from_uri(pool_uri) try: conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) t = LibvirtVMTemplate(params, scan=True) session.store('template', name, t.info) return name
def _get_disks_xml(self, vm_uuid): # Current implementation just allows to create disk in one single # storage pool, so we cannot mix the types (scsi volumes vs img file) storage_type = self._get_storage_type() storage_path = self._get_storage_path() base_disk_params = {"type": "disk", "disk": "file", "bus": self.info["disk_bus"], "format": "qcow2"} logical_disk_params = {"format": "raw"} iscsi_disk_params = {"disk": "block", "format": "raw"} scsi_disk = "volume" if self.fc_host_support else "block" scsi_disk_params = {"disk": scsi_disk, "type": "lun", "format": "raw", "bus": "scsi"} disks_xml = "" pool_name = pool_name_from_uri(self.info["storagepool"]) for index, disk in enumerate(self.info["disks"]): params = dict(base_disk_params) params["format"] = disk.get("format", params["format"]) params.update(locals().get("%s_disk_params" % storage_type, {})) params["index"] = index volume = disk.get("volume") if volume is not None: params["path"] = self._get_volume_path(pool_name, volume) else: volume = "%s-%s.img" % (vm_uuid, params["index"]) params["path"] = os.path.join(storage_path, volume) disks_xml += get_disk_xml(params)[1] return unicode(disks_xml, "utf-8")
def _get_iscsi_disks_xml(self): def build_disk_xml(children=[]): disk = E.disk(type='volume', device='disk') disk.extend(children) return etree.tostring(disk) ret = "" children = [] auth = self._get_storage_auth() if auth: etree_auth = E.auth(username=auth['username']) etree_auth.append(E.secret(type=auth['type'], usage=auth['libvirtiscsi'])) children.append(etree_auth) children.append(E.driver(name='qemu', type='raw')) disk_bus = self.info['disk_bus'] dev_prefix = self._bus_to_dev[disk_bus] pool_name = pool_name_from_uri(self.info['storagepool']) for i, d in enumerate(self.info['disks']): source = E.source(pool=pool_name, volume=d.get('volume'), mode='host') # FIXME if more than 26 disks target = E.target(dev=dev_prefix + string.lowercase[i], bus=disk_bus) ret += build_disk_xml(children+[source, target]) return ret
def _get_disks_xml(self, vm_uuid): # Current implementation just allows to create disk in one single # storage pool, so we cannot mix the types (scsi volumes vs img file) storage_type = self._get_storage_type() storage_path = self._get_storage_path() base_disk_params = {'type': 'disk', 'disk': 'file', 'bus': self.info['disk_bus'], 'format': 'qcow2'} logical_disk_params = {'format': 'raw'} iscsi_disk_params = {'disk': 'block', 'format': 'raw'} scsi_disk = 'volume' if self.fc_host_support else 'block' scsi_disk_params = {'disk': scsi_disk, 'type': 'lun', 'format': 'raw', 'bus': 'scsi'} disks_xml = '' pool_name = pool_name_from_uri(self.info['storagepool']) for index, disk in enumerate(self.info['disks']): params = dict(base_disk_params) params['format'] = disk.get('format', params['format']) params.update(locals().get('%s_disk_params' % storage_type, {})) params['index'] = index volume = disk.get('volume') if volume is not None: params['path'] = self._get_volume_path(pool_name, volume) else: volume = "%s-%s.img" % (vm_uuid, params['index']) params['path'] = os.path.join(storage_path, volume) disks_xml += get_disk_xml(params)[1] return unicode(disks_xml, 'utf-8')
def validate_integrity(self): invalid = {} # validate networks integrity invalid_networks = list(set(self.info['networks']) - set(self._get_all_networks_name())) if invalid_networks: invalid['networks'] = invalid_networks # validate storagepools integrity pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) if pool_name not in self._get_all_storagepools_name(): invalid['storagepools'] = [pool_name] # validate iso integrity # FIXME when we support multiples cdrom devices iso = self.info.get('cdrom') 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 return self.info
def template_update(self, name, params): old_t = self.template_lookup(name) new_t = copy.copy(old_t) new_t.update(params) ident = name new_storagepool = new_t.get(u'storagepool', '') try: self._get_storagepool(pool_name_from_uri(new_storagepool)) except Exception as e: raise InvalidParameter("Storagepool specified is not valid: %s." % e.message) for net_name in params.get(u'networks', []): try: self._get_network(net_name) except NotFoundError: raise InvalidParameter("Network '%s' specified by template " "does not exist" % net_name) self.template_delete(name) try: ident = self.templates_create(new_t) except: ident = self.templates_create(old_t) raise return ident
def update(self, name, params): old_t = self.lookup(name) new_t = copy.copy(old_t) new_t.update(params) ident = name pool_uri = new_t.get(u'storagepool', '') pool_name = pool_name_from_uri(pool_uri) try: conn = self.conn.get() conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': name }) for net_name in params.get(u'networks', []): try: conn = self.conn.get() conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", { 'network': net_name, 'template': name }) self.delete(name) try: ident = self.templates.create(new_t) except: ident = self.templates.create(old_t) raise return ident
def update(self, name, params): old_t = self.lookup(name) new_t = copy.copy(old_t) new_t.update(params) ident = name pool_uri = new_t.get(u'storagepool', '') pool_name = pool_name_from_uri(pool_uri) try: conn = self.conn.get() conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) for net_name in params.get(u'networks', []): try: conn = self.conn.get() conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) self.delete(name) try: ident = self.templates.create(new_t) except: ident = self.templates.create(old_t) raise return ident
def validate_integrity(self): invalid = {} # validate networks integrity invalid_networks = list( set(self.info['networks']) - set(self._get_all_networks_name())) if invalid_networks: invalid['networks'] = invalid_networks # validate storagepools integrity pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) if pool_name not in self._get_all_storagepools_name(): invalid['storagepools'] = [pool_name] # validate iso integrity # FIXME when we support multiples cdrom devices iso = self.info.get('cdrom') 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 return self.info
def create(self, params): name = params.get('name', '').strip() iso = params['cdrom'] # check search permission if iso.startswith('/') and os.path.isfile(iso): user = UserTests().probe_user() ret, excp = probe_file_permission_as_user(iso, user) if ret is False: raise InvalidParameter('KCHISO0008E', { 'filename': iso, 'user': user, 'err': excp }) if not name: iso_name = os.path.splitext(iso[iso.rfind('/') + 1:])[0] name = iso_name + str(int(time.time() * 1000)) params['name'] = name conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': name }) tmp_volumes = [ disk['volume'] for disk in params.get('disks', []) if 'volume' in disk ] self.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", { 'network': net_name, 'template': name }) # 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) try: with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) session.store('template', name, t.info) except Exception as e: raise OperationFailed('KCHTMPL0020E', {'err': e.message}) return name
def _pool_used_by_template(self, pool_name): with self.objstore as session: templates = session.get_list('template') for tmpl in templates: t_info = session.get('template', tmpl) t_pool = pool_name_from_uri(t_info['storagepool']) if t_pool == pool_name: return True return False
def _storage_validate(self): pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) try: pool = self.model._get_storagepool(pool_name) except NotFoundError: raise InvalidParameter('Storage specified by template does not exist') if pool.info['state'] != 'active': raise InvalidParameter('Storage specified by template is not active') return pool
def _storage_validate(self): pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) try: pool = self.model._get_storagepool(pool_name) except NotFoundError: msg_args = {'pool': pool_name, 'template': self.name} raise InvalidParameter("KCHTMPL0004E", msg_args) if pool.info['state'] != 'active': msg_args = {'pool': pool_name, 'template': self.name} raise InvalidParameter("KCHTMPL0005E", msg_args) return pool
def create(self, params): name = params.get('name', '').strip() iso = params['cdrom'] # check search permission if iso.startswith('/') and os.path.isfile(iso): user = UserTests().probe_user() ret, excp = probe_file_permission_as_user(iso, user) if ret is False: raise InvalidParameter('KCHISO0008E', {'filename': iso, 'user': user, 'err': excp}) if not name: iso_name = os.path.splitext(iso[iso.rfind('/') + 1:])[0] name = iso_name + str(int(time.time() * 1000)) params['name'] = name conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) tmp_volumes = [disk['volume'] for disk in params.get('disks', []) if 'volume' in disk] self.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) # 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) try: with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) session.store('template', name, t.info) except Exception as e: raise OperationFailed('KCHTMPL0020E', {'err': e.message}) return name
def _storage_validate(self): pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) try: conn = self.conn.get() pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except libvirt.libvirtError: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': self.name}) if not pool.isActive(): raise InvalidParameter("KCHTMPL0005E", {'pool': pool_name, 'template': self.name}) return pool
def update(self, name, params): old_t = self.lookup(name) new_t = copy.copy(old_t) new_t.update(params) if not self._validate_updated_cpu_params(new_t): raise InvalidParameter('KCHTMPL0025E') ident = name conn = self.conn.get() pool_uri = new_t.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': name }) tmp_volumes = [ disk['volume'] for disk in new_t.get('disks', []) if 'volume' in disk ] self.templates.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name.encode('utf-8')) except Exception: raise InvalidParameter("KCHTMPL0003E", { 'network': net_name, 'template': name }) self.delete(name) try: ident = self.templates.create(new_t) except: ident = self.templates.create(old_t) raise return ident
def _storage_validate(self): pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) try: conn = self.conn.get() pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except libvirt.libvirtError: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': self.name }) if not pool.isActive(): raise InvalidParameter("KCHTMPL0005E", { 'pool': pool_name, 'template': self.name }) return pool
def _get_iscsi_disks_xml(self): def build_disk_xml(children=[]): disk = E.disk(type='block', device='disk') disk.extend(children) return etree.tostring(disk) ret = "" children = [] children.append(E.driver(name='qemu', type='raw')) disk_bus = self.info['disk_bus'] dev_prefix = self._bus_to_dev[disk_bus] pool_name = pool_name_from_uri(self.info['storagepool']) for i, d in enumerate(self.info['disks']): source = E.source(dev=self._get_volume_path(pool_name, d.get('volume'))) # FIXME if more than 26 disks target = E.target(dev=dev_prefix + string.lowercase[i], bus=disk_bus) ret += build_disk_xml(children+[source, target]) return ret
def update(self, name, params): old_t = self.lookup(name) new_t = copy.copy(old_t) new_t.update(params) if not self._validate_updated_cpu_params(new_t): raise InvalidParameter('KCHTMPL0025E') ident = name conn = self.conn.get() pool_uri = new_t.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) tmp_volumes = [disk['volume'] for disk in new_t.get('disks', []) if 'volume' in disk] self.templates.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) self.delete(name) try: ident = self.templates.create(new_t) except: ident = self.templates.create(old_t) raise return ident
def validate_integrity(self): invalid = {} # validate networks integrity invalid_networks = list( set(self.info['networks']) - set(self._get_all_networks_name())) if invalid_networks: invalid['networks'] = invalid_networks # validate storagepools integrity pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) if pool_name not in self._get_all_storagepools_name(): invalid['storagepools'] = [pool_name] # 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] self.info['invalid'] = invalid return self.info
def validate_integrity(self): invalid = {} # validate networks integrity invalid_networks = list(set(self.info['networks']) - set(self._get_all_networks_name())) if invalid_networks: invalid['networks'] = invalid_networks # validate storagepools integrity pool_uri = self.info['storagepool'] pool_name = pool_name_from_uri(pool_uri) if pool_name not in self._get_all_storagepools_name(): invalid['storagepools'] = [pool_name] # validate iso integrity # FIXME when we support multiples cdrom devices iso = self.info['cdrom'] if not (os.path.isfile(iso) or check_url_path(iso)): invalid['cdrom'] = [iso] self.info['invalid'] = invalid return self.info
def create(self, params): name = params.get('name', '').strip() if not name: iso = params['cdrom'] iso_name = os.path.splitext(iso[iso.rfind('/') + 1:])[0] name = iso_name + str(int(time.time() * 1000)) params['name'] = name conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: pool_name = pool_name_from_uri(pool_uri) try: conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': name }) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", { 'network': net_name, 'template': name }) with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) t = LibvirtVMTemplate(params, scan=True) session.store('template', name, t.info) return name
def create(self, params): name = params.get('name', '').strip() iso = params.get('cdrom') # check search permission if iso and iso.startswith('/') and os.path.isfile(iso): user = UserTests().probe_user() ret, excp = probe_file_permission_as_user(iso, user) if ret is False: raise InvalidParameter('KCHISO0008E', {'filename': iso, 'user': user, 'err': excp}) cpu_info = params.get('cpu_info') if cpu_info: topology = cpu_info.get('topology') # Check, even though currently only topology # is supported. if topology: sockets = topology['sockets'] cores = topology['cores'] threads = topology['threads'] if params.get('cpus') is None: params['cpus'] = sockets * cores * threads # check_topoology will raise the appropriate # exception if a topology is invalid. CPUInfoModel(conn=self.conn).\ check_topology(params['cpus'], topology) else: params['cpu_info'] = dict() conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", {'pool': pool_name, 'template': name}) tmp_volumes = [disk['volume'] for disk in params.get('disks', []) if 'volume' in disk] self.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name) except Exception: raise InvalidParameter("KCHTMPL0003E", {'network': net_name, 'template': name}) # 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) name = params['name'] try: with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) session.store('template', name, t.info) except InvalidOperation: raise except Exception, e: raise OperationFailed('KCHTMPL0020E', {'err': e.message})
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 }) cpu_info = params.get('cpu_info') if cpu_info: topology = cpu_info.get('topology') # Check, even though currently only topology # is supported. if topology: sockets = topology['sockets'] cores = topology['cores'] threads = topology['threads'] if params.get('cpus') is None: params['cpus'] = sockets * cores * threads # check_topoology will raise the appropriate # exception if a topology is invalid. CPUInfoModel(conn=self.conn).\ check_topology(params['cpus'], topology) else: params['cpu_info'] = dict() conn = self.conn.get() pool_uri = params.get(u'storagepool', '') if pool_uri: try: pool_name = pool_name_from_uri(pool_uri) pool = conn.storagePoolLookupByName(pool_name.encode("utf-8")) except Exception: raise InvalidParameter("KCHTMPL0004E", { 'pool': pool_name, 'template': name }) tmp_volumes = [ disk['volume'] for disk in params.get('disks', []) if 'volume' in disk ] self.template_volume_validate(tmp_volumes, pool) for net_name in params.get(u'networks', []): try: conn.networkLookupByName(net_name.encode('utf-8')) except Exception: raise InvalidParameter("KCHTMPL0003E", { 'network': net_name, 'template': name }) # 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) name = params['name'] try: with self.objstore as session: if name in session.get_list('template'): raise InvalidOperation("KCHTMPL0001E", {'name': name}) session.store('template', name, t.info) except InvalidOperation: raise except Exception, e: raise OperationFailed('KCHTMPL0020E', {'err': e.message})