def _POST(self, *param, **params): if not validates_host_add(self): return web.badrequest(self.view.alert) uniq_key_check = findby1uniquekey(self.orm, self.input.m_uuid) if uniq_key_check is not None and config['application.uniqkey'] != self.input.m_uuid: return web.conflict(web.ctx.path) hostname_check = findby1hostname(self.orm, self.input.m_hostname) if hostname_check is not None: return web.conflict(web.ctx.path) # notebook note_title = None if is_param(self.input, "note_title"): note_title = self.input.note_title note_value = None if is_param(self.input, "note_value"): note_value = self.input.note_value _notebook = n_new(note_title, note_value) # tags _tags = None if is_param(self.input, "tags"): _tags = [] tag_array = comma_split(self.input.tags) tag_array = uniq_sort(tag_array) for x in tag_array: if t_count(self.orm, x) == 0: _tags.append(t_new(x)) else: _tags.append(t_name(self.orm, x)) uniq_key = self.input.m_uuid name = self.input.m_name hostname = self.input.m_hostname model = findby1uniquekey(self.orm, uniq_key, is_deleted = True) if model is None: host = m_new(created_user=self.me, modified_user=self.me, uniq_key=uni_force(uniq_key), name=name, hostname=hostname, attribute=MACHINE_ATTRIBUTE['HOST'], hypervisor=MACHINE_HYPERVISOR['REAL'], notebook=_notebook, tags=_tags, icon=None, is_deleted=False) m_save(self.orm, host) return web.created(None) else: model.name = name model.hostname = hostname model.uniq_key = uniq_key model.notebook.title = note_title model.notebook.value = note_value model.tags = _tags model.is_deleted = False m_update(self.orm, model) return web.created(None)
def _POST(self, *param, **params): if not validates_host_add(self): return web.badrequest(self.view.alert) if self.input.m_connect_type == "karesansui": uniq_key_check = findby1uniquekey(self.orm, self.input.m_uuid) if uniq_key_check is not None and config['application.uniqkey'] != self.input.m_uuid: return web.conflict(web.ctx.path) hostname_check = findby1hostname(self.orm, self.input.m_hostname) if hostname_check is not None: return web.conflict(web.ctx.path) # notebook note_title = None if is_param(self.input, "note_title"): note_title = self.input.note_title note_value = None if is_param(self.input, "note_value"): note_value = self.input.note_value _notebook = n_new(note_title, note_value) # tags _tags = None if is_param(self.input, "tags"): _tags = [] tag_array = comma_split(self.input.tags) tag_array = uniq_sort(tag_array) for x in tag_array: if t_count(self.orm, x) == 0: _tags.append(t_new(x)) else: _tags.append(t_name(self.orm, x)) name = self.input.m_name if self.input.m_connect_type == "karesansui": uniq_key = self.input.m_uuid attribute = MACHINE_ATTRIBUTE['HOST'] if is_param(self.input, "m_hostname"): hostname = self.input.m_hostname if self.input.m_connect_type == "libvirt": uniq_key = string_from_uuid(generate_uuid()) attribute = MACHINE_ATTRIBUTE['URI'] if is_param(self.input, "m_uri"): segs = uri_split(self.input.m_uri) if is_param(self.input, "m_auth_user") and self.input.m_auth_user: segs["user"] = self.input.m_auth_user if is_param(self.input, "m_auth_passwd") and self.input.m_auth_passwd: segs["passwd"] = self.input.m_auth_passwd hostname = uri_join(segs) model = findby1uniquekey(self.orm, uniq_key, is_deleted = True) if model is None: host = m_new(created_user=self.me, modified_user=self.me, uniq_key=uni_force(uniq_key), name=name, hostname=hostname, attribute=attribute, hypervisor=MACHINE_HYPERVISOR['REAL'], notebook=_notebook, tags=_tags, icon=None, is_deleted=False) m_save(self.orm, host) return web.created(None) else: model.name = name model.hostname = hostname model.uniq_key = uniq_key model.notebook.title = note_title model.notebook.value = note_value model.tags = _tags model.is_deleted = False m_update(self.orm, model) return web.created(None)
# make whether unique key is unique uniq_key_check = findbyalluniquekey(self.orm, self.input.uniqkey) if uniq_key_check != [] and config["application.uniqkey"] != self.input.uniqkey: self.logger.debug("Update unique key failed, Already exists Unique key - %s" % uniq_key_check[0].id) return web.conflict(web.ctx.path) lighttpdconf_path = set_server_conf(config, self.input, self.orm) _K2V.write(config) except (IOError, KaresansuiGadgetException), kge: self.logger.debug(kge) raise KaresansuiGadgetException, kge # unique key try: host = findby1uniquekey(self.orm, tmp_unique_key) host.uniq_key = self.input.uniqkey update(self.orm, host) except KaresansuiDBException: # rollback config["application.uniqkey"] = tmp_unique_key _K2V.write(config) raise KaresansuiDBException # regist job cmdname = u"Update lighttpd config" options = { "dest": config["lighttpd.etc.dir"], "port": lighttpdconf_path["port"], "ssl": lighttpdconf_path["ssl"], "access": lighttpdconf_path["access"],
def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) conn = KaresansuiVirtConnection(readonly=False) try: try: src_pool = conn.get_storage_pool_name_bydomain(opts.name, "os") if not src_pool: raise KssCommandException("Source storage pool not found. domain=%s" % (opts.name)) if conn.get_storage_pool_type(src_pool) == 'dir': raise KssCommandException("Storage pool type 'dir' is not. domain=%s" % (opts.name)) src_path = conn.get_storage_pool_targetpath(src_pool[0]) self.domain_dir = "%s/%s" % (src_path, opts.name,) if os.path.isdir(self.domain_dir) is False: raise KssCommandException( 'domain directory is not found or not directory. - %s' % (self.domain_dir)) # Model virt_uuid = conn.domname_to_uuid(opts.name) model = findby1uniquekey(self.kss_session, virt_uuid) if not model: raise KssCommandException("Export data does not exist in the database.") database = {} database['attribute'] = model.attribute database['hypervisor'] = model.hypervisor database['icon'] = model.icon database['name'] = model.name database['notebook'] = {"title" : model.notebook.title, "value" : model.notebook.value, } tags = [] for _tag in model.tags: tags.append(_tag.name) database['tags'] = ",".join(tags) database['uniq_key'] = model.uniq_key # Snapshot snapshots = [] kvs = KaresansuiVirtSnapshot(readonly=False) try: guest_id = model.id snapshot_list = kvs.listNames(opts.name)[opts.name] if len(snapshot_list) > 0: for snapshot in snapshot_list: s_model = s_findbyname_guestby1(self.kss_session, snapshot, guest_id) if s_model is not None: name = s_model.name title = s_model.notebook.title value = s_model.notebook.value snapshots.append({"name":name, "title":title, "value":value,}) except: raise KssCommandException("Cannot fetch the information of snapshots correctly.") kvs.finish() # Pool target_dir = "" if opts.pool: inactive_storage_pools = conn.list_inactive_storage_pool() active_storage_pools = conn.list_active_storage_pool() if not (opts.pool in active_storage_pools or opts.pool in inactive_storage_pools): raise KssCommandException('Target storage pool does not exist. - pool=%s' % (opts.pool)) pool = conn.search_kvn_storage_pools(opts.pool) storage_info = pool[0].get_info() if storage_info["type"] == "dir" and storage_info["target"]["path"] != "": target_dir = storage_info["target"]["path"] else: raise KssCommandException("Target storage pool type is not 'dir'. pool=%s" % (opts.pool)) elif opts.dir: target_dir = opts.dir self.up_progress(10) progresscb = None if opts.verbose: try: from karesansui.lib.progress import ProgressMeter progresscb = ProgressMeter(command_object=self) except: pass else: try: from karesansui.lib.progress import ProgressMeter progresscb = ProgressMeter(command_object=self,quiet=True) except: pass if opts.title[0:4] == "b64:": title = base64_decode(opts.title[4:]) else: title = opts.title uuid = StrFromUUID(GenUUID()) conn.export_guest(uuid=uuid, name=opts.name, directory=target_dir, database=database, realicon=model.realicon(), title=title, snapshots=snapshots, progresscb=progresscb) self.up_progress(40) self.logger.info('Export guest completed. - pool=%s, uuid=%s' % (opts.pool, uuid)) print >>sys.stdout, _('Export guest completed. - pool=%s, uuid=%s' % (opts.pool, uuid)) return True except KaresansuiVirtException, e: raise KssCommandException('Failed to export guest. - %s to %s [%s]' \ % (opts.name,target_dir, ''.join(e.args))) except KssCommandException: raise except: raise KssCommandException('Failed to export guest. - %s to %s' \ % (opts.name,target_dir))
def process(self): (opts, args) = getopts() chkopts(opts) self.up_progress(10) conn = KaresansuiVirtConnection(readonly=False) try: try: src_pool = conn.get_storage_pool_name_bydomain(opts.name, "os") if not src_pool: raise KssCommandException( "Source storage pool not found. domain=%s" % (opts.name)) if conn.get_storage_pool_type(src_pool) == 'dir': raise KssCommandException( "Storage pool type 'dir' is not. domain=%s" % (opts.name)) src_path = conn.get_storage_pool_targetpath(src_pool[0]) self.domain_dir = "%s/%s" % ( src_path, opts.name, ) if os.path.isdir(self.domain_dir) is False: raise KssCommandException( 'domain directory is not found or not directory. - %s' % (self.domain_dir)) # Model virt_uuid = conn.domname_to_uuid(opts.name) model = findby1uniquekey(self.kss_session, virt_uuid) if not model: raise KssCommandException( "Export data does not exist in the database.") database = {} database['attribute'] = model.attribute database['hypervisor'] = model.hypervisor database['icon'] = model.icon database['name'] = model.name database['notebook'] = { "title": model.notebook.title, "value": model.notebook.value, } tags = [] for _tag in model.tags: tags.append(_tag.name) database['tags'] = ",".join(tags) database['uniq_key'] = model.uniq_key # Snapshot snapshots = [] kvs = KaresansuiVirtSnapshot(readonly=False) try: guest_id = model.id snapshot_list = kvs.listNames(opts.name)[opts.name] if len(snapshot_list) > 0: for snapshot in snapshot_list: s_model = s_findbyname_guestby1( self.kss_session, snapshot, guest_id) if s_model is not None: name = s_model.name title = s_model.notebook.title value = s_model.notebook.value snapshots.append({ "name": name, "title": title, "value": value, }) except: raise KssCommandException( "Cannot fetch the information of snapshots correctly.") kvs.finish() # Pool target_dir = "" if opts.pool: inactive_storage_pools = conn.list_inactive_storage_pool() active_storage_pools = conn.list_active_storage_pool() if not (opts.pool in active_storage_pools or opts.pool in inactive_storage_pools): raise KssCommandException( 'Target storage pool does not exist. - pool=%s' % (opts.pool)) pool = conn.search_kvn_storage_pools(opts.pool) storage_info = pool[0].get_info() if storage_info["type"] == "dir" and storage_info[ "target"]["path"] != "": target_dir = storage_info["target"]["path"] else: raise KssCommandException( "Target storage pool type is not 'dir'. pool=%s" % (opts.pool)) elif opts.dir: target_dir = opts.dir self.up_progress(10) progresscb = None if opts.verbose: try: from karesansui.lib.progress import ProgressMeter progresscb = ProgressMeter(command_object=self) except: pass else: try: from karesansui.lib.progress import ProgressMeter progresscb = ProgressMeter(command_object=self, quiet=True) except: pass if opts.title[0:4] == "b64:": title = base64_decode(opts.title[4:]) else: title = opts.title uuid = StrFromUUID(GenUUID()) conn.export_guest(uuid=uuid, name=opts.name, directory=target_dir, database=database, realicon=model.realicon(), title=title, snapshots=snapshots, progresscb=progresscb) self.up_progress(40) self.logger.info('Export guest completed. - pool=%s, uuid=%s' % (opts.pool, uuid)) print >> sys.stdout, _( 'Export guest completed. - pool=%s, uuid=%s' % (opts.pool, uuid)) return True except KaresansuiVirtException, e: raise KssCommandException('Failed to export guest. - %s to %s [%s]' \ % (opts.name,target_dir, ''.join(e.args))) except KssCommandException: raise except: raise KssCommandException('Failed to export guest. - %s to %s' \ % (opts.name,target_dir))