3 """Run workloads via Rally against Kubernetes platform
5 xrally/kubernetes_ provides xRally plugins for Kubernetes platform.
7 .. _xrally/kubernetes: https://github.com/xrally/xrally-kubernetes/
16 from rally import exceptions
17 from rally.common import yamlutils as yaml
18 import rally.common.logging
19 from rally.env import env_mgr
21 from xtesting.core import testcase
24 class RallyKubernetes(testcase.TestCase):
25 """Run tasks for checking basic functionality of Kubernetes cluster"""
27 __logger = logging.getLogger(__name__)
29 def __init__(self, **kwargs):
30 super(RallyKubernetes, self).__init__(**kwargs)
31 self.res_dir = "/home/opnfv/functest/results/{}".format(
34 def run(self, **kwargs):
35 self.start_time = time.time()
36 if not os.path.exists(self.res_dir):
37 os.makedirs(self.res_dir)
39 api.CONF.set_default("use_stderr", False)
40 api.CONF.set_default('log_dir', self.res_dir)
41 api.CONF.set_default('log_file', 'rally.log')
42 rally.common.logging.setup("rally")
43 spec = env_mgr.EnvManager.create_spec_from_sys_environ()["spec"]
45 env_mgr.EnvManager.get('my-kubernetes').delete(force=True)
46 except exceptions.DBRecordNotFound:
48 env = env_mgr.EnvManager.create('my-kubernetes', spec)
49 result = env.check_health()
50 self.__logger.debug("check health %s: %s", 'my-kubernetes', result)
51 if not result['existing@kubernetes']['available']:
53 "Cannot check env heath: %s",
54 result['existing@kubernetes']['message'])
57 pkg_resources.resource_filename(
58 'functest_kubernetes', 'rally/all-in-one.yaml')).read()
59 task = yaml.safe_load(input_task)
60 rapi.task.validate(deployment='my-kubernetes', config=task)
61 task_instance = rapi.task.create(deployment='my-kubernetes')
63 deployment='my-kubernetes', config=task,
64 task=task_instance["uuid"])
65 self.details = rapi.task.get(task_instance["uuid"], detailed=True)
66 self.__logger.debug("details: %s", self.details)
67 if self.details['pass_sla']:
69 result = rapi.task.export(
70 [task_instance["uuid"]], "html",
71 output_dest=os.path.join(
72 self.res_dir, "{}.html".format(self.case_name)))
74 for path in result["files"]:
75 with open(path, "w+") as output:
76 output.write(result["files"][path])
77 result = rapi.task.export(
78 [task_instance["uuid"]], "junit-xml",
79 output_dest=os.path.join(
80 self.res_dir, "{}.xml".format(self.case_name)))
82 for path in result["files"]:
83 with open(path, "w+") as output:
84 output.write(result["files"][path])
85 self.stop_time = time.time()