本文整理汇总了Python中virttest.libvirt_xml.devices.controller.Controller.type方法的典型用法代码示例。如果您正苦于以下问题:Python Controller.type方法的具体用法?Python Controller.type怎么用?Python Controller.type使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类virttest.libvirt_xml.devices.controller.Controller
的用法示例。
在下文中一共展示了Controller.type方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Test for adding controller for usb.
"""
# get the params from params
vm_name = params.get("main_vm", "avocado-vt-vm1")
vm = env.get_vm(vm_name)
index = params.get("index", "1")
index_conflict = "yes" == params.get("index_conflict", "no")
model = params.get("model", "nec-xhci")
status_error = "yes" == params.get("status_error", "no")
vm_xml = VMXML.new_from_inactive_dumpxml(vm_name)
vm_xml_backup = vm_xml.copy()
controllers = vm_xml.get_devices(device_type="controller")
devices = vm_xml.get_devices()
for dev in controllers:
if dev.type == "usb":
devices.remove(dev)
controller = Controller("controller")
controller.type = "usb"
controller.index = index
controller.model = model
devices.append(controller)
if index_conflict:
controller_1 = Controller("controller")
controller_1.type = "usb"
controller_1.index = index
devices.append(controller)
vm_xml.set_devices(devices)
try:
try:
vm_xml.sync()
vm.start()
if status_error:
raise error.TestFail("Add controller successfully in negative case.")
else:
try:
session = vm.wait_for_login()
except (LoginError, ShellError), e:
error_msg = "Test failed in positive case.\n error: %s\n" % e
raise error.TestFail(error_msg)
cmd = "dmesg -c | grep %s" % model.split('-')[-1]
stat_dmesg = session.cmd_status(cmd)
if stat_dmesg != 0:
raise error.TestNAError("Fail to run dmesg in guest")
session.close()
except (LibvirtXMLError, VMStartError), e:
if not status_error:
raise error.TestFail("Add controller failed. Detail: %s" % e)
finally:
vm_xml_backup.sync()
示例2: recompose_xml
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def recompose_xml(vm_name, scsi_disk):
"""
Add scsi disk, guest agent and scsi controller for guest
:param: vm_name: Name of domain
:param: scsi_disk: scsi_debug disk name
"""
vmxml = vm_xml.VMXML.new_from_dumpxml(vm_name)
disk_path = scsi_disk
# Add scsi disk xml
scsi_disk = Disk(type_name="block")
scsi_disk.device = "lun"
scsi_disk.source = scsi_disk.new_disk_source(
**{'attrs': {'dev': disk_path}})
scsi_disk.target = {'dev': "sdb", 'bus': "scsi"}
find_scsi = "no"
controllers = vmxml.xmltreefile.findall("devices/controller")
for controller in controllers:
if controller.get("type") == "scsi":
find_scsi = "yes"
vmxml.add_device(scsi_disk)
# Add scsi disk controller
if find_scsi == "no":
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
scsi_controller.model = "virtio-scsi"
vmxml.add_device(scsi_controller)
# Redefine guest
vmxml.sync()
示例3: recompose_xml
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def recompose_xml(vm_name, scsi_disk):
"""
Add scsi disk, guest agent and scsi controller for guest
:param: vm_name: Name of domain
:param: scsi_disk: scsi_debug disk name
"""
# Get disk path of scsi_disk
path_cmd = "udevadm info --name %s | grep /dev/disk/by-path/ | " \
"cut -d' ' -f4" % scsi_disk
disk_path = utils.run(path_cmd).stdout.strip()
# Add qemu guest agent in guest xml
vm_xml.VMXML.set_agent_channel(vm_name)
vmxml = vm_xml.VMXML.new_from_dumpxml(vm_name)
# Add scsi disk xml
scsi_disk = Disk(type_name="block")
scsi_disk.device = "lun"
scsi_disk.source = scsi_disk.new_disk_source(
**{'attrs': {'dev': disk_path}})
scsi_disk.target = {'dev': "sdb", 'bus': "scsi"}
vmxml.add_device(scsi_disk)
# Add scsi disk controller
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
scsi_controller.model = "virtio-scsi"
vmxml.add_device(scsi_controller)
# Redefine guest
vmxml.sync()
示例4: setup_controller
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def setup_controller(nic_num, controller_index, ctl_models):
"""
Create controllers bond to numa node in the guest xml
:param nic_num: number of nic card bond to numa node
:param controller_index: index num used to create controllers
:param ctl_models: contoller topo for numa bond
"""
index = controller_index
if nic_num == 2:
ctl_models.append('pcie-switch-upstream-port')
ctl_models.append('pcie-switch-downstream-port')
ctl_models.append('pcie-switch-downstream-port')
for i in range(index):
controller = Controller("controller")
controller.type = "pci"
controller.index = i
if i == 0:
controller.model = 'pcie-root'
else:
controller.model = 'pcie-root-port'
vmxml.add_device(controller)
set_address = False
for model in ctl_models:
controller = Controller("controller")
controller.type = "pci"
controller.index = index
controller.model = model
if set_address or model == "pcie-switch-upstream-port":
attrs = {'type': 'pci', 'domain': '0', 'slot': '0',
'bus': index - 1, 'function': '0'}
controller.address = controller.new_controller_address(**{"attrs": attrs})
logging.debug(controller)
if controller.model == "pcie-expander-bus":
controller.node = "0"
controller.target = {'busNr': '100'}
set_address = True
else:
set_address = False
logging.debug(controller)
vmxml.add_device(controller)
index += 1
return index - 1
示例5: set_vm_controller_xml
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def set_vm_controller_xml(vmxml):
"""
Set VM scsi controller xml.
:param vmxml. Domain xml object.
"""
# Add disk scsi controller
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
scsi_controller.model = "virtio-scsi"
vmxml.add_device(scsi_controller)
# Redefine domain
vmxml.sync()
示例6: add_ctrls
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def add_ctrls(vm_xml, dev_type="pci", dev_index="0", dev_model="pci-root"):
"""
Add multiple devices
:param dev_type: the type of the device to be added
:param dev_index: the maximum index of the device to be added
:param dev_model: the model of the device to be added
"""
for inx in range(0, int(dev_index) + 1):
newcontroller = Controller("controller")
newcontroller.type = dev_type
newcontroller.index = inx
newcontroller.model = dev_model
logging.debug("New device is added:\n%s", newcontroller)
vm_xml.add_device(newcontroller)
vm_xml.sync()
示例7: prepare_usb_controller
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def prepare_usb_controller(vmxml, usb_models):
"""
Add usb controllers into vm's xml.
:param vmxml: The vm's xml.
:param usb_models: The usb models will be used in usb controller(s).
"""
if not usb_models:
test.error("No usb model provided.")
# Add disk usb controller(s)
for usb_model in usb_models:
usb_controller = Controller("controller")
usb_controller.type = "usb"
usb_controller.index = "0"
usb_controller.model = usb_model
vmxml.add_device(usb_controller)
# Redefine domain
vmxml.sync()
示例8: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Test for hotplug usb device.
"""
# get the params from params
vm_name = params.get("main_vm", "virt-tests-vm1")
vm = env.get_vm(vm_name)
usb_type = params.get("usb_type", "kbd")
attach_type = params.get("attach_type", "attach_device")
attach_count = int(params.get("attach_count", "1"))
if usb_type == "storage":
model = params.get("model", "nec-xhci")
index = params.get("index", "1")
status_error = "yes" == params.get("status_error", "no")
vm_xml = VMXML.new_from_inactive_dumpxml(vm_name)
vm_xml_backup = vm_xml.copy()
# Set selinux of host.
backup_sestatus = utils_selinux.get_status()
utils_selinux.set_status("permissive")
if usb_type == "storage":
controllers = vm_xml.get_devices(device_type="controller")
devices = vm_xml.get_devices()
for dev in controllers:
if dev.type == "usb" and dev.index == "1":
devices.remove(dev)
controller = Controller("controller")
controller.type = "usb"
controller.index = index
controller.model = model
devices.append(controller)
vm_xml.set_devices(devices)
try:
session = vm.wait_for_login()
except (LoginError, VMError, ShellError), e:
raise error.TestFail("Test failed: %s" % str(e))
示例9: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Verify hotplug feature for char device
"""
vm_name = params.get("main_vm", "vm1")
status_error = "yes" == params.get("status_error", "no")
char_dev = params.get("char_dev", "file")
hotplug_type = params.get("hotplug_type", "qmp")
dup_charid = "yes" == params.get("dup_charid", "no")
dup_devid = "yes" == params.get("dup_devid", "no")
diff_devid = "yes" == params.get("diff_devid", "no")
tmp_dir = os.path.join(test.tmpdir, "hotplug_serial")
if not os.path.exists(tmp_dir):
os.mkdir(tmp_dir)
os.chmod(tmp_dir, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
vm_xml = VMXML.new_from_inactive_dumpxml(vm_name)
vm_xml_backup = vm_xml.copy()
# add controller for each char device
devices = vm_xml.get_devices()
controllers = vm_xml.get_devices(device_type="controller")
for dev in controllers:
if dev.type == "virtio-serial":
devices.remove(dev)
controller = Controller("controller")
controller.type = "virtio-serial"
controller.index = 0
devices.append(controller)
vm_xml.set_devices(devices)
vm_xml.sync()
# start and login vm
vm = env.get_vm(vm_name)
vm.start()
session = vm.wait_for_login()
def prepare_channel_xml(to_file, char_type, id=0):
params = {}
mode = ''
if char_type == "file":
channel_type = char_type
channel_path = os.path.join(tmp_dir, char_type)
elif char_type == "socket":
channel_type = 'unix'
channel_path = os.path.join(tmp_dir, char_type)
mode = 'bind'
elif char_type == "pty":
channel_type = char_type
channel_path = ("/dev/pts/%s" % id)
params = {'channel_type_name': channel_type,
'source_path': channel_path,
'source_mode': mode,
'target_type': 'virtio',
'target_name': char_type}
channel_xml = utlv.create_channel_xml(params, alias=True, address=True)
shutil.copyfile(channel_xml.xml, to_file)
def hotplug_device(type, char_dev, id=0):
tmp_file = os.path.join(tmp_dir, char_dev)
if type == "qmp":
char_add_opt = "chardev-add "
dev_add_opt = "device_add virtserialport,chardev="
if char_dev == "file":
char_add_opt += "file,path=%s,id=file" % tmp_file
dev_add_opt += "file,name=file,bus=virtio-serial0.0,id=file"
elif char_dev == "socket":
char_add_opt += "socket,path=%s,server,nowait,id=socket" % tmp_file
dev_add_opt += "socket,name=socket,bus=virtio-serial0.0,id=socket"
elif char_dev == "pty":
char_add_opt += ("pty,path=/dev/pts/%s,id=pty" % id)
dev_add_opt += "pty,name=pty,bus=virtio-serial0.0,id=pty"
result = virsh.qemu_monitor_command(vm_name, char_add_opt, "--hmp")
if result.exit_status:
raise error.TestError('Failed to add chardev %s to %s. Result:\n %s'
% (char_dev, vm_name, result))
result = virsh.qemu_monitor_command(vm_name, dev_add_opt, "--hmp")
if result.exit_status:
raise error.TestError('Failed to add device %s to %s. Result:\n %s'
% (char_dev, vm_name, result))
elif type == "attach":
xml_file = os.path.join(tmp_dir, "xml_%s" % char_dev)
if char_dev in ["file", "socket"]:
prepare_channel_xml(xml_file, char_dev)
elif char_dev == "pty":
prepare_channel_xml(xml_file, char_dev, id)
result = virsh.attach_device(vm_name, xml_file)
# serial device was introduced by the following commit,
# http://libvirt.org/git/?
# p=libvirt.git;a=commit;h=b63ea467617e3cbee4282ab2e5e780b4119cef3d
if "unknown device type" in result.stderr:
raise error.TestNAError('Failed to attach %s to %s. Result:\n %s'
% (char_dev, vm_name, result))
return result
def dup_hotplug(type, char_dev, id, dup_charid=False, dup_devid=False, diff_devid=False):
tmp_file = os.path.join(tmp_dir, char_dev)
if type == "qmp":
#.........这里部分代码省略.........
示例10: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
# Get variables.
status_error = ('yes' == params.get("status_error", 'no'))
img_type = ('yes' == params.get("libvirt_scsi_img_type", "no"))
cdrom_type = ('yes' == params.get("libvirt_scsi_cdrom_type", "no"))
partition_type = ('yes' == params.get("libvirt_scsi_partition_type", "no"))
partition = params.get("libvirt_scsi_partition",
"ENTER.YOUR.AVAILABLE.PARTITION")
vm_name = params.get("main_vm", "avocado-vt-vm1")
# Init a VM instance and a VMXML instance.
vm = env.get_vm(vm_name)
vmxml = VMXML.new_from_inactive_dumpxml(vm_name)
# Keep a backup of xml to restore it in cleanup.
backup_xml = vmxml.copy()
# Add a scsi controller if there is not.
controller_devices = vmxml.get_devices("controller")
scsi_controllers = []
for device in controller_devices:
if device.type == "scsi":
scsi_controllers.append(device)
if not scsi_controllers:
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
scsi_controller.model = "virtio-scsi"
vmxml.add_device(scsi_controller)
# Add disk with bus of scsi into vmxml.
if partition_type:
if partition.count("ENTER.YOUR"):
raise error.TestNAError("Partition for partition test "
"is not configured.")
partition_disk = Disk(type_name="block")
partition_disk.device = "disk"
partition_disk.target = {'dev': "vdg",
'bus': "scsi"}
partition_disk.source = partition_disk.new_disk_source(
**{'attrs': {'dev': partition}})
vmxml.add_device(partition_disk)
if img_type:
# Init a QemuImg instance.
img_name = "libvirt_scsi"
params['image_name'] = img_name
image = qemu_storage.QemuImg(params, data_dir.get_tmp_dir(), img_name)
# Create a image.
img_path, _ = image.create(params)
img_disk = Disk(type_name="file")
img_disk.device = "disk"
img_disk.source = img_disk.new_disk_source(
**{'attrs': {'file': img_path}})
img_disk.target = {'dev': "vde",
'bus': "scsi"}
vmxml.add_device(img_disk)
if cdrom_type:
# Init a CdromDisk instance.
cdrom_path = os.path.join(data_dir.get_tmp_dir(), "libvirt_scsi")
try:
cdrom = CdromDisk(cdrom_path, data_dir.get_tmp_dir())
cdrom.close()
except process.CmdError, detail:
raise error.TestNAError("Failed to create cdrom disk: %s" % detail)
cdrom_disk = Disk(type_name="file")
cdrom_disk.device = "cdrom"
cdrom_disk.target = {'dev': "vdf",
'bus': "scsi"}
cdrom_disk.source = cdrom_disk.new_disk_source(
**{'attrs': {'file': cdrom_path}})
vmxml.add_device(cdrom_disk)
示例11: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Sriov basic test:
1.create max vfs;
2.Check the nodedev info;
3.Start a guest with vf;
4.Reboot a guest with vf;
5.suspend/resume a guest with vf
"""
def find_pf():
pci_address = ""
for pci in pci_dirs:
temp_iface_name = os.listdir("%s/net" % pci)[0]
operstate = utils_net.get_net_if_operstate(temp_iface_name)
if operstate == "up":
pf_iface_name = temp_iface_name
pci_address = pci
break
if pci_address == "":
return False
else:
return pci_address
def create_address_dict(pci_id):
"""
Use pci_xxxx_xx_xx_x to create address dict.
"""
device_domain = pci_id.split(':')[0]
device_domain = "0x%s" % device_domain
device_bus = pci_id.split(':')[1]
device_bus = "0x%s" % device_bus
device_slot = pci_id.split(':')[-1].split('.')[0]
device_slot = "0x%s" % device_slot
device_function = pci_id.split('.')[-1]
device_function = "0x%s" % device_function
attrs = {'type': 'pci', 'domain': device_domain, 'slot': device_slot,
'bus': device_bus, 'function': device_function}
return attrs
def addr_to_pci(addr):
"""
Convert address dict to pci address: xxxxx:xx.x.
"""
pci_domain = re.findall(r"0x(.+)", addr['domain'])[0]
pci_bus = re.findall(r"0x(.+)", addr['bus'])[0]
pci_slot = re.findall(r"0x(.+)", addr['slot'])[0]
pci_function = re.findall(r"0x(.+)", addr['function'])[0]
pci_addr = pci_domain + ":" + pci_bus + ":" + pci_slot + "." + pci_function
return pci_addr
def create_hostdev_interface(pci_id, managed, model):
"""
Create hostdev type interface xml.
"""
attrs = create_address_dict(pci_id)
new_iface = Interface('hostdev')
new_iface.managed = managed
if model != "":
new_iface.model = model
new_iface.mac_address = utils_net.generate_mac_address_simple()
new_iface.hostdev_address = new_iface.new_iface_address(**{"attrs": attrs})
chars = string.ascii_letters + string.digits + '-_'
alias_name = 'ua-' + ''.join(random.choice(chars) for _ in list(range(64)))
new_iface.alias = {'name': alias_name}
return new_iface
def create_vfs(vf_num):
"""
Create max vfs.
"""
net_device = []
net_name = []
test_res = process.run("echo 0 > %s/sriov_numvfs" % pci_address, shell=True)
pci_list = virsh.nodedev_list(cap='pci').stdout.strip().splitlines()
net_list = virsh.nodedev_list(cap='net').stdout.strip().splitlines()
pci_list_before = set(pci_list)
net_list_before = set(net_list)
test_res = process.run("echo %d > %s/sriov_numvfs" % (vf_num, pci_address), shell=True)
if test_res.exit_status != 0:
test.fail("Fail to create vfs")
pci_list_sriov = virsh.nodedev_list(cap='pci').stdout.strip().splitlines()
def _vf_init_completed():
try:
net_list_sriov = virsh.nodedev_list(cap='net').stdout.strip().splitlines()
net_list_sriov = set(net_list_sriov)
net_diff = list(net_list_sriov.difference(net_list_before))
if len(net_diff) != int(vf_num):
net_diff = []
return False
return net_diff
except process.CmdError:
raise test.fail("Get net list with 'virsh list' failed\n")
pci_list_sriov = set(pci_list_sriov)
pci_diff = list(pci_list_sriov.difference(pci_list_before))
net_diff = utils_misc.wait_for(_vf_init_completed, timeout=60)
if not net_diff:
test.fail("Get net list with 'virsh list' failed\n")
#.........这里部分代码省略.........
示例12: Controller
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
del iface.address
if bootdisk_snapshot != "":
disk.snapshot = bootdisk_snapshot
disk.target = {"dev": bootdisk_target, "bus": bootdisk_bus}
device_source = disk.source.attrs["file"]
del disk.address
vmxml.devices = xml_devices
vmxml.define()
# Add virtio_scsi controller.
if virtio_scsi_controller:
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
ctl_model = params.get("virtio_scsi_controller_model")
if ctl_model:
scsi_controller.model = ctl_model
if virtio_scsi_controller_driver != "":
driver_dict = {}
for driver_option in virtio_scsi_controller_driver.split(','):
if driver_option != "":
d = driver_option.split('=')
driver_dict.update({d[0].strip(): d[1].strip()})
scsi_controller.driver = driver_dict
vmxml.del_controller("scsi")
vmxml.add_device(scsi_controller)
# Test usb devices.
示例13: run_libvirt_scsi
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run_libvirt_scsi(test, params, env):
# Get variables.
status_error = ('yes' == params.get("status_error", 'no'))
img_type = ('yes' == params.get("libvirt_scsi_img_type", "no"))
cdrom_type = ('yes' == params.get("libvirt_scsi_cdrom_type", "no"))
partition_type = ('yes' == params.get("libvirt_scsi_partition_type", "no"))
partition = params.get("libvirt_scsi_partition",
"ENTER.YOUR.AVAILIBLE.PARTITION")
vm_name = params.get("main_vm", "virt-tests-vm1")
# Init a VM instance and a VMXML instance.
vm = env.get_vm(vm_name)
vmxml = VMXML.new_from_dumpxml(vm_name)
# Keep a backup of xml to restore it in cleanup.
backup_xml = vmxml.copy()
# Add a scsi controller if there is not.
controller_devices = vmxml.get_devices("controller")
scsi_controller_exists = False
for device in controller_devices:
if device.type == "scsi":
scsi_controller_exists = True
break
if not scsi_controller_exists:
scsi_controller = Controller("controller")
scsi_controller.type = "scsi"
scsi_controller.index = "0"
scsi_controller.model = "virtio-scsi"
vmxml.add_device(scsi_controller)
# Add disk with bus of scsi into vmxml.
if img_type:
# Init a QemuImg instance.
img_name = "libvirt_scsi"
params['image_name'] = img_name
image = qemu_storage.QemuImg(params, data_dir.get_tmp_dir(), img_name)
# Create a image.
img_path, _ = image.create(params)
img_disk = Disk(type_name="file")
img_disk.device = "disk"
img_disk.source = img_disk.new_disk_source(
**{'attrs': {'file': img_path}})
img_disk.target = {'dev': "vde",
'bus': "scsi"}
vmxml.add_device(img_disk)
if cdrom_type:
# Init a CdromDisk instance.
cdrom_path = os.path.join(data_dir.get_tmp_dir(), "libvirt_scsi")
cdrom = CdromDisk(cdrom_path, data_dir.get_tmp_dir())
cdrom.close()
cdrom_disk = Disk(type_name="file")
cdrom_disk.device = "cdrom"
cdrom_disk.target = {'dev': "vdf",
'bus': "scsi"}
cdrom_disk.source = cdrom_disk.new_disk_source(
**{'attrs': {'file': cdrom_path}})
vmxml.add_device(cdrom_disk)
if partition_type:
if partition.count("ENTER.YOUR"):
raise error.TestNAError("Partition for partition test"
"is not configured.")
partition_disk = Disk(type_name="block")
partition_disk.device = "disk"
partition_disk.target = {'dev': "vdg",
'bus': "scsi"}
partition_disk.source = partition_disk.new_disk_source(
**{'attrs': {'dev': partition}})
vmxml.add_device(partition_disk)
# sync the vmxml with VM.
vmxml.sync()
# Check the result of scsi disk.
try:
try:
vm.start()
# Start VM successfully.
if status_error:
raise error.TestFail('Starting VM successed in negative case.')
except virt_vm.VMStartError, e:
# Starting VM failed.
if not status_error:
raise error.TestFail("Test failed in positive case."
"error: %s" % e)
finally:
# clean up.
backup_xml.sync()
示例14: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Verify hotplug feature for char device
"""
vm_name = params.get("main_vm", "vm1")
status_error = "yes" == params.get("status_error", "no")
char_dev = params.get("char_dev", "file")
hotplug_type = params.get("hotplug_type", "qmp")
dup_charid = "yes" == params.get("dup_charid", "no")
dup_devid = "yes" == params.get("dup_devid", "no")
diff_devid = "yes" == params.get("diff_devid", "no")
xml_file = params.get("xml_file", "/tmp/xml_file")
vm_xml = VMXML.new_from_inactive_dumpxml(vm_name)
vm_xml_backup = vm_xml.copy()
# add controller for each char device
devices = vm_xml.get_devices()
controllers = vm_xml.get_devices(device_type="controller")
for dev in controllers:
if dev.type == "virtio-serial":
devices.remove(dev)
controller = Controller("controller")
controller.type = "virtio-serial"
controller.index = 0
devices.append(controller)
vm_xml.set_devices(devices)
vm_xml.sync()
# start and login vm
vm = env.get_vm(vm_name)
vm.start()
session = vm.wait_for_login()
def create_channel_xml(vm_name, char_type, id=0):
"""
Create a XML contains channel information.
"""
channel_type = char_type
if char_type == "file":
channel_path = ("/tmp/%s" % char_type)
channel_source = {'path': channel_path}
channel_target = {'type': 'virtio', 'name': 'file'}
if char_type == "socket":
channel_type = 'unix'
channel_path = ("/tmp/%s" % char_type)
channel_source = {'mode': 'bind', 'path': channel_path}
channel_target = {'type': 'virtio', 'name': 'socket'}
if char_type == "pty":
channel_path = ("/dev/pts/%s" % id)
channel_source = {'path': channel_path}
channel_target = {'type': 'virtio', 'name': 'pty'}
channel_alias = {'name': char_type}
channel_address = {'type': 'virtio-serial', 'controller': '0', 'bus': '0'}
channel_params = {'type_name': channel_type, 'source': channel_source,
'target': channel_target, 'alias': channel_alias,
'address': channel_address}
channelxml = channel.Channel.new_from_dict(channel_params)
logging.debug("Channel XML:\n%s", channelxml)
xmlf = open(channelxml.xml)
try:
xml_lines = xmlf.read()
finally:
xmlf.close()
return xml_lines
def hotplug_device(type, char_dev, id=0):
tmp_file = "/tmp/%s" % char_dev
if type == "qmp":
char_add_opt = "chardev-add "
dev_add_opt = "device_add virtserialport,chardev="
if char_dev == "file":
char_add_opt += "file,path=/tmp/file,id=file"
dev_add_opt += "file,name=file,bus=virtio-serial0.0,id=file"
elif char_dev == "socket":
char_add_opt += "socket,path=/tmp/socket,server,nowait,id=socket"
dev_add_opt += "socket,name=socket,bus=virtio-serial0.0,id=socket"
elif char_dev == "pty":
char_add_opt += ("pty,path=/dev/pts/%s,id=pty" % id)
dev_add_opt += "pty,name=pty,bus=virtio-serial0.0,id=pty"
result = virsh.qemu_monitor_command(vm_name, char_add_opt, "--hmp")
if result.exit_status:
raise error.TestError('Failed to add chardev %s to %s. Result:\n %s'
% (char_dev, vm_name, result))
result = virsh.qemu_monitor_command(vm_name, dev_add_opt, "--hmp")
if result.exit_status:
raise error.TestError('Failed to add device %s to %s. Result:\n %s'
% (char_dev, vm_name, result))
elif type == "attach":
if char_dev in ["file", "socket"]:
xml_info = create_channel_xml(vm_name, char_dev)
elif char_dev == "pty":
xml_info = create_channel_xml(vm_name, char_dev, id)
f = open(xml_file, "w")
f.write(xml_info)
f.close()
if os.path.exists(tmp_file):
#.........这里部分代码省略.........
示例15: run
# 需要导入模块: from virttest.libvirt_xml.devices.controller import Controller [as 别名]
# 或者: from virttest.libvirt_xml.devices.controller.Controller import type [as 别名]
def run(test, params, env):
"""
Test for hotplug usb device.
"""
# get the params from params
vm_name = params.get("main_vm", "avocado-vt-vm1")
vm = env.get_vm(vm_name)
usb_type = params.get("usb_type", "kbd")
attach_type = params.get("attach_type", "attach_device")
attach_count = int(params.get("attach_count", "1"))
if usb_type == "storage":
model = params.get("model", "nec-xhci")
index = params.get("index", "1")
status_error = ("yes" == params.get("status_error", "no"))
vm_xml = VMXML.new_from_inactive_dumpxml(vm_name)
vm_xml_backup = vm_xml.copy()
# Set selinux of host.
backup_sestatus = utils_selinux.get_status()
utils_selinux.set_status("permissive")
if usb_type == "storage":
controllers = vm_xml.get_devices(device_type="controller")
devices = vm_xml.get_devices()
for dev in controllers:
if dev.type == "usb" and dev.index == "1":
devices.remove(dev)
controller = Controller("controller")
controller.type = "usb"
controller.index = index
controller.model = model
devices.append(controller)
vm_xml.set_devices(devices)
try:
session = vm.wait_for_login()
except (LoginError, VMError, ShellError) as e:
test.fail("Test failed: %s" % str(e))
def is_hotplug_ok():
try:
output = session.cmd_output("fdisk -l | grep -c '^Disk /dev/.* 1 M'")
if int(output.strip()) != attach_count:
return False
else:
return True
except ShellTimeoutError as detail:
test.fail("unhotplug failed: %s, " % detail)
tmp_dir = os.path.join(data_dir.get_tmp_dir(), "usb_hotplug_files")
if not os.path.isdir(tmp_dir):
os.mkdir(tmp_dir)
try:
result = None
dev_xml = None
opt = "--hmp"
for i in range(attach_count):
if usb_type == "storage":
path = os.path.join(tmp_dir, "%s.img" % i)
libvirt.create_local_disk("file", path, size="1M", disk_format="qcow2")
os.chmod(path, 0o666)
if attach_type == "qemu_monitor":
if usb_type == "storage":
attach_cmd = "drive_add"
attach_cmd += (" 0 id=drive-usb-%s,if=none,file=%s" % (i, path))
result = virsh.qemu_monitor_command(vm_name, attach_cmd, options=opt)
if result.exit_status or (result.stdout.strip().find("OK") == -1):
raise process.CmdError(result.command, result)
attach_cmd = "device_add usb-storage,"
attach_cmd += ("id=drive-usb-%s,bus=usb1.0,drive=drive-usb-%s" % (i, i))
else:
attach_cmd = "device_add"
attach_cmd += " usb-%s,bus=usb1.0,id=%s%s" % (usb_type, usb_type, i)
result = virsh.qemu_monitor_command(vm_name, attach_cmd, options=opt)
if result.exit_status:
raise process.CmdError(result.command, result)
else:
attributes = {'type_name': "usb", 'bus': "1", 'port': "0"}
if usb_type == "storage":
dev_xml = Disk(type_name="file")
dev_xml.device = "disk"
dev_xml.source = dev_xml.new_disk_source(**{"attrs": {'file': path}})
dev_xml.driver = {"name": "qemu", "type": 'qcow2', "cache": "none"}
dev_xml.target = {"dev": 'sdb', "bus": "usb"}
dev_xml.address = dev_xml.new_disk_address(**{"attrs": attributes})
else:
if usb_type == "mouse":
dev_xml = Input("mouse")
elif usb_type == "tablet":
dev_xml = Input("tablet")
else:
dev_xml = Input("keyboard")
#.........这里部分代码省略.........