blob: 594dd445474ed08f2645595852fa7d522be1f0e8 [file] [log] [blame]
#!/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()