--- repos/remoteAccess/tcp_setup.py | 242 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 242 insertions(+), 0 deletions(-) create mode 100644 repos/remoteAccess/tcp_setup.py diff --git a/repos/remoteAccess/tcp_setup.py b/repos/remoteAccess/tcp_setup.py new file mode 100644 index 0000000..8f88810 --- /dev/null +++ b/repos/remoteAccess/tcp_setup.py @@ -0,0 +1,242 @@ +#!/usr/bin/env python +""" Configure and test libvirt tcp connection + remoteAccess:tcp_setup + target_machine + xx.xx.xx.xx + username + root + password + xxxxxx + listen_tcp + enable|disable + auth_tcp + none|sasl +""" + +__author__ = 'Guannan Ren: gren@xxxxxxxxxx' +__date__ = 'Sun Aug 7, 2011' +__version__ = '0.1.0' +__credits__ = 'Copyright (C) 2011 Red Hat, Inc.' +__all__ = ['tcp_setup', 'tcp_libvirtd_set', 'hypervisor_connecting_test'] + +import os +import re +import sys + +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 utils.Python import utils +from exception import LibvirtAPI + +SASLPASSWD2 = "/usr/sbin/saslpasswd2" +LIBVIRTD_CONF = "/etc/libvirt/libvirtd.conf" +SYSCONFIG_LIBVIRTD = "/etc/sysconfig/libvirtd" + +def check_params(params): + """check out the arguments requried for this testcases""" + logger = params['logger'] + keys = ['target_machine', 'username', 'password', 'listen_tcp', 'auth_tcp'] + for key in keys: + if key not in params: + logger.error("Argument %s is required" % key) + return 1 + return 0 + +def sasl_user_add(target_machine, username, password, util, logger): + """ execute saslpasswd2 to add sasl user """ + logger.info("add sasl user on server side") + saslpasswd2_add = "echo %s | %s -a libvirt %s" % (password, SASLPASSWD2, username) + ret = util.remote_exec_pexpect(target_machine, username, + password, saslpasswd2_add) + if ret: + logger.error("failed to add sasl user") + return 1 + + return 0 + +def tcp_libvirtd_set(target_machine, username, password, + listen_tcp, auth_tcp, util, logger): + """ configure libvirtd.conf on libvirt server """ + logger.info("setting libvirtd.conf on libvirt server") + # open libvirtd --listen option + listen_open_cmd = "echo 'LIBVIRTD_ARGS=\"--listen\"' >> %s" % SYSCONFIG_LIBVIRTD + ret = util.remote_exec_pexpect(target_machine, username, + password, listen_open_cmd) + if ret: + logger.error("failed to uncomment --listen in %s" % SYSCONFIG_LIBVIRTD) + return 1 + + # set listen_tls + logger.info("set listen_tls to 0 in %s" % LIBVIRTD_CONF) + listen_tls_disable = "echo \"listen_tls = 0\" >> %s" % LIBVIRTD_CONF + ret = util.remote_exec_pexpect(target_machine, username, + password, listen_tls_disable) + if ret: + logger.error("failed to set listen_tls to 0 in %s" % LIBVIRTD_CONF) + return 1 + + # set listen_tcp + if listen_tcp == 'enable': + logger.info("enable listen_tcp = 1 in %s" % LIBVIRTD_CONF) + listen_tcp_set = "echo 'listen_tcp = 1' >> %s" % LIBVIRTD_CONF + ret = util.remote_exec_pexpect(target_machine, username, + password, listen_tcp_set) + if ret: + logger.error("failed to set listen_tcp in %s" % LIBVIRTD_CONF) + return 1 + + # set auth_tcp + logger.info("set auth_tcp to \"%s\" in %s" % (auth_tcp, LIBVIRTD_CONF)) + auth_tcp_set = "echo 'auth_tcp = \"%s\"' >> %s" % (auth_tcp, LIBVIRTD_CONF) + ret = util.remote_exec_pexpect(target_machine, username, + password, auth_tcp_set) + if ret: + logger.error("failed to set auth_tcp in %s" % LIBVIRTD_CONF) + return 1 + + # restart remote libvirtd service + libvirtd_restart_cmd = "service libvirtd restart" + logger.info("libvirtd restart") + ret = util.remote_exec_pexpect(target_machine, username, + password, libvirtd_restart_cmd) + if ret: + logger.error("failed to restart libvirtd service") + return 1 + + logger.info("done to libvirtd configuration") + return 0 + +def request_credentials(credentials, user_data): + for credential in credentials: + if credential[0] == connectAPI.VIR_CRED_AUTHNAME: + credential[4] = user_data[0] + + if len(credential[4]) == 0: + credential[4] = credential[3] + elif credential[0] == connectAPI.VIR_CRED_PASSPHRASE: + credential[4] = user_data[1] + else: + return -1 + + return 0 + +def hypervisor_connecting_test(uri, auth_tcp, username, + password, logger, expected_result): + """ connect remote server """ + ret = 1 + try: + conn = connectAPI.ConnectAPI() + if auth_tcp == 'none': + virconn = conn.open(uri) + elif auth_tcp == 'sasl': + user_data = [username, password] + auth = [[connectAPI.VIR_CRED_AUTHNAME, connectAPI.VIR_CRED_PASSPHRASE], request_credentials, user_data] + virconn = conn.openAuth(uri, auth, 0) + + ret = 0 + conn.close() + except LibvirtAPI, e: + logger.error("API error message: %s, error code is %s" % \ + (e.response()['message'], e.response()['code'])) + + ret = 1 + conn.close() + + if ret == 0 and expected_result == 'success': + logger.info("tcp connnection success") + return 0 + elif ret == 1 and expected_result == 'fail': + logger.info("tcp connection failed, but that is expected") + return 0 + elif ret == 0 and expected_result == 'fail': + logger.error("tcp connection success, but we hope the reverse") + return 1 + elif ret == 1 and expected_result == 'success': + logger.error("tcp connection failed") + return 1 + + return 0 + +def tcp_setup(params): + """ configure libvirt and connect to it through TCP socket""" + logger = params['logger'] + params_check_result = check_params(params) + if params_check_result: + return 1 + + target_machine = params['target_machine'] + username = params['username'] + password = params['password'] + listen_tcp = params['listen_tcp'] + auth_tcp = params['auth_tcp'] + + uri = "qemu+tcp://%s/system" % target_machine + + util = utils.Utils() + + logger.info("the hostname of server is %s" % target_machine) + logger.info("the value of listen_tcp is %s" % listen_tcp) + logger.info("the value of auth_tcp is %s" % auth_tcp) + + if not util.do_ping(target_machine, 0): + logger.error("failed to ping host %s" % target_machine) + return 1 + + if auth_tcp == 'sasl': + if sasl_user_add(target_machine, username, password, util, logger): + return 1 + + if tcp_libvirtd_set(target_machine, username, password, + listen_tcp, auth_tcp, util, logger): + return 1 + + if listen_tcp == 'disable': + if hypervisor_connecting_test(uri, auth_tcp, username, + password, logger, 'fail'): + return 1 + elif listen_tcp == 'enable': + if hypervisor_connecting_test(uri, auth_tcp, username, + password, logger, 'success'): + return 1 + + return 0 + +def tcp_setup_clean(params): + """cleanup testing environment""" + + logger = params['logger'] + target_machine = params['target_machine'] + username = params['username'] + password = params['password'] + listen_tcp = params['listen_tcp'] + auth_tcp = params['auth_tcp'] + + util = utils.Utils() + + if auth_tcp == 'sasl': + saslpasswd2_delete = "%s -a libvirt -d %s" % (SASLPASSWD2, username) + ret = util.remote_exec_pexpect(target_machine, username, + password, saslpasswd2_delete) + if ret: + logger.error("failed to delete sasl user") + libvirtd_conf_retore = "sed -i -n '/^[ #]/p' %s" % LIBVIRTD_CONF + ret = util.remote_exec_pexpect(target_machine, username, + password, libvirtd_conf_retore) + if ret: + logger.error("failed to restore %s" % LIBVIRTD_CONF) + + sysconfig_libvirtd_restore = "sed -i -n '/^[ #]/p' %s" % SYSCONFIG_LIBVIRTD + ret = util.remote_exec_pexpect(target_machine, username, + password, sysconfig_libvirtd_restore) + if ret: + logger.error("failed to restore %s" % SYSCONFIG_LIBVIRTD) -- 1.7.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list