本文整理汇总了Python中karesansui.lib.virt.virt.KaresansuiVirtConnection.search_kvg_guests方法的典型用法代码示例。如果您正苦于以下问题:Python KaresansuiVirtConnection.search_kvg_guests方法的具体用法?Python KaresansuiVirtConnection.search_kvg_guests怎么用?Python KaresansuiVirtConnection.search_kvg_guests使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类karesansui.lib.virt.virt.KaresansuiVirtConnection
的用法示例。
在下文中一共展示了KaresansuiVirtConnection.search_kvg_guests方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(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)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.notfound()
virt = kvc.search_kvg_guests(domname)[0]
vcpus_info = virt.get_vcpus_info()
self.view.max_vcpus_limit = kvc.get_max_vcpus()
self.view.max_vcpus = vcpus_info['bootup_vcpus']
self.view.vcpus_limit = vcpus_info['max_vcpus']
self.view.vcpus = vcpus_info['vcpus']
self.view.cpuTime = virt.get_info()['cpuTime']
self.view.hypervisor = virt.get_info()['hypervisor']
self.view.guest = model
finally:
kvc.close()
return True
示例2: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(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)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.notfound()
virt = kvc.search_kvg_guests(domname)[0]
info = virt.get_graphics_info()
self.view.checked_listen_all = ""
self.view.checked_listen_lo = "checked"
try:
if info["setting"]["listen"] == "0.0.0.0":
self.view.checked_listen_all = "checked"
self.view.checked_listen_lo = ""
except:
pass
self.view.VMType = virt.get_info()['VMType']
self.view.keymaps = eval("get_keymaps(%s_KEYMAP_DIR)" % self.view.VMType.upper())
self.view.info = info
self.view.guest = model
finally:
kvc.close()
return True
示例3: _DELETE
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _DELETE(self, *param, **params):
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None: return web.notfound()
if is_int(param[2]) is False:
return web.notfound()
nic_id = int(param[2])
model = findbyguest1(self.orm, guest_id)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)[0]
guest = MergeGuest(model, virt)
nic_info = virt.get_interface_info()[nic_id]
finally:
kvc.close()
mac = nic_info["mac"]["address"]
self.logger.debug('spinning off delete_nic_job dom=%s, mac=%s' % (domname, mac))
if delete_nic_job(self,model,domname,mac) is True:
return web.accepted()
else:
return False
示例4: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(self, *param, **params):
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None: return web.notfound()
if is_int(param[2]) is False:
return web.badrequest()
disk_id = int(param[2])
model = findbyguest1(self.orm, guest_id)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.notfound()
virt = kvc.search_kvg_guests(domname)[0]
guest = MergeGuest(model, virt)
self.view.guest = guest
self.view.disk_info = virt.get_disk_info()[disk_id]
finally:
kvc.close()
return True
示例5: _PUT
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _PUT(self, *param, **params):
"""<comment-ja>
Japanese Comment
</comment-ja>
<comment-en>
TODO: English Comment
</comment-en>
"""
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None:
return web.notfound()
if is_param(self.input, "memory"):
memory = int(self.input.memory)
else:
memory = None
max_memory = int(self.input.max_memory)
model = findbyguest1(self.orm, guest_id)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname:
return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)[0]
info = virt.get_info()
# maxMem = info["maxMem"]
now_memory = info["memory"]
mem_info = kvc.get_mem_info()
nodeinfo = kvc.get_nodeinfo()
finally:
kvc.close()
# valid
# if (mem_info["host_free_mem"] + (now_memory / 1024)) < memory:
# return web.badrequest("Memory value is greater than the maximum memory value. - memory=%s" % self.input.memory)
options = {}
options["name"] = domname
options["maxmem"] = max_memory
if memory is None:
options["memory"] = max_memory
else:
options["memory"] = memory
_cmd = dict2command("%s/%s" % (karesansui.config["application.bin.dir"], VIRT_COMMAND_SET_MEMORY), options)
cmdname = "Set memory"
_jobgroup = JobGroup(cmdname, karesansui.sheconf["env.uniqkey"])
_jobgroup.jobs.append(Job("%s command" % cmdname, 0, _cmd))
_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)
示例6: _PUT
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _PUT(self, *param, **params):
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None:
return web.notfound()
if is_int(param[2]) is False:
return web.notfound()
nic_id = int(param[2])
if not validates_nicby1(self):
return web.badrequest(self.view.alert)
model = findbyguest1(self.orm, guest_id)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname:
return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)[0]
guest = MergeGuest(model, virt)
old_mac = virt.get_interface_info()[nic_id]["mac"]["address"]
nic_info = virt.get_interface_info()
finally:
kvc.close()
new_mac = self.input.mac_address
if old_mac != new_mac:
f_chk = True
for x in nic_info:
if x["mac"]["address"] == new_mac:
f_chk = False
break
if f_chk is False:
return web.badrequest(_("Specified MAC address is already defined."))
self.logger.debug(
"spinning off change_mac_job dom=%s, from_mac=%s, to_mac=%s" % (domname, old_mac, new_mac)
)
if change_mac_job(self, model, domname, old_mac, new_mac) is True:
return web.accepted(url=web.ctx.path)
else:
return False
else:
return web.accepted(url=web.ctx.path)
示例7: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(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)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.notfound()
virt = kvc.search_kvg_guests(domname)[0]
self.view.info = virt.get_info()
#self.view.mem_info = kvc.get_mem_info()
self.view.nodeinfo = kvc.get_nodeinfo()
self.view.guest = model
self.view.hypervisor = self.view.info['hypervisor']
finally:
kvc.close()
return True
示例8: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(self, *param, **params):
"""<comment-ja>
virDomainState
- VIR_DOMAIN_NOSTATE = 0
- VIR_DOMAIN_RUNNING = 1
- VIR_DOMAIN_BLOCKED = 2
- VIR_DOMAIN_PAUSED = 3
- VIR_DOMAIN_SHUTDOWN = 4
- VIR_DOMAIN_SHUTOFF = 5
- VIR_DOMAIN_CRASHED = 6
</comment-ja>
<comment-en>
TODO: English Comment
</comment-en>
"""
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None: return web.notfound()
model = findbyguest1(self.orm, guest_id)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)
if self.__template__["media"] == 'json':
self.view.status = json_dumps(virt[0].status())
else:
self.view.status = virt[0].status()
finally:
kvc.close()
#self.__template__.dir = 'guestby1'
return True
示例9: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(self, *param, **params):
host_id = self.chk_hostby1(param)
if host_id is None: return web.notfound()
if self.is_mode_input() is True:
self.view.plugins = WATCH_PLUGINS
self.view.cpu_type_instance = COLLECTD_CPU_TYPE_INSTANCE
self.view.memory_type_instance = COLLECTD_MEMORY_TYPE_INSTANCE
self.view.df_ds = COLLECTD_DF_DS
self.view.interface_type = COLLECTD_INTERFACE_TYPE
self.view.interface_ds = COLLECTD_INTERFACE_DS
self.view.load_ds = COLLECTD_LOAD_DS
cpu_logical_number = len(get_proc_cpuinfo())
self.view.cpu_logical_number = range(1, cpu_logical_number+1)
self.view.memory_size = string.atol(get_proc_meminfo()["MemTotal"][0]) / 1024
self.view.df_list = get_fs_info()
self.view.interface_list = get_ifconfig_info().keys()
## guest os list
from karesansui.lib.utils import get_dom_list
from karesansui.lib.virt.virt import KaresansuiVirtConnection
from karesansui.lib.merge import MergeGuest
self.view.dom_list = get_dom_list()
dom_info = {}
for domname in get_dom_list():
kvc = KaresansuiVirtConnection()
virt = kvc.search_kvg_guests(domname)[0]
dom_info[domname] = {}
dom_info[domname]['network'] = []
dom_info[domname]['disk'] = []
dom_info[domname]['disk_size'] = {}
for net_dev in virt.get_interface_info():
dom_info[domname]['network'].append(net_dev['target']['dev'])
for disk in virt.get_disk_info():
dom_info[domname]['disk'].append(disk['target']['dev'])
dom_info[domname]['disk_size'][disk['target']['dev']] = disk['source']['size']
dom_info[domname]['vcpu'] = virt.get_vcpus_info()['max_vcpus']
kvc.close()
self.view.dom_info = dom_info
## disk info
self.view.disk_size_info = {}
for disk_data in get_fs_info():
self.view.disk_size_info[disk_data['Filesystem']] = disk_data['1048576-blocks']
self.view.processer_num = len(get_proc_cpuinfo().keys())
self.view.supported_langs = DEFAULT_LANGS.keys()
self.view.myaddress = self.me.email
self.view.mta = "%s:%s" % (karesansui.config['application.mail.server'],
karesansui.config['application.mail.port'])
self.view.alert_trigger_count = DEFAULT_ALERT_TRIGGER_COUNT;
self.view.slient_period = DEFAULT_SLIENT_PERIOD;
return True
if not validates_query(self):
self.logger.debug("Show watch is failed, "
"Invalid query value "
"- query=%s" % self.input.q)
return web.badrequest(self.view.alert)
if not validates_page(self):
self.logger.debug("Show watch is failed, "
"Invalid page value - page=%s" % self.input.p)
return web.badrequest(self.view.alert)
if is_param(self.input, 'q') is True:
watchs = w_findbyname_or_plugin(self.orm, self.input.q)
if not watchs:
self.logger.debug("Show watch is failed, "
"Could not find watch "
"- query=%s" % self.input.q)
return web.nocontent()
self.view.search_value = self.input.q
else:
watchs = w_findbyall(self.orm)
self.view.search_value = ""
if is_param(self.input, 'p') is True:
start = int(self.input.p)
else:
start = 0
pager = Pager(watchs, start, WATCH_LIST_RANGE)
if not pager.exist_now_page() and is_param(self.input, 'p') is True:
self.logger.debug("Show watch is failed, "
"Could not find page - page=%s" % self.input.p)
return web.nocontent()
self.view.pager = pager
self.view.input = self.input
return True
示例10: Guest
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
#.........这里部分代码省略.........
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)))
示例11: _POST
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _POST(self, *param, **params):
host_id = self.chk_hostby1(param)
if host_id is None: return web.notfound()
if not validates_guest_replicate(self):
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
uuid = string_from_uuid(generate_uuid())
# TODO dest_pool valid
if not validates_src_id(self):
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
src_guest = findbyguest1(self.orm, self.input.src_id)
if not src_guest:
self.view.alert = "Failed to get the data of source domain."
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
# Note
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)
# Tag
_tags = None
if is_param(self.input, "tags"):
_tags = []
for x in comma_split(self.input.tags):
_tags.append(t_new(x))
# Icon
icon_filename = None
if is_param(self.input, "icon_filename", empty=True):
icon_filename = self.input.icon_filename
dest_guest = m_new(created_user=self.me,
modified_user=self.me,
uniq_key=uni_force(uuid),
name=self.input.m_name,
attribute=MACHINE_ATTRIBUTE['GUEST'],
hypervisor=src_guest.hypervisor,
notebook=_notebook,
tags=_tags,
icon=icon_filename,
is_deleted=False,
parent=src_guest.parent,
)
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(src_guest.uniq_key)
if not domname: return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)[0]
options = {}
options["src-name"] = virt.get_domain_name()
if is_param(self.input, "dest_pool"):
options["pool"] = self.input.dest_pool
if is_param(self.input, "domain_dest_name"):
options["dest-name"] = self.input.domain_dest_name
if is_param(self.input, "vm_vncport"):
options["vnc-port"] = self.input.vm_vncport
if is_param(self.input, "vm_mac"):
options["mac"] = self.input.vm_mac
options["uuid"] = uuid
src_pools = kvc.get_storage_pool_name_bydomain(domname)
if not src_pools:
self.view.alert = _("Source storage pool is not found.")
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
for src_pool in src_pools :
src_pool_type = kvc.get_storage_pool_type(src_pool)
if src_pool_type != 'dir':
self.view.alert = _("'%s' disk contains the image.") % src_pool_type
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
# disk check
target_pool = kvc.get_storage_pool_name_bydomain(domname, 'os')[0]
target_path = kvc.get_storage_pool_targetpath(target_pool)
src_disk = "%s/%s/images/%s.img" % \
(target_path, options["src-name"], options["src-name"])
s_size = os.path.getsize(src_disk) / (1024 * 1024) # a unit 'MB'
if os.access(target_path, os.F_OK):
if chk_create_disk(target_path, s_size) is False:
partition = get_partition_info(target_path, header=False)
#.........这里部分代码省略.........
示例12: _POST
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _POST(self, *param, **params):
host_id = self.chk_hostby1(param)
if host_id is None: return web.notfound()
if not validates_guest_export(self):
return web.badrequest(self.view.alert)
if not validates_sid(self):
return web.badrequest(self.view.alert)
model = findbyguest1(self.orm, self.input.sid)
if not model:
return web.badrequest()
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.conflict(web.ctx.path)
src_pools = kvc.get_storage_pool_name_bydomain(domname)
if not src_pools:
return web.badrequest(_("Source storage pool is not found."))
for src_pool in src_pools :
src_pool_type = kvc.get_storage_pool_type(src_pool)
if src_pool_type != 'dir':
return web.badrequest(_("'%s' disk contains the image.") % src_pool_type)
virt = kvc.search_kvg_guests(domname)[0]
options = {}
options["name"] = virt.get_domain_name()
if is_param(self.input, "pool"):
# disk check
src_pool = kvc.get_storage_pool_name_bydomain(domname, 'os')[0]
src_path = kvc.get_storage_pool_targetpath(src_pool)
src_disk = "%s/%s/images/%s.img" \
% (src_path, options["name"], options["name"])
dest_path = kvc.get_storage_pool_targetpath(self.input.pool)
s_size = os.path.getsize(src_disk) / (1024 * 1024) # a unit 'MB'
if os.access(dest_path, os.F_OK):
if chk_create_disk(dest_path, s_size) is False:
partition = get_partition_info(dest_path, header=False)
return web.badrequest(
_("No space available to create disk image in '%s' partition.") \
% partition[5][0])
#else: # Permission denied
#TODO:check disk space for root
options["pool"] = self.input.pool
if is_param(self.input, "export_title"):
#options["title"] = self.input.export_title
options["title"] = "b64:" + base64_encode(self.input.export_title)
options["quiet"] = None
finally:
kvc.close()
_cmd = dict2command(
"%s/%s" % (karesansui.config['application.bin.dir'], VIRT_COMMAND_EXPORT_GUEST), options)
# Job Register
cmdname = ["Export Guest", "export guest"]
_jobgroup = JobGroup(cmdname[0], karesansui.sheconf['env.uniqkey'])
_jobgroup.jobs.append(Job('%s command' % cmdname[1], 0, _cmd))
_machine2jobgroup = m2j_new(machine=model,
jobgroup_id=-1,
uniq_key=karesansui.sheconf['env.uniqkey'],
created_user=self.me,
modified_user=self.me,
)
# INSERT
save_job_collaboration(self.orm,
self.pysilhouette.orm,
_machine2jobgroup,
_jobgroup,
)
self.logger.debug("(%s) Job group id==%s" % (cmdname[0],_jobgroup.id))
url = '%s/job/%s.part' % (web.ctx.home, _jobgroup.id)
self.logger.debug('Returning Location: %s' % url)
return web.accepted()
示例13: GuestBy1Device
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
class GuestBy1Device(Rest):
@auth
def _GET(self, *param, **params):
(host_id, guest_id) = self.chk_guestby1(param)
if guest_id is None: return web.notfound()
bridge_prefix = {
"XEN":"xenbr",
"KVM":"br|bondbr",
#"KVM":"eth|bondbr",
}
model = findbyguest1(self.orm, guest_id)
# virt
self.kvc = KaresansuiVirtConnection()
try:
domname = self.kvc.uuid_to_domname(model.uniq_key)
if not domname:
return web.notfound()
virt = self.kvc.search_kvg_guests(domname)[0]
guest = MergeGuest(model, virt)
self.view.guest = guest
# Output .input
if self.is_mode_input() is True:
try:
VMType = guest.info["virt"].get_info()["VMType"].upper()
except:
VMType = "KVM"
self.view.VMType = VMType
# Network
phydev = []
phydev_regex = re.compile(r"%s" % bridge_prefix[VMType])
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[VMType])
phydev.sort()
self.view.phydev = phydev # Physical device
self.view.virnet = sorted(self.kvc.list_active_network()) # Virtual device
self.view.mac_address = generate_mac_address() # new mac address
# Disk
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.')
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 = pools
self.view.pools_info = pools_info
#.........这里部分代码省略.........
示例14: _POST
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _POST(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)
# virt
kvc = KaresansuiVirtConnection()
try:
domname = kvc.uuid_to_domname(model.uniq_key)
if not domname: return web.conflict(web.ctx.path)
virt = kvc.search_kvg_guests(domname)[0]
nic_info = virt.get_interface_info()
# -- Nic
if self.input.device_type == "nic":
if not validates_nic(self):
return web.badrequest(self.view.alert)
f_chk = True
for x in nic_info:
if x['mac']['address'] == self.input.mac_address:
f_chk = False
break
if f_chk is False:
return web.badrequest(_('Specified MAC address is already defined.'))
mac = self.input.mac_address
bridge = None
network = None
if self.input.nic_type == "phydev":
bridge = self.input.phydev
elif self.input.nic_type == "virnet":
network = self.input.virnet
self.logger.debug('spinning off create_nic_job dom=%s, mac=%s, bridge=%s, network=%s' \
% (domname, mac, bridge, network))
create_nic_job(self,model,domname,mac,bridge,network)
return web.accepted()
# -- Disk
elif self.input.device_type == "disk":
if not validates_disk(self):
return web.badrequest(self.view.alert)
volume_job = None
order = 0
if self.input.pool_type == "dir" or self.input.pool_type == "fs": # create(dir)
disk_type = 'file'
pool_name = self.input.pool_dir
volume_name = string_from_uuid(generate_uuid())
volume_job = create_storage_volume_dir(self,
model,
domname,
volume_name,
self.input.pool_dir,
self.input.disk_format,
self.input.disk_size,
self.input.disk_size,
'M',
order)
order += 1
elif self.input.pool_type == "block": # create(iscsi block)
disk_type = 'iscsi'
(iscsi_pool, iscsi_volume) = self.input.pool_dir.split("/", 2)
pool_name = iscsi_pool
volume_name = iscsi_volume
else:
return badrequest(_("No storage type specified."))
# add disk
disk_job = create_disk_job(self,
guest=model,
domain_name=domname,
pool=pool_name,
volume=volume_name,
bus=self.input.bus_type,
format=self.input.disk_format,
type=disk_type,
order=order)
order += 1
if exec_disk_job(obj=self,
guest=model,
disk_job=disk_job,
volume_job=volume_job,
order=order
) is True:
return web.accepted()
else:
return False
else: # Not Found
return False
finally:
kvc.close()
示例15: _GET
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import search_kvg_guests [as 别名]
def _GET(self, *param, **params):
host_id = self.chk_hostby1(param)
if host_id is None: return web.notfound()
if not validates_src_id(self):
self.view.alert = "Failed to get the id of source domain."
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
src_id = self.input.src_id
if self.is_mode_input() is False:
return web.nomethod()
self.view.src_id = src_id
self.view.mac_address = generate_mac_address()
src_guest = findbyguest1(self.orm, src_id)
if not src_guest:
self.view.alert = "Failed to get the data of source domain."
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
kvc = KaresansuiVirtConnection()
try:
# Storage Pool
#inactive_pool = self.kvc.list_inactive_storage_pool()
inactive_pool = []
active_pool = kvc.list_active_storage_pool()
pools = inactive_pool + active_pool
pools.sort()
domname = kvc.uuid_to_domname(src_guest.uniq_key)
# TODO 対応するストレージボリュームにiscsiがあった場合はエラーにする
src_pools = kvc.get_storage_pool_name_bydomain(domname)
if not src_pools:
self.view.alert = _("Source storage pool is not found.")
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
for src_pool in src_pools :
src_pool_type = kvc.get_storage_pool_type(src_pool)
if src_pool_type != 'dir':
self.view.alert = _("'%s' disk contains the image.") % (src_pool_type)
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
non_iscsi_pool = []
for pool in pools:
if kvc.get_storage_pool_type(pool) != 'iscsi':
non_iscsi_pool.append(pool)
self.view.pools = non_iscsi_pool
virt = kvc.search_kvg_guests(domname)[0]
if virt.is_active() is True:
self.view.alert = _("Guest is running. Please stop and try again. name=%s" % domname)
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
self.view.domain_src_name = virt.get_domain_name()
used_ports = kvc.list_used_vnc_port()
self.view.vnc_port = next_number(VNC_PORT_MIN_NUMBER,PORT_MAX_NUMBER,used_ports)
finally:
kvc.close()
return True