本文整理汇总了Python中karesansui.lib.virt.virt.KaresansuiVirtConnection.get_storage_volume_bydomain方法的典型用法代码示例。如果您正苦于以下问题:Python KaresansuiVirtConnection.get_storage_volume_bydomain方法的具体用法?Python KaresansuiVirtConnection.get_storage_volume_bydomain怎么用?Python KaresansuiVirtConnection.get_storage_volume_bydomain使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类karesansui.lib.virt.virt.KaresansuiVirtConnection
的用法示例。
在下文中一共展示了KaresansuiVirtConnection.get_storage_volume_bydomain方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _DELETE
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import get_storage_volume_bydomain [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.badrequest()
disk_id = int(param[2])
model = findbyguest1(self.orm, guest_id)
if not model: return web.notfound()
# 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)
disk_info = virt.get_disk_info()[disk_id]
if disk_info['source'].has_key('file'):
pool_type = 'file'
volume_rpath = disk_info['source']['file']
elif disk_info['source'].has_key('dev'):
pool_type = 'iscsi'
volume_rpath = disk_info['source']['dev']
pool_name = kvc.get_storage_pool_name_byimage(volume_rpath)
if not pool_name:
return web.badrequest(_("Storage pool not found."))
else:
pool_name = pool_name[0]
pool_type = kvc.get_storage_pool_type(pool_name)
order = 0
volume_job = None
if pool_type != 'iscsi':
disk_volumes = kvc.get_storage_volume_bydomain(domname, 'disk', 'key')
volume = None
for key in disk_volumes.keys():
if volume_rpath == os.path.realpath(disk_volumes[key]):
volume = key
if volume is None:
return web.badrequest(_("Storage volume can not be found."))
volume_job = delete_storage_volume(self,
key,
pool_name,
order,
use=DISK_USES["DISK"]
)
order += 1
finally:
kvc.close()
target = disk_info["target"]["dev"]
self.logger.debug('spinning off delete_disk_job dom=%s, target=%s' % (domname, target))
disk_job = delete_disk_job(self, domname, target, order)
if setexec_delete_disk(self, model, disk_job, volume_job) is True:
return web.accepted()
else:
return False
示例2: Guest
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import get_storage_volume_bydomain [as 别名]
class Guest(Rest):
def _post(self, f):
ret = Rest._post(self, f)
if hasattr(self, "kvc") is True:
self.kvc.close()
return ret
@auth
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']
#.........这里部分代码省略.........
示例3: GuestBy1
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import get_storage_volume_bydomain [as 别名]
#.........这里部分代码省略.........
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
示例4: GuestBy1Device
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import get_storage_volume_bydomain [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
#.........这里部分代码省略.........
示例5: _POST
# 需要导入模块: from karesansui.lib.virt.virt import KaresansuiVirtConnection [as 别名]
# 或者: from karesansui.lib.virt.virt.KaresansuiVirtConnection import get_storage_volume_bydomain [as 别名]
#.........这里部分代码省略.........
% (web.ctx.homepath, src_guest.parent_id, src_guest.id)
# source guestos
if not (options["src-name"] in active_guests or options["src-name"] in inactive_guests):
return web.conflict(conflict_location, "Unable to get the source guest.")
# Check on whether value has already been used
# destination guestos
if (options["dest-name"] in active_guests or options["dest-name"] in inactive_guests):
return web.conflict(conflict_location, "Destination guest %s is already there." % options["dest-name"])
# VNC port number
if(int(self.input.vm_vncport) in used_vnc_ports):
return web.conflict(conflict_location, "VNC port %s is already used." % self.input.vm_vncport)
# MAC address
if(self.input.vm_mac in used_mac_addrs):
return web.conflict(conflict_location, "MAC address %s is already used." % self.input.vm_mac)
# Replicate Guest
order = 0 # job order
disk_jobs = [] # Add Disk
volume_jobs = [] # Create Storage Volume
for disk in virt.get_disk_info():
if disk['type'] != 'file':
self.view.alert = _("The type of the storage pool where the disk is to be added must be 'file'. dev=%s") % disk['target']['dev']
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
disk_pool = kvc.get_storage_pool_name_byimage(disk['source']['file'])
if not disk_pool:
self.view.alert = _("Can not find the storage pool.")
self.logger.debug(self.view.alert)
return web.badrequest(self.view.alert)
else:
disk_pool = disk_pool[0]
disk_volumes = 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
if volume is None: # os image
continue
disk_uuid = string_from_uuid(generate_uuid())
volume_jobs.append(replicate_storage_volume(self,
domname,
disk_pool,
volume,
self.input.domain_dest_name,
#self.input.dest_pool,
disk_pool, # orig
disk_uuid,
order))
order += 1
disk_jobs.append(create_disk_job(self,
dest_guest,
self.input.domain_dest_name,
disk_pool,
disk_uuid,
bus=disk['target']['bus'],
format=disk['driver']['type'],
type=disk['type'],
target=disk['target']['dev'],
order=-1))
finally:
kvc.close()
# replicate guest
guest_job = replicate_guest(self,
dest_guest,
VIRT_COMMAND_REPLICATE_GUEST,
options,
'Replicate Guest',
{"name" : options['dest-name'],
"pool" : options["pool"],
},
order,
)
order += 1
for disk_job in disk_jobs:
disk_job.order = order
order += 1
ret = exec_replicate_guest(self,
dest_guest,
icon_filename,
'Replicate Guest',
guest_job,
disk_jobs,
volume_jobs,
)
if ret is True:
return web.accepted()
else:
return False