本文整理汇总了Python中virttest.virsh.has_help_command函数的典型用法代码示例。如果您正苦于以下问题:Python has_help_command函数的具体用法?Python has_help_command怎么用?Python has_help_command使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了has_help_command函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: check_virsh_command_and_option
def check_virsh_command_and_option(command, option=None):
"""
Check if virsh command exists
:param command: the command to be checked
:param option: the command option to be checked
"""
msg = "This version of libvirt does not support "
if not virsh.has_help_command(command):
test.cancel(msg + "virsh command '%s'" % command)
if option and not virsh.has_command_help_match(command, option):
test.cancel(msg + "virsh command '%s' with option '%s'" % (command,
option))
示例2: run
def run(test, params, env):
"""
Test the command virsh freecell
(1) Call virsh freecell
(2) Call virsh freecell --all
(3) Call virsh freecell with a numeric argument
(4) Call virsh freecell xyz
(5) Call virsh freecell with libvirtd service stop
"""
args = params.get("virsh_freecell_args")
option = params.get("virsh_freecell_opts")
# Prepare libvirtd service
check_libvirtd = "libvirtd" in params
if check_libvirtd:
libvirtd = params.get("libvirtd")
if libvirtd == "off":
utils_libvirtd.libvirtd_stop()
# Run test case
cmd_result = virsh.freecell(cellno=args, options=option)
output = cmd_result.stdout.strip()
status = cmd_result.exit_status
# Recover libvirtd service start
if libvirtd == "off":
utils_libvirtd.libvirtd_start()
# Check the output
if virsh.has_help_command('numatune'):
OLD_LIBVIRT = False
else:
OLD_LIBVIRT = True
if option == '--all':
test.cancel("Older libvirt virsh freecell "
"doesn't support --all option")
def output_check(freecell_output):
if not re.search("ki?B", freecell_output, re.IGNORECASE):
test.fail(
"virsh freecell output invalid: " + freecell_output)
# Check status_error
status_error = params.get("status_error")
if status_error == "yes":
if status == 0:
if libvirtd == "off":
test.fail("Command 'virsh freecell' succeeded "
"with libvirtd service stopped, incorrect")
else:
# newer libvirt
if not OLD_LIBVIRT:
test.fail("Command 'virsh freecell %s' succeeded"
"(incorrect command)" % option)
else: # older libvirt
test.cancel('Older libvirt virsh freecell '
'incorrectly processes extranious'
'command-line options')
elif status_error == "no":
output_check(output)
if status != 0:
test.fail("Command 'virsh freecell %s' failed "
"(correct command)" % option)
示例3: run
def run(test, params, env):
"""
Test virsh reset command
"""
if not virsh.has_help_command('reset'):
raise error.TestNAError("This version of libvirt does not support "
"the reset test")
vm_name = params.get("main_vm", "avocado-vt-vm1")
vm_ref = params.get("reset_vm_ref")
readonly = params.get("readonly", False)
status_error = ("yes" == params.get("status_error", "no"))
start_vm = ("yes" == params.get("start_vm"))
vm = env.get_vm(vm_name)
domid = vm.get_id()
domuuid = vm.get_uuid()
bef_pid = commands.getoutput("pidof -s qemu-kvm")
if vm_ref == 'id':
vm_ref = domid
elif vm_ref == 'uuid':
vm_ref = domuuid
else:
vm_ref = vm_name
uri = params.get("virsh_uri")
unprivileged_user = params.get('unprivileged_user')
if unprivileged_user:
if unprivileged_user.count('EXAMPLE'):
unprivileged_user = 'testacl'
if not libvirt_version.version_compare(1, 1, 1):
if params.get('setup_libvirt_polkit') == 'yes':
raise error.TestNAError("API acl test not supported in current"
" libvirt version.")
# change the disk cache to default
vmxml_backup = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
def change_cache(vmxml, mode):
"""
Change the cache mode
:param vmxml: instance of VMXML
:param mode: cache mode you want to change
"""
devices = vmxml.devices
disk_index = devices.index(devices.by_device_tag('disk')[0])
disk = devices[disk_index]
disk_driver = disk.driver
disk_driver['cache'] = mode
disk.driver = disk_driver
vmxml.devices = devices
vmxml.define()
try:
change_cache(vmxml_backup.copy(), "default")
tmpfile = "/home/%s" % utils_misc.generate_random_string(6)
logging.debug("tmpfile is %s", tmpfile)
if start_vm:
session = vm.wait_for_login()
session.cmd("rm -rf %s && sync" % tmpfile)
status = session.get_command_status("touch %s && ls %s" %
(tmpfile, tmpfile))
if status == 0:
logging.info("Succeed generate file %s", tmpfile)
else:
raise error.TestFail("Touch command failed!")
# record the pid before reset for compare
output = virsh.reset(vm_ref, readonly=readonly,
unprivileged_user=unprivileged_user,
uri=uri, ignore_status=True, debug=True)
if output.exit_status != 0:
if status_error:
logging.info("Failed to reset guest as expected, Error:%s.",
output.stderr)
return
else:
raise error.TestFail("Failed to reset guest, Error:%s." %
output.stderr)
elif status_error:
raise error.TestFail("Expect fail, but succeed indeed.")
session.close()
session = vm.wait_for_login()
status = session.get_command_status("ls %s" % tmpfile)
if status == 0:
raise error.TestFail("Fail to reset guest, tmpfile still exist!")
else:
aft_pid = commands.getoutput("pidof -s qemu-kvm")
if bef_pid == aft_pid:
logging.info("Succeed to check reset, tmpfile is removed.")
else:
raise error.TestFail("Domain pid changed after reset!")
session.close()
#.........这里部分代码省略.........
示例4: run
def run(test, params, env):
"""
Test send-key command, include all types of codeset and sysrq
For normal sendkey test, we create a file to check the command
execute by send-key. For sysrq test, check the /var/log/messages
and guest status
"""
if not virsh.has_help_command('send-key'):
raise error.TestNAError("This version of libvirt does not support "
"the send-key test")
vm_name = params.get("main_vm", "virt-tests-vm1")
status_error = ("yes" == params.get("status_error", "no"))
options = params.get("sendkey_options", "")
sysrq_test = ("yes" == params.get("sendkey_sysrq", "no"))
readonly = params.get("readonly", False)
username = params.get("username")
password = params.get("password")
create_file = params.get("create_file_name")
def send_line(send_str):
"""
send string to guest with send-key and end with Enter
"""
for send_ch in list(send_str):
virsh.sendkey(vm_name, "KEY_%s" % send_ch.upper(),
ignore_status=False)
virsh.sendkey(vm_name, "KEY_ENTER", ignore_status=False)
vm = env.get_vm(vm_name)
session = vm.wait_for_login()
if sysrq_test:
# Is 'rsyslog' installed on guest? It'll be what writes out
# to /var/log/messages
rpm_stat = session.cmd_status("rpm -q rsyslog")
if rpm_stat != 0:
logging.debug("rsyslog not found in guest installing")
stat_install = session.cmd_status("yum install -y rsyslog", 300)
if stat_install != 0:
raise error.TestFail("Fail to install rsyslog, make"
"sure that you have usable repo in guest")
# clear messages, restart rsyslog, and make sure it's running
session.cmd("echo '' > /var/log/messages")
session.cmd("service rsyslog restart")
ps_stat = session.cmd_status("ps aux |grep rsyslog")
if ps_stat != 0:
raise error.TestFail("rsyslog is not running in guest")
# enable sysrq
session.cmd("echo 1 > /proc/sys/kernel/sysrq")
# make sure the environment is clear
if create_file is not None:
session.cmd("rm -rf %s" % create_file)
try:
# wait for tty1 started
tty1_stat = "ps aux|grep [/]sbin/.*tty.*tty1"
timeout = 60
while timeout >= 0 and \
session.get_command_status(tty1_stat) != 0:
time.sleep(1)
timeout = timeout - 1
if timeout < 0:
raise error.TestFail("Can not wait for tty1 started in 60s")
# send user and passwd to guest to login
send_line(username)
time.sleep(2)
send_line(password)
time.sleep(2)
output = virsh.sendkey(vm_name, options, readonly=readonly)
time.sleep(2)
if output.exit_status != 0:
if status_error:
logging.info("Failed to sendkey to guest as expected, Error:"
"%s.", output.stderr)
return
else:
raise error.TestFail("Failed to send key to guest, Error:%s." %
output.stderr)
elif status_error:
raise error.TestFail("Expect fail, but succeed indeed.")
if create_file is not None:
# check if created file exist
cmd_ls = "ls %s" % create_file
sec_status, sec_output = session.get_command_status_output(cmd_ls)
if sec_status == 0:
logging.info("Succeed to create file with send key")
else:
raise error.TestFail("Fail to create file with send key, "
"Error:%s" % sec_output)
elif sysrq_test:
#.........这里部分代码省略.........
示例5: run
def run(test, params, env):
"""
1. Configure kernel cmdline to support kdump
2. Start kdump service
3. Inject NMI to the guest
4. Check NMI times
"""
for cmd in 'inject-nmi', 'qemu-monitor-command':
if not virsh.has_help_command(cmd):
raise error.TestNAError("This version of libvirt does not "
" support the %s test", cmd)
vm_name = params.get("main_vm", "virt-tests-vm1")
vm = env.get_vm(vm_name)
start_vm = params.get("start_vm")
expected_nmi_times = params.get("expected_nmi_times", '0')
unprivileged_user = params.get('unprivileged_user')
if unprivileged_user:
if unprivileged_user.count('EXAMPLE'):
unprivileged_user = 'testacl'
if not libvirt_version.version_compare(1, 1, 1):
if params.get('setup_libvirt_polkit') == 'yes':
raise error.TestNAError("API acl test not supported in current"
" libvirt version.")
if start_vm == "yes":
# start kdump service in the guest
cmd = "which kdump"
try:
run_cmd_in_guest(vm, cmd)
except:
try:
# try to install kexec-tools on fedoraX/rhelx.y guest
run_cmd_in_guest(vm, "yum install -y kexec-tools")
except:
raise error.TestNAError("Requires kexec-tools(or the "
"equivalent for your distro)")
# enable kdump service in the guest
cmd = "service kdump start"
run_cmd_in_guest(vm, cmd)
# filter original 'NMI' information from the /proc/interrupts
cmd = "grep NMI /proc/interrupts"
nmi_str = run_cmd_in_guest(vm, cmd)
# filter CPU from the /proc/cpuinfo and count number
cmd = "grep -E '^process' /proc/cpuinfo | wc -l"
vcpu_num = run_cmd_in_guest(vm, cmd).strip()
logging.info("Inject NMI to the guest via virsh inject_nmi")
virsh.inject_nmi(vm_name, debug=True, ignore_status=False)
logging.info("Inject NMI to the guest via virsh qemu_monitor_command")
virsh.qemu_monitor_command(vm_name, '{"execute":"inject-nmi"}')
# injects a Non-Maskable Interrupt into the default CPU (x86/s390)
# or all CPUs (ppc64), as usual, the default CPU index is 0
cmd = "grep NMI /proc/interrupts | awk '{print $2}'"
nmi_from_default_vcpu = run_cmd_in_guest(vm, cmd)
real_nmi_times = nmi_from_default_vcpu.splitlines()[0]
logging.debug("The current Non-Maskable Interrupts: %s", real_nmi_times)
# check Non-maskable interrupts times
if real_nmi_times != expected_nmi_times:
raise error.TestFail("NMI times aren't expected %s:%s",
real_nmi_times, expected_nmi_times)
示例6: run
def run(test, params, env):
"""
Test virsh domdisplay command, return the graphic url
This test covered vnc and spice type, also readonly and readwrite mode
If have --include-passwd option, also need to check passwd list in result
"""
if not virsh.has_help_command('domdisplay'):
raise error.TestNAError("This version of libvirt doesn't support "
"domdisplay test")
vm_name = params.get("main_vm", "virt-tests-vm1")
status_error = ("yes" == params.get("status_error", "no"))
options = params.get("domdisplay_options", "")
graphic = params.get("domdisplay_graphic", "vnc")
readonly = ("yes" == params.get("readonly", "no"))
passwd = params.get("domdisplay_passwd")
is_ssl = ("yes" == params.get("domdisplay_ssl", "no"))
is_domid = ("yes" == params.get("domdisplay_domid", "no"))
is_domuuid = ("yes" == params.get("domdisplay_domuuid", "no"))
qemu_conf = params.get("qemu_conf_file", "/etc/libvirt/qemu.conf")
# Do xml backup for final recovery
vmxml_backup = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
tmp_file = os.path.join(test.tmpdir, "qemu.conf.bk")
def prepare_ssl_env():
"""
Do prepare for ssl spice connection
"""
# modify qemu.conf
f_obj = open(qemu_conf, "r")
cont = f_obj.read()
# remove the existing setting
left_cont = re.sub(r'\s*spice_tls\s*=.*', '', cont)
left_cont = re.sub(r'\s*spice_tls_x509_cert_dir\s*=.*', '',
left_cont)
# write back to origin file with cut left content
f_obj = open(qemu_conf, "w")
f_obj.write(left_cont)
f_obj.write("spice_tls = 1\n")
f_obj.write("spice_tls_x509_cert_dir = \"/etc/pki/libvirt-spice\"")
f_obj.close()
# make modification effect
utils_libvirtd.libvirtd_restart()
# Generate CA cert
utils_misc.create_x509_dir("/etc/pki/libvirt-spice",
"/C=IL/L=Raanana/O=Red Hat/CN=my CA",
"/C=IL/L=Raanana/O=Red Hat/CN=my server",
passwd)
try:
graphic_count = len(vmxml_backup.get_graphics_devices())
if is_ssl:
# Do backup for qemu.conf in tmp_file
shutil.copyfile(qemu_conf, tmp_file)
prepare_ssl_env()
if graphic_count:
Graphics.del_graphic(vm_name)
Graphics.add_graphic(vm_name, passwd, "spice", True)
else:
if not graphic_count:
Graphics.add_graphic(vm_name, passwd, graphic)
# Only change graphic type and passwd
Graphics.change_graphic_type_passwd(vm_name, graphic, passwd)
vm = env.get_vm(vm_name)
if not vm.is_alive():
vm.start()
dom_id = virsh.domid(vm_name).stdout.strip()
dom_uuid = virsh.domuuid(vm_name).stdout.strip()
if is_domid:
vm_name = dom_id
if is_domuuid:
vm_name = dom_uuid
# Do test
result = virsh.domdisplay(vm_name, options, readonly=readonly,
debug=True)
logging.debug("result is %s", result)
if result.exit_status:
if not status_error:
raise error.TestFail("Fail to get domain display info. Error:"
"%s." % result.stderr.strip())
else:
logging.info("Get domain display info failed as expected. "
"Error:%s.", result.stderr.strip())
return
elif status_error:
raise error.TestFail("Expect fail, but succeed indeed!")
output = result.stdout.strip()
# Different result depends on the domain xml listen address
if output.find("localhost:") >= 0:
#.........这里部分代码省略.........
示例7: run
def run(test, params, env):
"""
Test the command virsh memtune
(1) To get the current memtune parameters
(2) Change the parameter values
(3) Check the memtune query updated with the values
(4) Check whether the mounted cgroup path gets the updated value
(5) Login to guest and use the memory greater that the assigned value
and check whether it kills the vm.
(6) TODO:Check more values and robust scenarios.
"""
def check_limit(path, expected_value, limit_name):
"""
Matches the expected and actual output
(1) Match the output of the virsh memtune
(2) Match the output of the respective cgroup fs value
:params: path: memory controller path for a domain
:params: expected_value: the expected limit value
:params: limit_name: the limit to be checked
hard_limit/soft_limit/swap_hard_limit
:return: True or False based on the checks
"""
status_value = True
# Check 1
actual_value = virsh.memtune_get(domname, limit_name)
if actual_value == -1:
raise error.TestFail("the key %s not found in the "
"virsh memtune output" % limit_name)
if actual_value != int(expected_value):
status_value = False
logging.error("%s virsh output:\n\tExpected value:%d"
"\n\tActual value: "
"%d", limit_name,
int(expected_value), int(actual_value))
# Check 2
if limit_name == 'hard_limit':
cg_file_name = '%s/memory.limit_in_bytes' % path
elif limit_name == 'soft_limit':
cg_file_name = '%s/memory.soft_limit_in_bytes' % path
elif limit_name == 'swap_hard_limit':
cg_file_name = '%s/memory.memsw.limit_in_bytes' % path
cg_file = None
try:
try:
cg_file = open(cg_file_name)
output = cg_file.read()
value = int(output) / 1024
if int(expected_value) != int(value):
status_value = False
logging.error("%s cgroup fs:\n\tExpected Value: %d"
"\n\tActual Value: "
"%d", limit_name,
int(expected_value), int(value))
except IOError:
status_value = False
logging.error("Error while reading:\n%s", cg_file_name)
finally:
if cg_file is not None:
cg_file.close()
return status_value
# Get the vm name, pid of vm and check for alive
domname = params.get("main_vm")
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
pid = vm.get_pid()
logging.info("Verify valid cgroup path for VM pid: %s", pid)
# Resolve the memory cgroup path for a domain
path = utils_cgroup.resolve_task_cgroup_path(int(pid), "memory")
# Set the initial memory starting value for test case
# By default set 1GB less than the total memory
# In case of total memory is less than 1GB set to 256MB
# visit subtests.cfg to change these default values
Memtotal = utils_memory.read_from_meminfo('MemTotal')
base_mem = params.get("memtune_base_mem")
if int(Memtotal) < int(base_mem):
Mem = int(params.get("memtune_min_mem"))
else:
Mem = int(Memtotal) - int(base_mem)
# Initialize error counter
error_counter = 0
# Check for memtune command is available in the libvirt version under test
if not virsh.has_help_command("memtune"):
raise error.TestNAError(
"Memtune not available in this libvirt version")
# Run test case with 100kB increase in memory value for each iteration
while (Mem < Memtotal):
if virsh.has_command_help_match("memtune", "hard-limit"):
#.........这里部分代码省略.........
示例8: run_virsh_domfstrim
def run_virsh_domfstrim(test, params, env):
"""
Test domfstrim command, make sure that all supported options work well
Test scenaries:
1. fstrim without options
2. fstrim with --minimum with large options
3. fstrim with --minimum with small options
Note: --mountpoint still not supported so will not test here
"""
if not virsh.has_help_command('domfstrim'):
raise error.TestNAError("This version of libvirt does not support "
"the domfstrim test")
try:
utils_misc.find_command("lsscsi")
except ValueError:
raise error.TestNAError("Command 'lsscsi' is missing. You must "
"install it.")
vm_name = params.get("main_vm", "virt-tests-vm1")
status_error = ("yes" == params.get("status_error", "no"))
minimum = params.get("domfstrim_minimum")
mountpoint = params.get("domfstrim_mountpoint")
options = params.get("domfstrim_options", "")
is_fulltrim = ("yes" == params.get("is_fulltrim", "yes"))
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()
def start_guest_agent(session):
"""
Start guest agent service in guest
:param: session: session in guest
"""
# Check if qemu-ga installed
check_cmd = "rpm -q qemu-guest-agent||yum install -y qemu-guest-agent"
session.cmd(check_cmd)
session.cmd("service qemu-guest-agent start")
# Check if the qemu-ga really started
stat_ps = session.cmd_status("ps aux |grep [q]emu-ga")
if stat_ps != 0:
raise error.TestFail("Fail to run qemu-ga in guest")
# Do backup for origin xml
xml_backup = vm_xml.VMXML.new_from_dumpxml(vm_name)
try:
vm = env.get_vm(vm_name)
if not vm.is_alive():
vm.start()
session = vm.wait_for_login()
bef_list = session.cmd_output("fdisk -l|grep ^/dev|"
"cut -d' ' -f1").split("\n")
session.close()
vm.destroy()
# Load module and get scsi disk name
utils.load_module("scsi_debug lbpu=1 lbpws=1")
scsi_disk = utils.run("lsscsi|grep scsi_debug|"
"awk '{print $6}'").stdout.strip()
# Create partition
open("/tmp/fdisk-cmd", "w").write("n\np\n\n\n\nw\n")
output = utils.run("fdisk %s < /tmp/fdisk-cmd"
% scsi_disk).stdout.strip()
logging.debug("fdisk output %s", output)
# Format disk
output = utils.run("mkfs.ext3 %s1" % scsi_disk).stdout.strip()
logging.debug("output %s", output)
#.........这里部分代码省略.........
示例9: run
def run(test, params, env):
"""
Test domfsthaw command, make sure that all supported options work well
Test scenaries:
1. fsthaw fs which has been freezed
2. fsthaw fs which has not been freezed
Note: --mountpoint still not supported so will not test here
"""
if not virsh.has_help_command('domfsthaw'):
raise error.TestNAError("This version of libvirt does not support "
"the domfsthaw test")
vm_name = params.get("main_vm", "virt-tests-vm1")
start_vm = ("yes" == params.get("start_vm", "no"))
no_freeze = ("yes" == params.get("no_freeze", "yes"))
has_qemu_ga = not ("yes" == params.get("no_qemu_ga", "no"))
start_qemu_ga = not ("yes" == params.get("no_start_qemu_ga", "no"))
status_error = ("yes" == params.get("status_error", "no"))
options = params.get("domfsthaw_options", "")
vm_ref = params.get("vm_ref", "")
# Do backup for origin xml
xml_backup = vm_xml.VMXML.new_from_dumpxml(vm_name)
try:
vm = env.get_vm(vm_name)
vm.destroy()
if not vm.is_alive():
vm.start()
# Firstly, freeze all filesytems
if not no_freeze:
# Add channel device for qemu-ga
vm.prepare_guest_agent()
cmd_result = virsh.domfsfreeze(vm_name, debug=True)
if cmd_result.exit_status != 0:
raise error.TestFail("Fail to do virsh domfsfreeze, error %s" %
cmd_result.stderr)
if has_qemu_ga:
vm.prepare_guest_agent(start=start_qemu_ga)
else:
# Remove qemu-ga channel
vm.prepare_guest_agent(channel=has_qemu_ga, start=False)
if start_vm:
if not vm.is_alive():
vm.start()
else:
vm.destroy()
if vm_ref == "none":
vm_name = " "
cmd_result = virsh.domfsthaw(vm_name, options=options, debug=True)
if not status_error:
if cmd_result.exit_status != 0:
raise error.TestFail("Fail to do virsh domfsthaw, error %s" %
cmd_result.stderr)
else:
if cmd_result.exit_status == 0:
raise error.TestFail("Command 'virsh domfsthaw' failed ")
finally:
# Do domain recovery
xml_backup.sync()
示例10: run_virsh_vcpupin
def run_virsh_vcpupin(test, params, env):
"""
Test the command virsh vcpupin
(1) Get the host and guest cpu count
(2) Call virsh vcpupin for each vcpu with pinning of each cpu
(3) Check whether the virsh vcpupin has pinned the respective vcpu to cpu
"""
def affinity_from_vcpuinfo(domname, vcpu):
"""
This function returns list of the vcpu's affinity from
virsh vcpuinfo output
:param domname: VM Name to operate on
:param vcpu: vcpu number for which the affinity is required
"""
output = virsh.vcpuinfo(domname).stdout.rstrip()
affinity = re.findall('CPU Affinity: +[-y]+', output)
total_affinity = affinity[int(vcpu)].split()[-1].strip()
actual_affinity = list(total_affinity)
return actual_affinity
def check_vcpupin(domname, vcpu, cpu_list, pid):
"""
This function checks the actual and the expected affinity of given vcpu
and raises error if not matchs
:param domname: VM Name to operate on
:param vcpu: vcpu number for which the affinity is required
:param cpu: cpu details for the affinity
"""
expected_output = utils_test.libvirt.cpus_string_to_affinity_list(
cpu_list,
host_cpu_count)
actual_output = affinity_from_vcpuinfo(domname, vcpu)
if expected_output == actual_output:
logging.info("successfully pinned cpu_list: %s --> vcpu: %s",
cpu_list, vcpu)
else:
raise error.TestFail("Command 'virsh vcpupin %s %s %s'not "
"succeeded, cpu pinning details not "
"updated properly in virsh vcpuinfo "
"command output" % (vm_name, vcpu, cpu_list))
if pid is None:
return
# Get the vcpus pid
vcpus_pid = vm.get_vcpus_pid()
vcpu_pid = vcpus_pid[vcpu]
# Get the actual cpu affinity value in the proc entry
output = utils_test.libvirt.cpu_allowed_list_by_task(pid, vcpu_pid)
actual_output_proc = utils_test.libvirt.cpus_string_to_affinity_list(
output,
host_cpu_count)
if expected_output == actual_output_proc:
logging.info("successfully pinned cpu: %s --> vcpu: %s"
" in respective proc entry", cpu_list, vcpu)
else:
raise error.TestFail("Command 'virsh vcpupin %s %s %s'not "
"succeeded cpu pinning details not "
"updated properly in /proc/%s/task/%s/status"
% (vm_name, vcpu, cpu_list, pid, vcpu_pid))
def run_and_check_vcpupin(vm_name, vcpu, cpu_list, options, pid):
"""
Run the vcpupin command and then check the result.
"""
# Execute virsh vcpupin command.
cmdResult = virsh.vcpupin(vm_name, vcpu, cpu_list, options)
if cmdResult.exit_status:
if not status_error:
# Command fail and it is in positive case.
raise error.TestFail(cmdResult)
else:
# Command fail and it is in negative case.
return
else:
if status_error:
# Command success and it is in negative case.
raise error.TestFail(cmdResult)
else:
# Command success and it is in positive case.
# "--config" will take effect after VM destroyed.
if options == "--config":
virsh.destroy(vm_name)
pid = None
# Check the result of vcpupin command.
check_vcpupin(vm_name, vcpu, cpu_list, pid)
if not virsh.has_help_command('vcpucount'):
raise error.TestNAError("This version of libvirt doesn't"
" support this test")
# Get the vm name, pid of vm and check for alive
vm_name = params.get("main_vm", "virt-tests-vm1")
vm = env.get_vm(vm_name)
#.........这里部分代码省略.........
示例11: run
def run(test, params, env):
"""
Test command: migrate-compcache <domain> [--size <number>]
1) Run migrate-compcache command and check return code.
"""
vm_ref = params.get("vm_ref", "name")
vm_name = params.get('main_vm')
start_vm = 'yes' == params.get('start_vm', 'yes')
pause_vm = 'yes' == params.get('pause_after_start_vm', 'no')
expect_succeed = 'yes' == params.get('expect_succeed', 'yes')
size_option = params.get('size_option', 'valid')
action = params.get('compcache_action', 'get')
vm = env.get_vm(vm_name)
# Check if the virsh command migrate-compcache is available
if not virsh.has_help_command('migrate-compcache'):
raise error.TestNAError("This version of libvirt does not support "
"virsh command migrate-compcache")
# Prepare the VM state if it's not correct.
if start_vm and not vm.is_alive():
vm.start()
elif not start_vm and vm.is_alive():
vm.destroy()
if pause_vm and not vm.is_paused():
vm.pause()
# Setup domain reference
if vm_ref == 'domname':
vm_ref = vm_name
# Setup size according to size_option:
# minimal: Same as memory page size
# maximal: Same as guest memory
# empty: An empty string
# small: One byte less than page size
# large: Larger than guest memory
# huge : Largest int64
page_size = get_page_size()
if size_option == 'minimal':
size = str(page_size)
elif size_option == 'maximal':
size = str(vm.get_max_mem() * 1024)
elif size_option == 'empty':
size = '""'
elif size_option == 'small':
size = str(page_size - 1)
elif size_option == 'large':
# Guest memory is larger than the max mem set,
# add 50MB to ensure size exceeds guest memory.
size = str(vm.get_max_mem() * 1024 + 50000000)
elif size_option == 'huge':
size = str(2 ** 64 - 1)
else:
size = size_option
# If we need to get, just omit the size option
if action == 'get':
size = None
# Run testing command
result = virsh.migrate_compcache(vm_ref, size=size)
logging.debug(result)
# Shut down the VM to make sure the compcache setting cleared
if vm.is_alive():
vm.destroy()
# Check test result
if expect_succeed:
if result.exit_status != 0:
raise error.TestFail(
'Expected succeed, but failed with result:\n%s' % result)
elif expect_succeed:
if result.exit_status == 0:
raise error.TestFail(
'Expected fail, but succeed with result:\n%s' % result)
示例12: run
def run(test, params, env):
"""
Test snapshot-create-as command
Make sure that the clean repo can be used because qemu-guest-agent need to
be installed in guest
The command create a snapshot (disk and RAM) from arguments which including
the following point
* virsh snapshot-create-as --print-xml --diskspec --name --description
* virsh snapshot-create-as --print-xml with multi --diskspec
* virsh snapshot-create-as --print-xml --memspec
* virsh snapshot-create-as --description
* virsh snapshot-create-as --no-metadata
* virsh snapshot-create-as --no-metadata --print-xml (negative test)
* virsh snapshot-create-as --atomic --disk-only
* virsh snapshot-create-as --quiesce --disk-only (positive and negative)
* virsh snapshot-create-as --reuse-external
* virsh snapshot-create-as --disk-only --diskspec
* virsh snapshot-create-as --memspec --reuse-external --atomic(negative)
* virsh snapshot-create-as --disk-only and --memspec (negative)
* Create multi snapshots with snapshot-create-as
* Create snapshot with name a--a a--a--snap1
"""
if not virsh.has_help_command('snapshot-create-as'):
raise error.TestNAError("This version of libvirt does not support "
"the snapshot-create-as test")
vm_name = params.get("main_vm")
status_error = params.get("status_error", "no")
options = params.get("snap_createas_opts")
multi_num = params.get("multi_num", "1")
diskspec_num = params.get("diskspec_num", "1")
bad_disk = params.get("bad_disk")
external_disk = params.get("external_disk")
start_ga = params.get("start_ga", "yes")
domain_state = params.get("domain_state")
memspec_opts = params.get("memspec_opts")
diskspec_opts = params.get("diskspec_opts")
opt_names = locals()
if memspec_opts is not None:
mem_options = compose_disk_options(test, params, memspec_opts)
# if the parameters have the disk without "file=" then we only need to
# add testdir for it.
if mem_options is None:
mem_options = os.path.join(test.virtdir, memspec_opts)
options += " --memspec " + mem_options
tag_diskspec = 0
dnum = int(diskspec_num)
if diskspec_opts is not None:
tag_diskspec = 1
opt_names['diskopts_1'] = diskspec_opts
# diskspec_opts[n] is used in cfg when more than 1 --diskspec is used
if dnum > 1:
tag_diskspec = 1
for i in range(1, dnum + 1):
opt_names["diskopts_%s" % i] = params.get("diskspec_opts%s" % i)
if tag_diskspec == 1:
for i in range(1, dnum + 1):
disk_options = compose_disk_options(test, params,
opt_names["diskopts_%s" % i])
options += " --diskspec " + disk_options
logging.debug("options are %s", options)
vm = env.get_vm(vm_name)
option_dict = {}
option_dict = utils_misc.valued_option_dict(options, r' --(?!-)')
logging.debug("option_dict is %s", option_dict)
# A backup of original vm
vmxml_backup = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
logging.debug("original xml is %s", vmxml_backup)
# Generate empty image for negative test
if bad_disk is not None:
bad_disk = os.path.join(test.virtdir, bad_disk)
os.open(bad_disk, os.O_RDWR | os.O_CREAT)
# Generate external disk
if external_disk is not None:
external_disk = os.path.join(test.virtdir, external_disk)
commands.getoutput("qemu-img create -f qcow2 %s 1G" % external_disk)
try:
# Start qemu-ga on guest if have --quiesce
if options.find("quiesce") >= 0:
if vm.is_alive():
vm.destroy()
virt_xml_obj = libvirt_xml.VMXML(virsh_instance=virsh)
virt_xml_obj.set_agent_channel(vm_name)
vm.start()
if start_ga == "yes":
session = vm.wait_for_login()
# Check if qemu-ga already started automatically
#.........这里部分代码省略.........
示例13: run
def run(test, params, env):
"""
Test send-key command, include all types of codeset and sysrq
For normal sendkey test, we create a file to check the command
execute by send-key. For sysrq test, check the /var/log/messages
in RHEL or /var/log/syslog in Ubuntu and guest status
"""
if not virsh.has_help_command('send-key'):
test.cancel("This version of libvirt does not support the send-key "
"test")
vm_name = params.get("main_vm", "avocado-vt-vm1")
status_error = ("yes" == params.get("status_error", "no"))
keystrokes = params.get("sendkey", "")
codeset = params.get("codeset", "")
holdtime = params.get("holdtime", "")
sysrq_test = ("yes" == params.get("sendkey_sysrq", "no"))
sleep_time = int(params.get("sendkey_sleeptime", 5))
readonly = params.get("readonly", False)
username = params.get("username")
password = params.get("password")
create_file = params.get("create_file_name")
uri = params.get("virsh_uri")
simultaneous = params.get("sendkey_simultaneous", "yes") == "yes"
unprivileged_user = params.get('unprivileged_user')
if unprivileged_user:
if unprivileged_user.count('EXAMPLE'):
unprivileged_user = 'testacl'
if not libvirt_version.version_compare(1, 1, 1):
if params.get('setup_libvirt_polkit') == 'yes':
test.cancel("API acl test not supported in current libvirt "
"version.")
def send_line(send_str):
"""
send string to guest with send-key and end with Enter
"""
for send_ch in list(send_str):
virsh.sendkey(vm_name, "KEY_%s" % send_ch.upper(),
ignore_status=False)
virsh.sendkey(vm_name, "KEY_ENTER",
ignore_status=False)
vm = env.get_vm(vm_name)
vm.wait_for_login().close()
# Boot the guest in text only mode so that send-key commands would succeed
# in creating a file
try:
utils_test.update_boot_option(vm, args_added="3")
except Exception as info:
test.error(info)
session = vm.wait_for_login()
if sysrq_test:
# In postprocess of previous testcase would pause and resume the VM
# that would change the domstate to running (unpaused) and cause
# sysrq reboot testcase to fail as the domstate persist across reboot
# so it is better to destroy and start VM before the test starts
if "KEY_B" in keystrokes:
cmd_result = virsh.domstate(vm_name, '--reason', ignore_status=True)
if "unpaused" in cmd_result.stdout.strip():
vm.destroy()
vm.start()
session = vm.wait_for_login()
LOG_FILE = "/var/log/messages"
if "ubuntu" in vm.get_distro().lower():
LOG_FILE = "/var/log/syslog"
# Is 'rsyslog' installed on guest? It'll be what writes out
# to LOG_FILE
if not utils_package.package_install("rsyslog", session):
test.fail("Fail to install rsyslog, make sure that you have "
"usable repo in guest")
# clear messages, restart rsyslog, and make sure it's running
session.cmd("echo '' > %s" % LOG_FILE)
session.cmd("service rsyslog restart")
ps_stat = session.cmd_status("ps aux |grep rsyslog")
if ps_stat != 0:
test.fail("rsyslog is not running in guest")
# enable sysrq
session.cmd("echo 1 > /proc/sys/kernel/sysrq")
# make sure the environment is clear
if create_file is not None:
session.cmd("rm -rf %s" % create_file)
try:
# wait for tty started
tty_stat = "ps aux|grep tty"
timeout = 60
while timeout >= 0 and \
session.get_command_status(tty_stat) != 0:
time.sleep(1)
timeout = timeout - 1
#.........这里部分代码省略.........
示例14: run
def run(test, params, env):
"""
Test the command virsh memtune
1) To get the current memtune parameters
2) Change the parameter values
3) Check the memtune query updated with the values
4) Check whether the mounted cgroup path gets the updated value
5) Check the output of virsh dumpxml
6) Check vm is alive
"""
# Check for memtune command is available in the libvirt version under test
if not virsh.has_help_command("memtune"):
test.cancel(
"Memtune not available in this libvirt version")
# Check if memtune options are supported
for option in memtune_types:
if not virsh.has_command_help_match("memtune", option):
test.cancel("%s option not available in memtune "
"cmd in this libvirt version" % option)
# Get common parameters
acceptable_minus = int(params.get("acceptable_minus", 8))
step_mem = params.get("mt_step_mem", "no") == "yes"
expect_error = params.get("expect_error", "no") == "yes"
restart_libvirtd = params.get("restart_libvirtd", "no") == "yes"
set_one_line = params.get("set_in_one_command", "no") == "yes"
mt_hard_limit = params.get("mt_hard_limit", None)
mt_soft_limit = params.get("mt_soft_limit", None)
mt_swap_hard_limit = params.get("mt_swap_hard_limit", None)
# if restart_libvirtd is True, set set_one_line is True
set_one_line = True if restart_libvirtd else set_one_line
# Get the vm name, pid of vm and check for alive
vm = env.get_vm(params["main_vm"])
vm.verify_alive()
pid = vm.get_pid()
# Resolve the memory cgroup path for a domain
path = utils_cgroup.resolve_task_cgroup_path(int(pid), "memory")
# step_mem is used to do step increment limit testing
if step_mem:
mem_step(params, path, vm, test, acceptable_minus)
return
if not set_one_line:
# Set one type memtune limit in one command
if mt_hard_limit:
index = 0
mt_limit = mt_hard_limit
elif mt_soft_limit:
index = 1
mt_limit = mt_soft_limit
elif mt_swap_hard_limit:
index = 2
mt_limit = mt_swap_hard_limit
mt_type = memtune_types[index]
mt_cgname = memtune_cgnames[index]
options = " --%s %s --live" % (mt_type, mt_limit)
result = virsh.memtune_set(vm.name, options, debug=True)
if expect_error:
fail_patts = [params.get("error_info")]
libvirt.check_result(result, fail_patts, [])
else:
# If limit value is negative, means no memtune limit
mt_expected = mt_limit if int(mt_limit) > 0 else -1
check_limit(path, mt_expected, mt_type, mt_cgname, vm, test,
acceptable_minus)
else:
# Set 3 limits in one command line
mt_limits = [mt_hard_limit, mt_soft_limit, mt_swap_hard_limit]
options = " %s --live" % ' '.join(mt_limits)
result = virsh.memtune_set(vm.name, options, debug=True)
if expect_error:
fail_patts = [params.get("error_info")]
libvirt.check_result(result, fail_patts, [])
else:
check_limits(path, mt_limits, vm, test, acceptable_minus)
if restart_libvirtd:
libvirtd = utils_libvirtd.Libvirtd()
libvirtd.restart()
if not expect_error:
# After libvirtd restared, check memtune values again
check_limits(path, mt_limits, vm, test, acceptable_minus)
示例15: run
def run(test, params, env):
"""
Test command: migrate-compcache <domain> [--size <number>]
1) Run migrate-compcache command and check return code.
"""
vm_ref = params.get("vm_ref", "name")
vm_name = params.get("migrate_main_vm")
start_vm = "yes" == params.get("start_vm", "yes")
pause_vm = "yes" == params.get("pause_after_start_vm", "no")
expect_succeed = "yes" == params.get("expect_succeed", "yes")
size_option = params.get("size_option", "valid")
action = params.get("compcache_action", "get")
vm = env.get_vm(vm_name)
# Check if the virsh command migrate-compcache is available
if not virsh.has_help_command("migrate-compcache"):
raise error.TestNAError("This version of libvirt does not support " "virsh command migrate-compcache")
# Prepare the VM state if it's not correct.
if start_vm and not vm.is_alive():
vm.start()
elif not start_vm and vm.is_alive():
vm.destroy()
if pause_vm and not vm.is_paused():
vm.pause()
# Setup domain reference
if vm_ref == "domname":
vm_ref = vm_name
# Setup size according to size_option:
# minimal: Same as memory page size
# maximal: Same as guest memory
# empty: An empty string
# small: One byte less than page size
# large: Larger than guest memory
# huge : Largest int64
page_size = get_page_size()
if size_option == "minimal":
size = str(page_size)
elif size_option == "maximal":
size = str(vm.get_max_mem() * 1024)
elif size_option == "empty":
size = '""'
elif size_option == "small":
size = str(page_size - 1)
elif size_option == "large":
# Guest memory is larger than the max mem set,
# add 50MB to ensure size exceeds guest memory.
size = str(vm.get_max_mem() * 1024 + 50000000)
elif size_option == "huge":
size = str(2 ** 64 - 1)
else:
size = size_option
# If we need to get, just omit the size option
if action == "get":
size = None
# Run testing command
result = virsh.migrate_compcache(vm_ref, size=size)
logging.debug(result)
remote_uri = params.get("compcache_remote_uri")
remote_host = params.get("migrate_dest_host")
remote_user = params.get("migrate_dest_user", "root")
remote_pwd = params.get("migrate_dest_pwd")
check_job_compcache = False
compressed_size = None
if not remote_host.count("EXAMPLE") and size is not None and expect_succeed:
# Config ssh autologin for remote host
ssh_key.setup_ssh_key(remote_host, remote_user, remote_pwd, port=22)
if vm.is_dead():
vm.start()
if vm.is_paused():
vm.resume()
vm.wait_for_login()
# Do actual migration to verify compression cache of migrate jobs
command = "virsh migrate %s %s --compressed --unsafe --verbose" % (vm_name, remote_uri)
logging.debug("Start migrating: %s", command)
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Give enough time for starting job
t = 0
while t < 5:
jobinfo = virsh.domjobinfo(vm_ref, debug=True, ignore_status=True).stdout
jobtype = "None"
for line in jobinfo.splitlines():
key = line.split(":")[0]
if key.count("type"):
jobtype = line.split(":")[-1].strip()
elif key.strip() == "Compression cache":
compressed_size = line.split(":")[-1].strip()
if "None" == jobtype or compressed_size is None:
t += 1
time.sleep(1)
continue
else:
check_job_compcache = True
#.........这里部分代码省略.........