def ssh_pexpect(cls, username, node, onos_ip, command): cmd = 'ssh %s %s@%s' % (cls.ssh_options(), username, node) try: LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn = pexpect.spawn(cmd) rt1 = ssh_conn.expect(['#', '\$', pexpect.EOF], timeout=CONF.ssh_conn()['ssh_req_timeout']) if rt1 == 0: cmd = 'ssh -p 8101 karaf@' + onos_ip + ' ' + command LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn.sendline(cmd) rt2 = ssh_conn.expect( ['Password:'******'ssh_req_timeout']) if rt2 == 0: ssh_conn.sendline('karaf') ssh_conn.expect(['#', '\$', pexpect.EOF], timeout=CONF.ssh_conn()['ssh_req_timeout']) str_output = str(ssh_conn.before) ret = '' for line in str_output.splitlines(): if (line.strip() == '') or ('#' in line) or ( '$' in line) or ('~' in line) or ('@' in line): continue ret = ret + line + '\n' return ret else: return "fail" elif rt1 == 1: LOG.error('%s', ssh_conn.before) elif rt1 == 2: LOG.error("[ssh_pexpect] connection timeout") return "fail" except: LOG.exception() return "fail"
class SshCommand: ssh_options = '-o StrictHostKeyChecking=no ' \ '-o ConnectTimeout=' + str(CONF.ssh_conn()['ssh_req_timeout']) @classmethod def ssh_exec(cls, username, node, command): cmd = 'ssh %s %s@%s %s' % (cls.ssh_options, username, node, command) try: result = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) output, error = result.communicate() if result.returncode != 0: LOG.error("\'%s\' SSH_Cmd Fail, cause => %s", node, error) return else: # LOG.info("ssh command execute successful \n%s", output) return output except: LOG.exception() @classmethod def onos_ssh_exec(cls, node, command): local_ssh_options = cls.ssh_options + " -p 8101" cmd = 'ssh %s %s %s' % (local_ssh_options, node, command) try: result = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) output, error = result.communicate() if result.returncode != 0: LOG.error("ONOS(%s) SSH_Cmd Fail, cause => %s", node, error) return else: # LOG.info("ONOS ssh command execute successful \n%s", output) return output except: LOG.exception()
def run_test(sona_topology, test_json, timeout_arr, index, total_timeout): try: node = test_json['node'] ins_id = test_json['instance_id'] user = test_json['vm_user_id'] pw = test_json['vm_user_password'] command = test_json['traffic_test_command'] ip = sona_topology.get_openstack_info(node, 'ip') if ip == '': str_output = node + ' node does not exist' else: node_id = CONF.openstack()['account'].split(':')[0] ssh_options = '-o StrictHostKeyChecking=no ' \ '-o ConnectTimeout=' + str(CONF.ssh_conn()['ssh_req_timeout']) cmd = 'ssh %s %s@%s' % (ssh_options, node_id, ip) try: LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn = pexpect.spawn(cmd) rt1 = ssh_conn.expect( PROMPT, timeout=CONF.ssh_conn()['ssh_req_timeout']) if rt1 == 0: cmd = 'virsh console ' + ins_id LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn.sendline(cmd) rt2 = ssh_conn.expect( [ pexpect.TIMEOUT, 'Escape character is', 'error:', pexpect.EOF ], timeout=CONF.ssh_conn()['ssh_req_timeout']) if rt2 == 0: str_output = cmd + ' timeout' elif rt2 == 1: ssh_conn.sendline('\n') try: rt3 = ssh_conn.expect( ['login: '******'ssh_req_timeout']) LOG.info('rt3 = ' + str(rt3)) if rt3 == 2: str_output = 'Permission denied' else: ssh_conn.sendline(user) rt_pw = ssh_conn.expect( [ pexpect.TIMEOUT, '[P|p]assword:', pexpect.EOF ], timeout=CONF.ssh_conn()['ssh_req_timeout']) if rt_pw == 1: ssh_conn.sendline(pw) rt4 = ssh_conn.expect( [ pexpect.TIMEOUT, 'Login incorrect', '~# ', 'onos> ', '\$ ', '\# ', ':~$ ' ], timeout=CONF.ssh_conn() ['ssh_req_timeout']) LOG.info('rt4 = ' + str(rt4)) if rt4 == 0 or rt4 == 1: str_output = 'auth fail' else: ssh_conn.sendline(command) rt5 = ssh_conn.expect( [ pexpect.TIMEOUT, '~# ', 'onos> ', '\$ ', '\# ', ':~$ ' ], timeout=total_timeout) if rt5 == 0: str_output = 'timeout' ssh_conn.sendline('exit') ssh_conn.close() else: str_output = ssh_conn.before ssh_conn.sendline('exit') ssh_conn.close() else: str_output = 'auth fail' except: str_output = 'exception' ssh_conn.sendline('exit') ssh_conn.close() elif rt2 == 2: result = {'command_result': 'virsh console error'} timeout_arr[index] = result return else: str_output = 'connection fail' except: LOG.exception() str_output = 'exception 1' except: LOG.exception() str_output = 'exception 2' result = { 'command_result': str_output.replace('\r\n', '\n'), 'node': node, 'instance_id': ins_id } timeout_arr[index] = result
def ssh_options(cls): return '-o StrictHostKeyChecking=no ' \ '-o ConnectTimeout=' + str(CONF.ssh_conn()['ssh_req_timeout'])
class SshCommand: ssh_options = '-o StrictHostKeyChecking=no ' \ '-o ConnectTimeout=' + str(CONF.ssh_conn()['ssh_req_timeout']) @classmethod def ssh_exec(cls, username, node_ip, command): cmd = 'ssh %s %s@%s %s' % (cls.ssh_options, username, node_ip, command) LOG.info("SB SSH CMD] cmd = %s", cmd) try: result = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) output, error = result.communicate() if result.returncode != 0: LOG.error("\'%s\' SSH_Cmd Fail, cause => %s", node_ip, error) return else: # LOG.info("ssh command execute successful \n%s", output) return output except: LOG.exception() @classmethod def ssh_tperf_exec(cls, keypair, username, node_ip, command, timeout): ssh_options = '-o StrictHostKeyChecking=no ' \ '-o ConnectTimeout=' + str(timeout) if not os.path.exists(keypair): LOG.error('[SSH Fail] keypaire file not exist. ---') return 'fail' cmd = 'ssh %s -i %s %s@%s %s' % (ssh_options, keypair, username, node_ip, command) LOG.info("[SB SSH CMD] cmd = %s", cmd) try: result = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) (output, error) = result.communicate() if result.returncode != 0: LOG.error("\'%s\' SSH_Cmd Fail, cause(%d) => %s", node_ip, result.returncode, str(error)) return 'fail' else: LOG.info("ssh command execute successful \n >> [%s]", output) return output except: LOG.exception() pass @classmethod def onos_ssh_exec(cls, node_ip, command): local_ssh_options = cls.ssh_options + " -p 8101" cmd = 'ssh %s %s %s' % (local_ssh_options, node_ip, command) LOG.info("SB SSH CMD] cmd = %s", cmd) try: result = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) output, error = result.communicate() if result.returncode != 0: LOG.error("ONOS(%s) SSH_Cmd Fail, cause => %s", node_ip, error) return else: # LOG.info("ONOS ssh command execute successful \n%s", output) return output except: LOG.exception() @classmethod def ssh_pexpect(cls, username, node_ip, onos_ip, command): cmd = 'ssh %s %s@%s' % (cls.ssh_options, username, node_ip) LOG.info("SB SSH CMD] cmd = %s", cmd) try: LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn = pexpect.spawn(cmd) rt1 = ssh_conn.expect(['#', '\$', pexpect.EOF], timeout=CONF.ssh_conn()['ssh_req_timeout']) if rt1 == 0: cmd = 'ssh -p 8101 karaf@' + onos_ip + ' ' + command LOG.info('ssh_pexpect cmd = ' + cmd) ssh_conn.sendline(cmd) rt2 = ssh_conn.expect(['Password:'******'ssh_req_timeout']) if rt2 == 0: ssh_conn.sendline('karaf') ssh_conn.expect(['#', '\$', pexpect.EOF], timeout=CONF.ssh_conn()['ssh_req_timeout']) str_output = str(ssh_conn.before) ret = '' for line in str_output.splitlines(): if (line.strip() == '') or ('#' in line) or ('$' in line) or ('~' in line) or ('@' in line): continue ret = ret + line + '\n' return ret else: return "fail" elif rt1 == 1: LOG.error('%s', ssh_conn.before) elif rt1 == 2: LOG.error("[ssh_pexpect] connection timeout") return "fail" except: LOG.exception() return "fail"