Print stdout and stderr when calling commands over SSH
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 21 Feb 2018 17:12:53 +0000 (18:12 +0100)
committerCédric Ollivier <cedric.ollivier@orange.com>
Wed, 21 Feb 2018 18:43:48 +0000 (19:43 +0100)
It will help debugging possible issues vs APEX [1].

[1] https://build.opnfv.org/ci/view/functest/job/functest-apex-baremetal-daily-master/792/console

Change-Id: I610f5b0a7774440c51fa086fad4f61c9be0571dc
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
functest/opnfv_tests/vnf/ims/cloudify_ims.py
functest/opnfv_tests/vnf/router/cloudify_vrouter.py

index a6b87ea..aa1256a 100644 (file)
@@ -278,12 +278,12 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
             scp = SCPClient(ssh.get_transport(), socket_timeout=15.0)
             scp.put(kp_file, '~/')
             cmd = "sudo cp ~/cloudify_ims.pem /etc/cloudify/"
-            run_blocking_ssh_command(ssh, cmd)
+            self.run_blocking_ssh_command(ssh, cmd)
             cmd = "sudo chmod 444 /etc/cloudify/cloudify_ims.pem"
-            run_blocking_ssh_command(ssh, cmd)
+            self.run_blocking_ssh_command(ssh, cmd)
             cmd = "sudo yum install -y gcc python-devel"
-            run_blocking_ssh_command(ssh, cmd, "Unable to install packages \
-                                                on manager")
+            self.run_blocking_ssh_command(
+                ssh, cmd, "Unable to install packages on manager")
 
         self.details['orchestrator'].update(status='PASS', duration=duration)
 
@@ -397,7 +397,7 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
                     try:
                         cfy_client.executions.cancel(execution['id'],
                                                      force=True)
-                    except:  # pylint: disable=broad-except
+                    except Exception:  # pylint: disable=broad-except
                         self.__logger.warn("Can't cancel the current exec")
 
             execution = cfy_client.executions.start(
@@ -409,12 +409,22 @@ class CloudifyIms(clearwater_ims_base.ClearwaterOnBoardingBase):
             wait_for_execution(cfy_client, execution, self.__logger)
             cfy_client.deployments.delete(self.vnf['descriptor'].get('name'))
             cfy_client.blueprints.delete(self.vnf['descriptor'].get('name'))
-        except:  # pylint: disable=broad-except
+        except Exception:  # pylint: disable=broad-except
             self.__logger.warn("Some issue during the undeployment ..")
             self.__logger.warn("Tenant clean continue ..")
 
         super(CloudifyIms, self).clean()
 
+    @staticmethod
+    def run_blocking_ssh_command(ssh, cmd,
+                                 error_msg="Unable to run this command"):
+        """Command to run ssh command with the exit status."""
+        _, stdout, stderr = ssh.exec_command(cmd)
+        CloudifyIms.__logger.debug("SSH %s stdout: %s", cmd, stdout.read())
+        if stdout.channel.recv_exit_status() != 0:
+            CloudifyIms.__logger.error("SSH %s stderr: %s", cmd, stderr.read())
+            raise Exception(error_msg)
+
     @energy.enable_recording
     def run(self, **kwargs):
         """Execute CloudifyIms test case."""
@@ -528,10 +538,3 @@ def sig_test_format(sig_test):
     short_sig_test_result['skipped'] = nb_skipped
     nb_test = nb_passed + nb_skipped
     return (short_sig_test_result, nb_test)
-
-
-def run_blocking_ssh_command(ssh, cmd, error_msg="Unable to run this command"):
-    """Command to run ssh command with the exit status."""
-    stdin, stdout, stderr = ssh.exec_command(cmd)
-    if stdout.channel.recv_exit_status() != 0:
-        raise Exception(error_msg)
index 829206d..217312e 100644 (file)
@@ -118,6 +118,17 @@ class CloudifyVrouter(vrouter_base.VrouterOnBoardingBase):
             "tenant_images", config_file)
         self.__logger.info("Images needed for vrouter: %s", self.images)
 
+    @staticmethod
+    def run_blocking_ssh_command(ssh, cmd,
+                                 error_msg="Unable to run this command"):
+        """Command to run ssh command with the exit status."""
+        (_, stdout, stderr) = ssh.exec_command(cmd)
+        CloudifyVrouter.__logger.debug("SSH %s stdout: %s", cmd, stdout.read())
+        if stdout.channel.recv_exit_status() != 0:
+            CloudifyVrouter.__logger.error(
+                "SSH %s stderr: %s", cmd, stderr.read())
+            raise Exception(error_msg)
+
     def prepare(self):
         super(CloudifyVrouter, self).prepare()
         self.__logger.info("Additional pre-configuration steps")
@@ -268,11 +279,11 @@ class CloudifyVrouter(vrouter_base.VrouterOnBoardingBase):
             scp = SCPClient(ssh.get_transport(), socket_timeout=15.0)
             scp.put(kp_file, '~/')
             cmd = "sudo cp ~/cloudify_vrouter.pem /etc/cloudify/"
-            run_blocking_ssh_command(ssh, cmd)
+            self.run_blocking_ssh_command(ssh, cmd)
             cmd = "sudo chmod 444 /etc/cloudify/cloudify_vrouter.pem"
-            run_blocking_ssh_command(ssh, cmd)
+            self.run_blocking_ssh_command(ssh, cmd)
             cmd = "sudo yum install -y gcc python-devel"
-            run_blocking_ssh_command(
+            self.run_blocking_ssh_command(
                 ssh, cmd, "Unable to install packages on manager")
 
         self.details['orchestrator'].update(status='PASS', duration=duration)
@@ -473,10 +484,3 @@ def get_execution_id(client, deployment_id):
     raise RuntimeError('Failed to get create_deployment_environment '
                        'workflow execution.'
                        'Available executions: {0}'.format(executions))
-
-
-def run_blocking_ssh_command(ssh, cmd, error_msg="Unable to run this command"):
-    """Command to run ssh command with the exit status."""
-    (_, stdout, _) = ssh.exec_command(cmd)
-    if stdout.channel.recv_exit_status() != 0:
-        raise Exception(error_msg)