def _DELETE(self, *param, **params): host_id = self.chk_hostby1(param) if host_id is None: return web.notfound() host = findbyhost1(self.orm, host_id) logical_delete(self.orm, host) return web.seeother(url="/")
def _DELETE(self, *param, **params): host_id = self.chk_hostby1(param) if host_id is None: return web.notfound() host = findbyhost1(self.orm, host_id) logical_delete(self.orm, host) return web.seeother(url = "/")
def _DELETE(self, *param, **params): (host_id, guest_id) = self.chk_guestby1(param) if guest_id is None: return web.notfound() model = findbyguest1(self.orm, guest_id) self.kvc = KaresansuiVirtConnection() try: domname = self.kvc.uuid_to_domname(model.uniq_key) if not domname: self.logger.info("Did not exist in libvirt. - guestid=%s" % model.id) logical_delete(self.orm, model) # TODO ファイルシステムにゴミが残るので、delete_guest.pyを実行する必要がある。 self.orm.commit() return web.nocontent() kvg_guest = self.kvc.search_kvg_guests(domname) if not kvg_guest: return web.badrequest( _("Guest not found. - name=%s") % domname) else: kvg_guest = kvg_guest[0] if kvg_guest.is_active(): return web.badrequest( _("Can not delete a running guest OS. - name=%s") % domname) # jobs order order = 0 jobs = [] os_storage = {} for disk in kvg_guest.get_disk_info(): if disk['type'] == 'file': # type="dir" # delete_storage_volume pool = self.kvc.get_storage_pool_name_byimage( disk['source']['file']) if not pool: return web.badrequest( _("Can not find the storage pool image. - target=%s" ) % (disk['source']['file'])) else: pool = pool[0] disk_volumes = self.kvc.get_storage_volume_bydomain( domname, 'disk', 'key') volume = None for key in disk_volumes.keys(): if disk['source']['file'] == os.path.realpath( disk_volumes[key]): volume = key # disk image use = DISK_USES['DISK'] if volume is None: # os image os_volume = self.kvc.get_storage_volume_bydomain( domname, 'os', 'key') if not os_volume: return web.badrequest( _("OS storage volume for guest could not be found. domname=%s" ) % domname) if disk['source']['file'] == os.path.realpath( os_volume.values()[0]): use = DISK_USES['IMAGES'] volume = os_volume.keys()[0] os_storage["pool"] = pool os_storage["volume"] = volume continue # OS delete command to do "VIRT_COMMAND_DELETE_GUEST" image. jobs.append( delete_storage_volume(self, volume, pool, order, use)) order += 1 # delete_disk jobs.append( delete_disk_job(self, domname, disk["target"]["dev"], order)) order += 1 elif disk['type'] == 'block': # type="iscsi" pool = self.kvc.get_storage_pool_name_byimage( disk['source']['dev']) if not pool: return web.badrequest( _("Can not find the storage pool image. - target=%s" ) % disk['source']['dev']) else: pool = pool[0] os_volume = self.kvc.get_storage_volume_bydomain( domname, 'os', 'key') if not os_volume: return web.badrequest( _("OS storage volume for guest could not be found. domname=%s" ) % domname) else: volume = os_volume.values()[0] if disk['source']['dev'] == volume: os_storage["pool"] = pool os_storage["volume"] = volume continue # OS delete command to do "VIRT_COMMAND_DELETE_GUEST" image. # delete_disk jobs.append( delete_disk_job(self, domname, disk["target"]["dev"], order)) order += 1 else: return web.internalerror( _("Not expected storage type. type=%") % disk['type']) # DELETE GUEST cmdname = "Delete Guest" _jobgroup = JobGroup(cmdname, karesansui.sheconf['env.uniqkey']) _jobgroup.jobs = jobs # Set Disk action_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_DELETE_GUEST), { "name": domname, "pool": os_storage["pool"], "volume": os_storage["volume"], }) _job = Job('%s command' % cmdname, order, action_cmd) _jobgroup.jobs.append(_job) logical_delete(self.orm, model) _machine2jobgroup = m2j_new( machine=model, jobgroup_id=-1, uniq_key=karesansui.sheconf['env.uniqkey'], created_user=self.me, modified_user=self.me, ) save_job_collaboration( self.orm, self.pysilhouette.orm, _machine2jobgroup, _jobgroup, ) return web.accepted(url=web.ctx.path) finally: #self.kvc.close() GuestBy1#_post pass
def _DELETE(self, *param, **params): (host_id, guest_id) = self.chk_guestby1(param) if guest_id is None: return web.notfound() model = findbyguest1(self.orm, guest_id) self.kvc = KaresansuiVirtConnection() try: domname = self.kvc.uuid_to_domname(model.uniq_key) if not domname: self.logger.info("Did not exist in libvirt. - guestid=%s" % model.id) logical_delete(self.orm, model) # TODO ファイルシステムにゴミが残るので、delete_guest.pyを実行する必要がある。 self.orm.commit() return web.nocontent() kvg_guest = self.kvc.search_kvg_guests(domname) if not kvg_guest: return web.badrequest(_("Guest not found. - name=%s") % domname) else: kvg_guest = kvg_guest[0] if kvg_guest.is_active(): return web.badrequest(_("Can not delete a running guest OS. - name=%s") % domname) # jobs order order = 0 jobs = [] os_storage = {} for disk in kvg_guest.get_disk_info(): if disk['type'] == 'file': # type="dir" # delete_storage_volume pool = self.kvc.get_storage_pool_name_byimage(disk['source']['file']) if not pool: return web.badrequest(_("Can not find the storage pool image. - target=%s") % (disk['source']['file'])) else: pool = pool[0] disk_volumes = self.kvc.get_storage_volume_bydomain(domname, 'disk', 'key') volume = None for key in disk_volumes.keys(): if disk['source']['file'] == os.path.realpath(disk_volumes[key]): volume = key # disk image use = DISK_USES['DISK'] if volume is None: # os image os_volume = self.kvc.get_storage_volume_bydomain(domname, 'os', 'key') if not os_volume: return web.badrequest(_("OS storage volume for guest could not be found. domname=%s") % domname) if disk['source']['file'] == os.path.realpath(os_volume.values()[0]): use = DISK_USES['IMAGES'] volume = os_volume.keys()[0] os_storage["pool"] = pool os_storage["volume"] = volume continue # OS delete command to do "VIRT_COMMAND_DELETE_GUEST" image. jobs.append(delete_storage_volume(self, volume, pool, order, use)) order += 1 # delete_disk jobs.append(delete_disk_job(self, domname, disk["target"]["dev"], order)) order += 1 elif disk['type'] == 'block': # type="iscsi" pool = self.kvc.get_storage_pool_name_byimage(disk['source']['dev']) if not pool: return web.badrequest(_("Can not find the storage pool image. - target=%s") % disk['source']['dev']) else: pool = pool[0] os_volume = self.kvc.get_storage_volume_bydomain(domname, 'os', 'key') if not os_volume: return web.badrequest(_("OS storage volume for guest could not be found. domname=%s") % domname) else: volume = os_volume.values()[0] if disk['source']['dev'] == volume: os_storage["pool"] = pool os_storage["volume"] = volume continue # OS delete command to do "VIRT_COMMAND_DELETE_GUEST" image. # delete_disk jobs.append(delete_disk_job(self, domname, disk["target"]["dev"], order)) order += 1 else: return web.internalerror( _("Not expected storage type. type=%") % disk['type']) # DELETE GUEST cmdname = "Delete Guest" _jobgroup = JobGroup(cmdname, karesansui.sheconf['env.uniqkey']) _jobgroup.jobs = jobs # Set Disk action_cmd = dict2command( "%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_DELETE_GUEST), {"name" : domname, "pool" : os_storage["pool"], "volume" : os_storage["volume"], } ) _job = Job('%s command' % cmdname, order, action_cmd) _jobgroup.jobs.append(_job) logical_delete(self.orm, model) _machine2jobgroup = m2j_new(machine=model, jobgroup_id=-1, uniq_key=karesansui.sheconf['env.uniqkey'], created_user=self.me, modified_user=self.me, ) save_job_collaboration(self.orm, self.pysilhouette.orm, _machine2jobgroup, _jobgroup, ) return web.accepted(url = web.ctx.path) finally: #self.kvc.close() GuestBy1#_post pass