* repos/domain/get_cpu_shares.py: get the value of cpu_shares property of the guest. --- lib/domainAPI.py | 2 +- repos/domain/get_cpu_shares.py | 117 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletions(-) create mode 100644 repos/domain/get_cpu_shares.py diff --git a/lib/domainAPI.py b/lib/domainAPI.py index a6efab7..0058254 100644 --- a/lib/domainAPI.py +++ b/lib/domainAPI.py @@ -546,7 +546,7 @@ class DomainAPI(object): def set_sched_params_flags(self, domname, params, flags): try: dom_obj = self.get_domain_by_name(domname) - retval = dom_obj.setSchedulerParameters(params, flags) + retval = dom_obj.setSchedulerParametersFlags(params, flags) return retval except libvirt.libvirtError, e: message = e.get_error_message() diff --git a/repos/domain/get_cpu_shares.py b/repos/domain/get_cpu_shares.py new file mode 100644 index 0000000..5d26e82 --- /dev/null +++ b/repos/domain/get_cpu_shares.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +"""Get the value of cpu_shares property of the guest + domain:get_cpu_shares + guestname + xxx + flags + current|live|config +""" + +__author__ = 'Nan Zhang: nzhang@xxxxxxxxxx' +__date__ = 'Tue Sep 27, 2011' +__version__ = '0.1.0' +__credits__ = 'Copyright (C) 2011 Red Hat, Inc.' +__all__ = ['check_params', 'check_cpu_shares', 'get_cpu_shares'] + +import os +import re +import sys +import time +from xml.dom import minidom + + +def append_path(path): + """Append root path of package""" + if path in sys.path: + pass + else: + sys.path.append(path) + +pwd = os.getcwd() +result = re.search('(.*)libvirt-test-API', pwd) +append_path(result.group(0)) + +from lib import connectAPI +from lib import domainAPI +from utils.Python import utils +from utils.Python import xmlbuilder +from exception import LibvirtAPI + +def check_params(params): + """Verify inputing parameter dictionary""" + logger = params['logger'] + keys = ['guestname', 'flags'] + for key in keys: + if key not in params: + logger.error("%s is required" %key) + return 1 + return 0 + +def check_cpu_shares(params, util, guestname, cpu_shares, flags): + """Check the value of cpu_shares""" + logger = params['logger'] + cmd = "cat /cgroup/cpu/libvirt/qemu/%s/cpu.shares" % guestname + ret, out = util.exec_cmd(cmd, shell=True) + if ret: + logger.error("fail to get the value of cpu_shares: %s" % out[0]) + else: + logger.info("from cgroup, the value of cpu_shares: %s" % out[0]) + + if flags == domainAPI.VIR_DOMAIN_AFFECT_CONFIG: + return 0 + + if cmp(int(out[0]), cpu_shares): + return 1 + else: + logger.info("the value of cpu_shares does match the original \ +cpu scheduler information.") + return 0 + +def get_cpu_shares(params): + """Get the cpu scheduler information""" + # Initiate and check parameters + params_check_result = check_params(params) + if params_check_result: + return 1 + logger = params['logger'] + guestname = params['guestname'] + + if params['flags'] == 'current': + flags = domainAPI.VIR_DOMAIN_AFFECT_CURRENT + elif params['flags'] == 'live': + flags = domainAPI.VIR_DOMAIN_AFFECT_LIVE + elif params['flags'] == 'config': + flags = domainAPI.VIR_DOMAIN_AFFECT_CONFIG + else: + logger.error("Invalid flag was specified.") + return 1 + + # Connect to local hypervisor connection URI + util = utils.Utils() + uri = util.get_uri('127.0.0.1') + conn = connectAPI.ConnectAPI() + virconn = conn.open(uri) + + domobj = domainAPI.DomainAPI(virconn) + try: + sched_info = domobj.get_sched_params_flags(guestname, flags) + cpu_shares = sched_info['cpu_shares'] + logger.debug("the value of cpu_shares is %s" % cpu_shares) + except LibvirtAPI, e: + logger.error("API error message: %s, error code is %s" % + (e.response()['message'], e.response()['code'])) + return 1 + + check_result = check_cpu_shares(params, util, guestname, cpu_shares, flags) + if check_result: + logger.error("cpu_shares does not match.") + conn.close() + return 1 + + logger.info("success to get scheduler parameters.") + conn.close() + return 0 + +def get_cpu_shares_clean(): + """Clean testing environment""" + pass -- 1.7.4.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list