1 ##############################################################################
2 # Copyright (c) 2017 Huawei Technologies Co.,Ltd.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
10 from __future__ import absolute_import
11 from __future__ import print_function
13 from yardstick.common import utils
14 from yardstick.common import kubernetes_utils as k8s_utils
17 class KubernetesObject(object):
19 def __init__(self, name, **kwargs):
20 super(KubernetesObject, self).__init__()
22 self.image = kwargs.get('image', 'openretriever/yardstick')
23 self.command = [kwargs.get('command', '/bin/bash')]
24 self.args = kwargs.get('args', [])
25 self.ssh_key = kwargs.get('ssh_key', 'yardstick_key')
26 self.node_selector = kwargs.get('nodeSelector', {})
32 "kind": "ReplicationController",
53 self._change_value_according_name(name)
54 self._add_containers()
55 self._add_node_selector()
56 self._add_ssh_key_volume()
59 def get_template(self):
62 def _change_value_according_name(self, name):
63 utils.set_dict_value(self.template, 'metadata.name', name)
65 utils.set_dict_value(self.template,
66 'spec.template.metadata.labels.app',
69 def _add_containers(self):
70 containers = [self._add_container()]
71 utils.set_dict_value(self.template,
72 'spec.template.spec.containers',
75 def _add_container(self):
76 container_name = '{}-container'.format(self.name)
77 ssh_key_mount_path = '/tmp/.ssh/'
81 "command": self.command,
83 "name": container_name,
86 "mountPath": ssh_key_mount_path,
94 def _add_node_selector(self):
95 utils.set_dict_value(self.template,
96 'spec.template.spec.nodeSelector',
99 def _add_volumes(self):
100 utils.set_dict_value(self.template,
101 'spec.template.spec.volumes',
104 def _add_volume(self, volume):
105 self.volumes.append(volume)
107 def _add_ssh_key_volume(self):
114 self._add_volume(key_volume)
117 class ServiceObject(object):
119 def __init__(self, name):
120 self.name = '{}-service'.format(name)
123 'name': '{}-service'.format(name)
140 k8s_utils.create_service(self.template)
143 k8s_utils.delete_service(self.name)
146 class KubernetesTemplate(object):
148 def __init__(self, name, template_cfg):
150 self.ssh_key = '{}-key'.format(name)
152 self.rcs = [self._get_rc_name(rc) for rc in template_cfg]
153 self.k8s_objs = [KubernetesObject(self._get_rc_name(rc),
154 ssh_key=self.ssh_key,
156 for rc, cfg in template_cfg.items()]
157 self.service_objs = [ServiceObject(s) for s in self.rcs]
161 def _get_rc_name(self, rc_name):
162 return '{}-{}'.format(rc_name, self.name)
164 def get_rc_pods(self):
165 resp = k8s_utils.get_pod_list()
166 self.pods = [p.metadata.name for p in resp.items for s in self.rcs
167 if p.metadata.name.startswith(s)]