X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=XTesting%2Fpowder-control%2Fstart-profile.py;fp=XTesting%2Fpowder-control%2Fstart-profile.py;h=594dd445474ed08f2645595852fa7d522be1f0e8;hb=34a7a72a85ba9cf867a14ad353d15fbb28562e7b;hp=0000000000000000000000000000000000000000;hpb=5c5b9d9c60467d6f2d2c6a99d111045b8aea94f1;p=it%2Ftest.git diff --git a/XTesting/powder-control/start-profile.py b/XTesting/powder-control/start-profile.py new file mode 100755 index 0000000..594dd44 --- /dev/null +++ b/XTesting/powder-control/start-profile.py @@ -0,0 +1,83 @@ +#!/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 +import os + +logging.basicConfig( + level=logging.DEBUG, + format="[%(asctime)s] %(name)s:%(levelname)s: %(message)s" +) + + +class PowderProfile: + """Instantiates a Powder experiment based on the provided Powder profile + by default the project is 'osc' and the profile is 'ubuntu-20' + + """ + + # default Powder experiment credentials + PROJECT_NAME = 'osc' + PROFILE_NAME = 'ubuntu-20' + EXPERIMENT_NAME_PREFIX = 'osctest-' + + SUCCEEDED = 0 # all steps succeeded + FAILED = 1 # on of the steps failed + + def __init__(self, experiment_name=None): + if experiment_name is not None: + self.experiment_name = experiment_name + else: + self.experiment_name = self.EXPERIMENT_NAME_PREFIX + self._random_string() + + try: + self.project_name = os.environ['PROJECT'] + except KeyError: + self.project_name = self.PROJECT_NAME + + try: + self.profile_name = os.environ['PROFILE'] + except KeyError: + self.profile_name = self.PROFILE_NAME + + def run(self): + if not self._start_powder_experiment(): + self._finish(self.FAILED) + else: + self._finish(self.SUCCEEDED) + + def _random_string(self, strlen=7): + characters = string.ascii_lowercase + string.digits + return ''.join(random.choice(characters) for i in range(strlen)) + + def _start_powder_experiment(self): + logging.info('Instantiating Powder experiment...') + self.exp = pexp.PowderExperiment(experiment_name=self.experiment_name, + project_name=self.project_name, + profile_name=self.profile_name) + + exp_status = self.exp.start_and_wait() + if exp_status != self.exp.EXPERIMENT_READY: + logging.error('Failed to start experiment.') + return False + else: + return True + + def _finish(self, test_status): + if test_status == self.FAILED: + logging.info('The experiment could not be started... maybe the resources were unavailable.') + elif test_status == self.SUCCEEDED: + logging.info('The experiment successfully started.') + + sys.exit(test_status) + + +if __name__ == '__main__': + xtesting_host = PowderProfile() + xtesting_host.run()