+from XenKvmLib.const import do_main, get_provider_version
+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
This test doesn't include these functions, no need to import them.
+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.
+
+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
You don't use the guest param for anything else, so you can just do:
if kvmrsap.SystemName == guest_name
+
+ if guest == guest_name:
+ kvmrsap_inst = kvmrsap
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.
+
+ return kvmrsap_inst, PASS
+
+def init_kvmrsap_list(virt, ip, guest_name):
This function isn't being used. It should be removed.
+ kvmrsap_insts = {}
+
+ kvmrsaps, status = enum_kvmrsaps(virt, ip)
+ if status != PASS:
+ logger.error("Enum KVMRSAPs failed")
+ return kvmrsap_insts, status
+
+ for kvmrsap_cn, kvmrsap_list in kvmrsaps.iteritems():
+ for kvmrsap in kvmrsap_list:
+ guest = kvmrsap.SystemName
+
+ if guest == guest_name:
+ kvmrsap_insts[kvmrsap.Classname] = kvmrsap
+
+ return kvmrsap_insts, PASS
+
+def verify_kvmrsap(enum_list, kvmrsap_inst):
+ status = FAIL
+
+ for item in enum_list:
Also, you need to verify that enum_list has the proper number of
KVMRedirectionSAP instances. Since you are not connecting to the
guest's console, there should only be one instance.
Because of this, the loop isn't needed here.
+ if item.classname != kvmrsap_inst.Classname:
+ print "Returned class name (%s) is not correct", item.classname
+ return status
+
+ guest = item.keybindings['SystemName']
+
+ print "Iteration guest name: ", guest
+ print "Iteration host name: ", item.host
Remove print statements.
+
+ if guest == kvmrsap_inst.SystemName:
+ 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