I added support for 'uri' parameter and moved some functions into util/Python/utils.py in order not to lose them from the code and keep them accessible for other tests. --- repos/domain/define.py | 132 ++++++++---------------------------------------- utils/Python/utils.py | 45 ++++++++++++++++- 2 files changed, 65 insertions(+), 112 deletions(-) diff --git a/repos/domain/define.py b/repos/domain/define.py index 8f0095a..25630c5 100644 --- a/repos/domain/define.py +++ b/repos/domain/define.py @@ -19,7 +19,7 @@ __author__ = 'Alex Jia: ajia@xxxxxxxxxx' __date__ = 'Mon Jan 28, 2010' __version__ = '0.1.0' -__credits__ = 'Copyright (C) 2009 Red Hat, Inc.' +__credits__ = 'Copyright (C) 2009, 2012 Red Hat, Inc.' __all__ = ['usage', 'check_define_domain', 'define'] import os @@ -63,9 +63,6 @@ def usage(): macaddr ifacetype source - target_machine - username - password ''' def check_params(params): @@ -107,58 +104,17 @@ def ssh_keygen(logger): return 0 -def ssh_tunnel(hostname, username, password, logger): - """setup a tunnel to a give host""" - logger.info("setup ssh tunnel with host %s" % hostname) - user_host = "%s@%s" % (username, hostname) - child = pexpect.spawn(SSH_COPY_ID, [ user_host]) - while True: - index = child.expect(['yes\/no', 'password: ', - pexpect.EOF, - pexpect.TIMEOUT]) - if index == 0: - child.sendline("yes") - elif index == 1: - child.sendline(password) - elif index == 2: - logger.debug(string.strip(child.before)) - child.close() - return 0 - elif index == 3: - logger.error("setup tunnel timeout") - logger.debug(string.strip(child.before)) - child.close() - return 1 - - return 0 - -def check_define_domain(guestname, guesttype, target_machine, username, \ - password, util, logger): - """Check define domain result, if define domain is successful, - guestname.xml will exist under /etc/libvirt/qemu/ - and can use virt-xml-validate tool to check the file validity +def check_define_domain(conn, guestname, logger): + """Check define domain result. To make this work on all + hypervisors and with all configuration posibilities, use the + default way through libvirt to check if the guest was defined """ - if "kvm" in guesttype: - path = "/etc/libvirt/qemu/%s.xml" % guestname - elif "xen" in guesttype: - path = "/etc/xen/%s" % guestname - else: - logger.error("unknown guest type") - - if target_machine: - cmd = "ls %s" % path - ret, output = util.remote_exec_pexpect(target_machine, username, \ - password, cmd) - if ret: - logger.error("guest %s xml file doesn't exsits" % guestname) - return False - else: - return True - else: - if os.access(path, os.R_OK): - return True - else: - return False + try: + conn.lookupByName(guestname + 'asdf') + return True + except libvirtError, e: + logger.error(e.message()) + return False def define(params): """Define a domain from xml""" @@ -169,41 +125,10 @@ def define(params): logger = params['logger'] guestname = params['guestname'] guesttype = params['guesttype'] + uri = params['uri'] test_result = False - if params.has_key('target_machine'): - logger.info("define domain on remote host") - target_machine = params['target_machine'] - username = params['username'] - password = params['password'] - else: - logger.info("define domain on local host") - target_machine = None - username = None - password = None - # Connect to hypervisor connection URI - util = utils.Utils() - if target_machine: - uri = util.get_uri(target_machine) - - #generate ssh key pair - ret = ssh_keygen(logger) - if ret: - logger.error("failed to generate RSA key") - return 1 - #setup ssh tunnel with target machine - ret = ssh_tunnel(target_machine, username, password, logger) - if ret: - logger.error("faild to setup ssh tunnel with target machine %s" % \ - target_machine) - return 1 - - commands.getstatusoutput("ssh-add") - - else: - uri = util.get_uri('127.0.0.1') - conn = connectAPI.ConnectAPI() virconn = conn.open(uri) @@ -222,35 +147,20 @@ def define(params): # Define domain from xml try: - try: - dom_obj.define(dom_xml) - if check_define_domain(guestname, guesttype, target_machine, \ - username, password, util, logger): - logger.info("define a domain form xml is successful") - test_result = True - else: - logger.error("fail to check define domain") - test_result = False - except LibvirtAPI, e: - logger.error("fail to define a domain from xml") + dom_obj.define(dom_xml) + if check_define_domain(virconn, guestname, logger): + logger.info("define a domain form xml is successful") + test_result = True + else: + logger.error("failed to check define domain") test_result = False + except LibvirtAPI, e: + logger.error("failed to define a domain from xml") + test_result = False finally: conn.close() logger.info("closed hypervisor connection") - if target_machine: - REMOVE_SSH = "ssh %s \"rm -rf /root/.ssh/*\"" % (target_machine) - logger.info("remove ssh key on remote machine") - status, ret = util.exec_cmd(REMOVE_SSH, shell=True) - if status: - logger.error("failed to remove ssh key") - - REMOVE_LOCAL_SSH = "rm -rf /root/.ssh/*" - logger.info("remove local ssh key") - status, ret = util.exec_cmd(REMOVE_LOCAL_SSH, shell=True) - if status: - logger.error("failed to remove local ssh key") - if test_result: return 0 else: diff --git a/utils/Python/utils.py b/utils/Python/utils.py index 55c1cb5..7382abb 100644 --- a/utils/Python/utils.py +++ b/utils/Python/utils.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# libvirt-test-API is copyright 2010 Red Hat, Inc. +# libvirt-test-API is copyright 2010, 2012 Red Hat, Inc. # # libvirt-test-API is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -433,3 +433,46 @@ class Utils(object): return 1 return 0 + + + def ssh_keygen(logger): + """using pexpect to generate RSA""" + SSH_KEYGEN = "ssh-keygen -t rsa" + SSH_COPY_ID = "ssh-copy-id" + + logger.info("generate ssh RSA \"%s\"" % SSH_KEYGEN) + child = pexpect.spawn(SSH_KEYGEN) + while True: + index = child.expect(['Enter file in which to save the key ', + 'Enter passphrase ', + 'Enter same passphrase again: ', + pexpect.EOF, + pexpect.TIMEOUT]) + if index == 0: + child.sendline("\r") + elif index == 1: + child.sendline("\r") + elif index == 2: + child.sendline("\r") + elif index == 3: + logger.debug(string.strip(child.before)) + child.close() + return 0 + elif index == 4: + logger.error("ssh_keygen timeout") + logger.debug(string.strip(child.before)) + child.close() + return 1 + + return 0 + + def ssh_remove_keys(host, logger): + """remove ssh keys on remote machine""" + REMOVE_SSH = "ssh %s \"rm -rf /root/.ssh/*\"" % (target_machine) + logger.info("remove ssh key on remote machine") + ret, dummy = self.exec_cmd(REMOVE_SSH) + if ret: + logger.error("failed to remove ssh key") + return 1 + + return 0 -- 1.7.3.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list