+from XenKvmLib.const import do_main, get_provider_version
You don't use get_provider_version, however - you probably should (and
on the other HAP test as well). Because these tests won't work with
older versions of the providers.
+from XenKvmLib.rasd import enum_rasds
+from XenKvmLib.common_util import parse_instance_id
+from XenKvmLib.vsms import enumerate_instances
+from XenKvmLib.test_doms import virdomid_list
These aren't used; they should be removed.
+from XenKvmLib.common_util import get_host_info
+from XenKvmLib.enumclass import EnumInstances
+
+sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
+
+test_dom = "domu1"
+
+def setup_env(server, virt):
+ if virt == 'Xen':
+ test_disk = 'xvda'
+ else:
+ test_disk = 'hda'
+ virt_xml = get_class(virt)
+ if virt == 'LXC':
+ cxml = virt_xml(test_dom)
+ else:
+ cxml = virt_xml(test_dom, disk = test_disk)
+
+ ret = cxml.cim_define(server)
+ if not ret:
+ logger.error("Failed to Create the dom: %s", test_dom)
This should be "define" instead of "create" - there's a slight
difference between libvirt's notion of define and create, so it'd be
good to use "define" here.
+ return FAIL, cmxl
This should be cxml, not cmxl.
+
+ status = cxml.cim_start(server)
+ if status != PASS:
+ logger.error("Unable start dom '%s'", test_dom)
+ cxml.undefine(server)
+ return status, cxml
+
+ return PASS, cxml
+
+def enum_kvmrsaps(virt, ip):
+ kvmrsap_insts = {}
+
+ try:
+ kvmrsap_cn = get_typed_class(virt, 'KVMRedirectionSAP')
+ enum_list = EnumInstances(ip, kvmrsap_cn)
+
+ if enum_list < 1:
+ logger.error("No KVM Redirection SAP instances returned")
+ return kvmrsap_insts, FAIL
+
+ for kvmrsap in enum_list:
+ if kvmrsap.Classname not in kvmrsap_insts.keys():
+ kvmrsap_insts[kvmrsap.Classname] = []
+ kvmrsap_insts[kvmrsap.Classname].append(kvmrsap)
All of the instances returned by EnunmInstances will have the same
classname. There's no need to build a dictionary.
This function isn't really necessary. Just call the EnumInstances()
call in get_kvmrsap_inst(). Then loop through the list returned by
EnumInstances() to kind the instance that corresponds to your guest.
+
+ except Exception, details:
+ logger.error(details)
+ return kvmrsap_insts, FAIL
+
+ return kvmrsap_insts, PASS
+
+def get_kvmrsap_inst(virt, ip, guest_name):
+ kvmrsap_inst = None
+
+ kvmrsaps, status = enum_kvmrsaps(virt, ip)
+ if status != PASS:
+ logger.error("Get KVMRSAPs failed")
+ return kvmrsap_inst, status
+
+ for kvmrsap_cn, kvmrsap_list in kvmrsaps.iteritems():
+ for kvmrsap in kvmrsap_list:
+ guest = kvmrsap.SystemName
+
+ if guest == guest_name:
+ kvmrsap_inst = kvmrsap
You don't use the guest param for anything else, so you can just do:
if kvmrsap.SystemName == guest_name
+
+ return kvmrsap_inst, PASS
You want to make sure the expected number of KVMRedirectionSAPs are
returned before returning from the function. If kvmrsap_inst is None,
return an error.
+
+def verify_host(enum_list, host_inst):
+ status = FAIL
+
+ for item in enum_list:
+ if item.classname != host_inst.Classname:
+ print "Returned class name (%s) is not correct", item.classname
+ return status
+
+ host = item.keybindings['Name']
+
+ print "Iteration host name: ", host_inst.Name
Remove print statement.
+
+ if host == host_inst.Name:
+ status = PASS
+ break
This function should verify all the properties of the instance. Take a
look at compare_all_prop() for this.
+
+ return status
+
+
+@do_main(sup_types)
+def main():
+ options = main.options
+ status = FAIL
+ server = options.ip
+ virt = options.virt
+
+ status, cxml = setup_env(options.ip, options.virt)
+ if status != PASS:
+ cxml.undefine(options.ip)
+ return status
+
+ try:
+ status, host_inst = get_host_info(server, virt)
+ if status != PASS:
+ raise Exception("Failed to get host info.")
+
+ kvmrsap_inst, status = get_kvmrsap_inst(options.virt, options.ip, test_dom)
This line needs to be 80 characters.
+ if status != PASS:
+ raise Exception("Unable to fetch kvmrsap instance (domain: %s)",
test_dom)
This line needs to be 80 characters. Also, the format for Exception is
to use a % for args, not a comma:
raise Exception("Unable to fetch kvmrsap instance (domain: %s)" % test_dom)
--
Kaitlin Rupert
IBM Linux Technology Center
kaitlin(a)linux.vnet.ibm.com