add ssh capability and an example on how to execute ssh commands on a newly started...
[it/test.git] / XTesting / powder-control / run_profile_example.py
diff --git a/XTesting/powder-control/run_profile_example.py b/XTesting/powder-control/run_profile_example.py
new file mode 100755 (executable)
index 0000000..33717a4
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/env python3
+import logging
+import mmap
+import multiprocessing as mp
+import powder.experiment as pexp
+import random
+import re
+import string
+import sys
+import time
+from powder.profile import PowderProfile
+
+class RunTest:
+    """Based on the return values from the process that starts a given POWDER profile,
+    create ssh connection and run desired commands, e.g., test steps that's already
+    published as scripts or pure commands
+
+    """
+
+    TEST_SUCCEEDED   = 0  # all steps succeeded
+    TEST_FAILED      = 1  # one of the steps failed
+    TEST_NOT_STARTED = 2  # could not instantiate an experiment to run the test on
+
+    def run(self):
+        powder_host = PowderProfile()
+        # expect the start on a specified profile succeeds and return
+        # an IPv4 address to proceed to the next step
+        status, ip_address = powder_host.run()
+
+        if not ip_address:
+            sys.exit(self.TEST_NOT_STARTED)
+        elif self._start_powder_experiment(ip_address):
+            sys.exit(self.TEST_FAILED)
+        else:    
+            sys.exit(self.TEST_SUCCEEDED)
+
+    def _start_powder_experiment(self, ip_address):
+        logging.info('Executing ssh commands on host:{}'.format(ip_address))
+        node = pexp.Node(ip_address=ip_address)
+        ssh_node = node.ssh.open()
+        # the example commands shown below are to set up the AI/ML FW from scratch
+        ssh_node.command('sudo groupadd docker && sudo usermod -aG docker osc_int')
+        ssh_node.close(5)
+        ssh_node = node.ssh.open()
+        ssh_node.command('git clone https://gerrit.o-ran-sc.org/r/aiml-fw/aimlfw-dep')
+        ssh_node.command('cd aimlfw-dep && bin/install_traininghost.sh 2>&1 | tee /tmp/install.log', timeout=1800)
+        ssh_node.close(5)
+
+if __name__ == '__main__':
+    powdertest = RunTest()
+    powdertest.run()