Correctly override dir_results and res_dir in rally_kubernetes
[functest-kubernetes.git] / functest_kubernetes / rally / rally_kubernetes.py
1 #!/usr/bin/env python
2
3 """Run workloads via Rally against Kubernetes platform
4
5 xrally/kubernetes_ provides xRally plugins for Kubernetes platform.
6
7 .. _xrally/kubernetes: https://github.com/xrally/xrally-kubernetes/
8 """
9
10 import logging
11 import os
12 import time
13
14 import pkg_resources
15 from rally import api
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
20
21 from xtesting.core import testcase
22
23
24 class RallyKubernetes(testcase.TestCase):
25     """Run tasks for checking basic functionality of Kubernetes cluster"""
26
27     __logger = logging.getLogger(__name__)
28
29     def __init__(self, **kwargs):
30         super(RallyKubernetes, self).__init__(**kwargs)
31         self.dir_results = "/home/opnfv/functest/results"
32         self.res_dir = os.path.join(self.dir_results, self.case_name)
33
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)
38         rapi = api.API()
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"]
44         try:
45             env_mgr.EnvManager.get('my-kubernetes').delete(force=True)
46         except exceptions.DBRecordNotFound:
47             pass
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']:
52             self.__logger.error(
53                 "Cannot check env heath: %s",
54                 result['existing@kubernetes']['message'])
55             return
56         input_task = open(
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')
62         rapi.task.start(
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']:
68             self.result = 100
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)))
73         if "files" in result:
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)))
81         if "files" in result:
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()