Use paramiko library to SSH and SCP the instances in vPing2
authorjose.lausuch <jose.lausuch@ericsson.com>
Fri, 22 Jan 2016 16:19:35 +0000 (17:19 +0100)
committerjose.lausuch <jose.lausuch@ericsson.com>
Tue, 26 Jan 2016 09:46:52 +0000 (10:46 +0100)
Change-Id: I584c24fee5eae072c6885967170e5aded5fce172
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
docker/requirements.pip
testcases/config_functest.yaml
testcases/vPing/CI/libraries/vPing2.py

index 2389d60..517577d 100644 (file)
@@ -24,4 +24,5 @@ robotframework-sshlibrary==2.1.1
 configObj==5.0.6
 Flask==0.10.1
 xmltodict==0.9.2
-
+scp==0.10.2
+paramiko=1.16.0
index 229cb9b..21e99ba 100644 (file)
@@ -65,7 +65,7 @@ general:
         neutron_router_name: functest-router
 
 vping:
-    ping_timeout:   200
+    ping_timeout:   300
     vm_flavor: m1.small #adapt to your environment
     vm_name_1: opnfv-vping-1
     vm_name_2: opnfv-vping-2
index 5000086..2d31917 100644 (file)
 # 0.2: measure test duration and publish results under json format
 #
 #
-
-import os
-import time
 import argparse
+import datetime
+import logging
+import os
+import paramiko
 import pprint
+import subprocess
 import sys
-import logging
+import time
 import yaml
-import datetime
-import subprocess
+from scp import SCPClient
 from novaclient import client as novaclient
 from neutronclient.v2_0 import client as neutronclient
 from keystoneclient.v2_0 import client as keystoneclient
@@ -431,51 +432,81 @@ def main():
     floatip = functest_utils.create_floating_ip(neutron_client)
     if floatip == None:
         logger.error("Cannot create floating IP.")
+        cleanup(nova_client, neutron_client, image_id, network_dic,
+            port_id1, port_id2)
         return (EXIT_CODE)
     logger.info("Floating IP created: '%s'" % floatip)
 
     logger.info("Associating floating ip: '%s' to VM2 " % floatip)
     if not functest_utils.add_floating_ip(nova_client, vm2.id, floatip):
         logger.error("Cannot associate floating IP to VM.")
+        cleanup(nova_client, neutron_client, image_id, network_dic,
+            port_id1, port_id2)
         return (EXIT_CODE)
 
-    timeout = 30
+    logger.info("Trying to stablish SSH connection to %s..." % floatip)
+    username='cirros'
+    password='cubswin:)'
+    ssh = paramiko.SSHClient()
+    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+
+    timeout = 50
     while timeout > 0:
-        response = os.system("ping -c 1 " + floatip)
-        if response == 0:
-            logger.debug("Floating IP '%s' is reachable!" % floatip)
-            time.sleep(5) # the VM still needs to do some bootup actions
+        try:
+            ssh.connect(floatip, username=username, password=password)
+            logger.debug("Floating IP '%s' is ssh-able!" % floatip)
             break
-        timeout -= 1
-        time.sleep(2)
+        except Exception, e:
+            #print e
+            logger.debug("Waiting for %s..." % floatip)
+            time.sleep(6)
+            timeout -= 1
 
-    if timeout == 0:
+    if timeout == 0: # 300 sec timeout (5 min)
         logger.error("Cannot ping the floating IP '%s'." % floatip)
+        cleanup(nova_client, neutron_client, image_id, network_dic,
+            port_id1, port_id2)
         return (EXIT_CODE)
 
-    logger.info("SCP ping script to VM2...")
-    SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "+\
-        "-o LogLevel=quiet"
+    scp = SCPClient(ssh.get_transport())
+
     ping_script = REPO_PATH + "testcases/vPing/CI/libraries/ping.sh"
-    cmd1 = "sshpass -p 'cubswin:)' scp " + SSH_OPTS + " " + \
-        ping_script + " cirros@"+floatip+":~/ping.sh"
-    cmd2 = "sshpass -p 'cubswin:)' ssh " + SSH_OPTS + \
-        " cirros@"+floatip+" 'chmod 755 ~/ping.sh '"
-    cmd3 = "sshpass -p 'cubswin:)' ssh " + SSH_OPTS + \
-        " cirros@"+floatip+" '~/ping.sh "+IP_1+"'"
+    try:
+        scp.put(ping_script,"~/")
+    except Exception, e:
+        logger.error("Cannot SCP the file '%s' to VM '%s'" % (ping_script,floatip))
+
+
+    #SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "+\
+    #    "-o LogLevel=quiet"
+
+    #cmd1 = "sshpass -p 'cubswin:)' scp " + SSH_OPTS + " " + \
+    #    ping_script + " cirros@"+floatip+":~/ping.sh"
+    #cmd2 = "sshpass -p 'cubswin:)' ssh " + SSH_OPTS + \
+    #    " cirros@"+floatip+" 'chmod 755 ~/ping.sh '"
+    #cmd3 = "sshpass -p 'cubswin:)' ssh " + SSH_OPTS + \
+    #    " cirros@"+floatip+" '~/ping.sh "+IP_1+"'"
+
+    cmd = 'chmod 755 ~/ping.sh'
+    (stdin, stdout, stderr) = ssh.exec_command(cmd)
+    for line in stdout.readlines():
+        print line
 
     logger.info("Waiting for ping...")
     sec = 0
     duration = 0
 
+    cmd = '~/ping.sh' + IP_1
     while True:
         time.sleep(1)
         # we do the SCP every time in the loop because while testing, I observed
         # that for some strange reason, the cirros VM was deleting the file if
         # do the scp only once
-        subprocess.Popen(cmd1, shell=True, stdout=subprocess.PIPE).stdout.read()
-        subprocess.Popen(cmd2, shell=True, stdout=subprocess.PIPE).stdout.read()
-        output=subprocess.Popen(cmd3, shell=True, stdout=subprocess.PIPE).stdout.read()
+        (stdin, stdout, stderr) = ssh.exec_command(cmd)
+        output = stdout.readlines()
+        for line in output:
+            print line
+
         # print "--"+console_log
         # report if the test is failed
         if "vPing OK" in output: