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/
14 from jinja2 import Template
17 from rally import exceptions
18 from rally.common import yamlutils as yaml
19 import rally.common.logging
20 from rally.env import env_mgr
22 from xtesting.core import testcase
25 class RallyKubernetes(testcase.TestCase):
26 """Run tasks for checking basic functionality of Kubernetes cluster"""
28 __logger = logging.getLogger(__name__)
34 def __init__(self, **kwargs):
35 super(RallyKubernetes, self).__init__(**kwargs)
36 self.dir_results = "/home/opnfv/functest/results"
37 self.res_dir = os.path.join(self.dir_results, self.case_name)
39 def run(self, **kwargs):
40 self.start_time = time.time()
41 if not os.path.exists(self.res_dir):
42 os.makedirs(self.res_dir)
44 api.CONF.set_default("use_stderr", False)
45 api.CONF.set_default('log_dir', self.res_dir)
46 api.CONF.set_default('log_file', 'rally.log')
47 rally.common.logging.setup("rally")
48 spec = env_mgr.EnvManager.create_spec_from_sys_environ()["spec"]
50 env_mgr.EnvManager.get('my-kubernetes').delete(force=True)
51 except exceptions.DBRecordNotFound:
53 env = env_mgr.EnvManager.create('my-kubernetes', spec)
54 result = env.check_health()
55 self.__logger.debug("check health %s: %s", 'my-kubernetes', result)
56 if not result['existing@kubernetes']['available']:
58 "Cannot check env heath: %s",
59 result['existing@kubernetes']['message'])
61 with open(pkg_resources.resource_filename(
62 'functest_kubernetes', 'rally/all-in-one.yaml')) as file:
63 template = Template(file.read())
64 task = yaml.safe_load(template.render(
65 concurrency=kwargs.get("concurrency", self.concurrency),
66 times=kwargs.get("times", self.times),
67 namespaces_count=kwargs.get(
68 "namespaces_count", self.namespaces_count)))
69 rapi.task.validate(deployment='my-kubernetes', config=task)
70 task_instance = rapi.task.create(deployment='my-kubernetes')
72 deployment='my-kubernetes', config=task,
73 task=task_instance["uuid"])
74 self.details = rapi.task.get(task_instance["uuid"], detailed=True)
75 self.__logger.debug("details: %s", self.details)
76 if self.details['pass_sla']:
78 result = rapi.task.export(
79 [task_instance["uuid"]], "html",
80 output_dest=os.path.join(
81 self.res_dir, "{}.html".format(self.case_name)))
83 for path in result["files"]:
84 with open(path, "w+") as output:
85 output.write(result["files"][path])
86 result = rapi.task.export(
87 [task_instance["uuid"]], "junit-xml",
88 output_dest=os.path.join(
89 self.res_dir, "{}.xml".format(self.case_name)))
91 for path in result["files"]:
92 with open(path, "w+") as output:
93 output.write(result["files"][path])
94 self.stop_time = time.time()