def locale_hypervisor(hypervisor, _): """<comment-ja> Japanese Comment </comment-ja> <comment-en> TODO: English Comment </comment-en> """ from karesansui.lib.const import MACHINE_HYPERVISOR if (hypervisor in MACHINE_HYPERVISOR.values()) is True: for x in MACHINE_HYPERVISOR.items(): if hypervisor == x[1]: return _(x[0]) raise KaresansuiTemplateException("Hypervisor is not defined.") else: raise KaresansuiTemplateException("Hypervisor is not defined.")
def _GET(self, *param, **params): host_id = self.chk_hostby1(param) if host_id is None: return web.notfound() model = findbyhost1(self.orm, host_id) uris = available_virt_uris() self.kvc = KaresansuiVirtConnection() try: # libvirt connection scope --> # Storage Pool #inactive_pool = self.kvc.list_inactive_storage_pool() inactive_pool = [] active_pool = self.kvc.list_active_storage_pool() pools = inactive_pool + active_pool pools.sort() if not pools: return web.badrequest('One can not start a storage pool.') # Output .input if self.is_mode_input() is True: self.view.pools = pools pools_info = {} pools_vols_info = {} pools_iscsi_blocks = {} already_vols = [] guests = [] guests += self.kvc.list_inactive_guest() guests += self.kvc.list_active_guest() for guest in guests: already_vol = self.kvc.get_storage_volume_bydomain(domain=guest, image_type=None, attr='path') if already_vol: already_vols += already_vol.keys() for pool in pools: pool_obj = self.kvc.search_kvn_storage_pools(pool)[0] if pool_obj.is_active() is True: pools_info[pool] = pool_obj.get_info() blocks = None if pools_info[pool]['type'] == 'iscsi': blocks = self.kvc.get_storage_volume_iscsi_block_bypool(pool) if blocks: pools_iscsi_blocks[pool] = [] vols_obj = pool_obj.search_kvn_storage_volumes(self.kvc) vols_info = {} for vol_obj in vols_obj: vol_name = vol_obj.get_storage_volume_name() vols_info[vol_name] = vol_obj.get_info() if blocks: if vol_name in blocks and vol_name not in already_vols: pools_iscsi_blocks[pool].append(vol_obj.get_info()) pools_vols_info[pool] = vols_info self.view.pools_info = pools_info self.view.pools_vols_info = pools_vols_info self.view.pools_iscsi_blocks = pools_iscsi_blocks bridge_prefix = { "XEN":"xenbr", "KVM":KVM_BRIDGE_PREFIX, } self.view.host_id = host_id self.view.DEFAULT_KEYMAP = DEFAULT_KEYMAP self.view.DISK_NON_QEMU_FORMAT = DISK_NON_QEMU_FORMAT self.view.DISK_QEMU_FORMAT = DISK_QEMU_FORMAT self.view.hypervisors = {} self.view.mac_address = {} self.view.keymaps = {} self.view.phydev = {} self.view.virnet = {} used_ports = {} for k,v in MACHINE_HYPERVISOR.iteritems(): if k in available_virt_mechs(): self.view.hypervisors[k] = v uri = uris[k] mem_info = self.kvc.get_mem_info() active_networks = self.kvc.list_active_network() used_graphics_ports = self.kvc.list_used_graphics_port() bus_types = self.kvc.bus_types self.view.bus_types = bus_types self.view.max_mem = mem_info['host_max_mem'] self.view.free_mem = mem_info['host_free_mem'] self.view.alloc_mem = mem_info['guest_alloc_mem'] self.view.mac_address[k] = generate_mac_address(k) self.view.keymaps[k] = eval("get_keymaps(%s_KEYMAP_DIR)" % k) # Physical device phydev = [] phydev_regex = re.compile(r"%s" % bridge_prefix[k]) for dev,dev_info in get_ifconfig_info().iteritems(): try: if phydev_regex.match(dev): phydev.append(dev) except: pass if len(phydev) == 0: phydev.append("%s0" % bridge_prefix[k]) phydev.sort() self.view.phydev[k] = phydev # Physical device # Virtual device self.view.virnet[k] = sorted(active_networks) used_ports[k] = used_graphics_ports exclude_ports = [] for k, _used_port in used_ports.iteritems(): exclude_ports = exclude_ports + _used_port exclude_ports = sorted(exclude_ports) exclude_ports = [p for p, q in zip(exclude_ports, exclude_ports[1:] + [None]) if p != q] self.view.graphics_port = next_number(GRAPHICS_PORT_MIN_NUMBER, PORT_MAX_NUMBER, exclude_ports) else: # .part models = findbyhost1guestall(self.orm, host_id) guests = [] if models: # Physical Guest Info self.view.hypervisors = {} for model in models: for k,v in MACHINE_HYPERVISOR.iteritems(): if k in available_virt_mechs(): self.view.hypervisors[k] = v uri = uris[k] if hasattr(self, "kvc") is not True: self.kvc = KaresansuiVirtConnection(uri) domname = self.kvc.uuid_to_domname(model.uniq_key) #if not domname: return web.conflict(web.ctx.path) _virt = self.kvc.search_kvg_guests(domname) if 0 < len(_virt): guests.append(MergeGuest(model, _virt[0])) else: guests.append(MergeGuest(model, None)) # Exported Guest Info exports = {} for pool_name in pools: files = [] pool = self.kvc.search_kvn_storage_pools(pool_name) path = pool[0].get_info()["target"]["path"] if os.path.exists(path): for _afile in glob.glob("%s/*/info.dat" % (path,)): param = ExportConfigParam() param.load_xml_config(_afile) _dir = os.path.dirname(_afile) uuid = param.get_uuid() name = param.get_domain() created = param.get_created() title = param.get_title() if title != "": title = re.sub("[\r\n]","",title) if title == "": title = _('untitled') if created != "": created_str = time.strftime("%Y/%m/%d %H:%M:%S", \ time.localtime(float(created))) else: created_str = _("N/A") files.append({"dir": _dir, "pool" : pool_name, #"b64dir" : base64_encode(_dir), "uuid" : uuid, "name" : name, "created" : int(created), "created_str" : created_str, "title" : title, "icon" : param.get_database()["icon"], }) exports[pool_name] = files # .json if self.is_json() is True: guests_json = [] for x in guests: guests_json.append(x.get_json(self.me.languages)) self.view.guests = json_dumps(guests_json) else: self.view.exports = exports self.view.guests = guests return True finally: #self.kvc.close() pass # libvirt connection scope --> Guest#_post()
def _GET(self, *param, **params): host_id = self.chk_hostby1(param) if host_id is None: return web.notfound() model = findbyhost1(self.orm, host_id) uris = available_virt_uris() #import pdb; pdb.set_trace() if model.attribute == MACHINE_ATTRIBUTE["URI"]: uri_guests = [] uri_guests_status = {} uri_guests_kvg = {} uri_guests_info = {} uri_guests_name = {} segs = uri_split(model.hostname) uri = uri_join(segs, without_auth=True) creds = '' if segs["user"] is not None: creds += segs["user"] if segs["passwd"] is not None: creds += ':' + segs["passwd"] # Output .part if self.is_mode_input() is not True: try: self.kvc = KaresansuiVirtConnectionAuth(uri, creds) host = MergeHost(self.kvc, model) for guest in host.guests: _virt = self.kvc.search_kvg_guests( guest.info["model"].name) if 0 < len(_virt): for _v in _virt: uuid = _v.get_info()["uuid"] uri_guests_info[uuid] = guest.info uri_guests_kvg[uuid] = _v uri_guests_name[uuid] = guest.info[ "model"].name.encode("utf8") for name in sorted(uri_guests_name.values(), key=str.lower): for uuid in dict_search(name, uri_guests_name): uri_guests.append( MergeGuest(uri_guests_info[uuid]["model"], uri_guests_kvg[uuid])) uri_guests_status[uuid] = uri_guests_info[uuid][ 'virt'].status() finally: self.kvc.close() # .json if self.is_json() is True: guests_json = [] for x in uri_guests: guests_json.append(x.get_json(self.me.languages)) self.view.uri_guests = json_dumps(guests_json) else: self.view.uri_guests = uri_guests self.view.uri_guests_status = uri_guests_status self.kvc = KaresansuiVirtConnection() try: # libvirt connection scope --> # Storage Pool #inactive_pool = self.kvc.list_inactive_storage_pool() inactive_pool = [] active_pool = self.kvc.list_active_storage_pool() pools = inactive_pool + active_pool pools.sort() if not pools: return web.badrequest('One can not start a storage pool.') # Output .input if self.is_mode_input() is True: self.view.pools = pools pools_info = {} pools_vols_info = {} pools_iscsi_blocks = {} already_vols = [] guests = [] guests += self.kvc.list_inactive_guest() guests += self.kvc.list_active_guest() for guest in guests: already_vol = self.kvc.get_storage_volume_bydomain( domain=guest, image_type=None, attr='path') if already_vol: already_vols += already_vol.keys() for pool in pools: pool_obj = self.kvc.search_kvn_storage_pools(pool)[0] if pool_obj.is_active() is True: pools_info[pool] = pool_obj.get_info() blocks = None if pools_info[pool]['type'] == 'iscsi': blocks = self.kvc.get_storage_volume_iscsi_block_bypool( pool) if blocks: pools_iscsi_blocks[pool] = [] vols_obj = pool_obj.search_kvn_storage_volumes( self.kvc) vols_info = {} for vol_obj in vols_obj: vol_name = vol_obj.get_storage_volume_name() vols_info[vol_name] = vol_obj.get_info() if blocks: if vol_name in blocks and vol_name not in already_vols: pools_iscsi_blocks[pool].append( vol_obj.get_info()) pools_vols_info[pool] = vols_info self.view.pools_info = pools_info self.view.pools_vols_info = pools_vols_info self.view.pools_iscsi_blocks = pools_iscsi_blocks bridge_prefix = { "XEN": "xenbr", "KVM": KVM_BRIDGE_PREFIX, } self.view.host_id = host_id self.view.DEFAULT_KEYMAP = DEFAULT_KEYMAP self.view.DISK_NON_QEMU_FORMAT = DISK_NON_QEMU_FORMAT self.view.DISK_QEMU_FORMAT = DISK_QEMU_FORMAT self.view.hypervisors = {} self.view.mac_address = {} self.view.keymaps = {} self.view.phydev = {} self.view.virnet = {} used_ports = {} for k, v in MACHINE_HYPERVISOR.iteritems(): if k in available_virt_mechs(): self.view.hypervisors[k] = v uri = uris[k] mem_info = self.kvc.get_mem_info() active_networks = self.kvc.list_active_network() used_graphics_ports = self.kvc.list_used_graphics_port( ) bus_types = self.kvc.bus_types self.view.bus_types = bus_types self.view.max_mem = mem_info['host_max_mem'] self.view.free_mem = mem_info['host_free_mem'] self.view.alloc_mem = mem_info['guest_alloc_mem'] self.view.mac_address[k] = generate_mac_address(k) self.view.keymaps[k] = eval( "get_keymaps(%s_KEYMAP_DIR)" % k) # Physical device phydev = [] phydev_regex = re.compile(r"%s" % bridge_prefix[k]) for dev, dev_info in get_ifconfig_info().iteritems(): try: if phydev_regex.match(dev): phydev.append(dev) except: pass if len(phydev) == 0: phydev.append("%s0" % bridge_prefix[k]) phydev.sort() self.view.phydev[k] = phydev # Physical device # Virtual device self.view.virnet[k] = sorted(active_networks) used_ports[k] = used_graphics_ports exclude_ports = [] for k, _used_port in used_ports.iteritems(): exclude_ports = exclude_ports + _used_port exclude_ports = sorted(exclude_ports) exclude_ports = [ p for p, q in zip(exclude_ports, exclude_ports[1:] + [None]) if p != q ] self.view.graphics_port = next_number(GRAPHICS_PORT_MIN_NUMBER, PORT_MAX_NUMBER, exclude_ports) else: # .part models = findbyhost1guestall(self.orm, host_id) guests = [] if models: # Physical Guest Info self.view.hypervisors = {} for model in models: for k, v in MACHINE_HYPERVISOR.iteritems(): if k in available_virt_mechs(): self.view.hypervisors[k] = v uri = uris[k] if hasattr(self, "kvc") is not True: self.kvc = KaresansuiVirtConnection(uri) domname = self.kvc.uuid_to_domname( model.uniq_key) #if not domname: return web.conflict(web.ctx.path) _virt = self.kvc.search_kvg_guests(domname) if 0 < len(_virt): guests.append(MergeGuest(model, _virt[0])) else: guests.append(MergeGuest(model, None)) # Exported Guest Info exports = {} for pool_name in pools: files = [] pool = self.kvc.search_kvn_storage_pools(pool_name) path = pool[0].get_info()["target"]["path"] if os.path.exists(path): for _afile in glob.glob("%s/*/info.dat" % (path, )): param = ExportConfigParam() param.load_xml_config(_afile) _dir = os.path.dirname(_afile) uuid = param.get_uuid() name = param.get_domain() created = param.get_created() title = param.get_title() if title != "": title = re.sub("[\r\n]", "", title) if title == "": title = _('untitled') if created != "": created_str = time.strftime("%Y/%m/%d %H:%M:%S", \ time.localtime(float(created))) else: created_str = _("N/A") files.append({ "dir": _dir, "pool": pool_name, #"b64dir" : base64_encode(_dir), "uuid": uuid, "name": name, "created": int(created), "created_str": created_str, "title": title, "icon": param.get_database()["icon"], }) exports[pool_name] = files # .json if self.is_json() is True: guests_json = [] for x in guests: guests_json.append(x.get_json(self.me.languages)) self.view.guests = json_dumps(guests_json) else: self.view.exports = exports self.view.guests = guests return True except: pass finally: #self.kvc.close() pass # libvirt connection scope --> Guest#_post()