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')
31 "kind": "ReplicationController",
51 self._change_value_according_name(name)
52 self._add_containers()
53 self._add_ssh_key_volume()
56 def get_template(self):
59 def _change_value_according_name(self, name):
60 utils.set_dict_value(self.template, 'metadata.name', name)
62 utils.set_dict_value(self.template,
63 'spec.template.metadata.labels.app',
66 def _add_containers(self):
67 containers = [self._add_container()]
68 utils.set_dict_value(self.template,
69 'spec.template.spec.containers',
72 def _add_container(self):
73 container_name = '{}-container'.format(self.name)
74 ssh_key_mount_path = "/root/.ssh/"
78 "command": self.command,
80 "name": container_name,
83 "mountPath": ssh_key_mount_path,
91 def _add_volumes(self):
92 utils.set_dict_value(self.template,
93 'spec.template.spec.volumes',
96 def _add_volume(self, volume):
97 self.volumes.append(volume)
99 def _add_ssh_key_volume(self):
106 self._add_volume(key_volume)
109 class KubernetesTemplate(object):
111 def __init__(self, name, template_cfg):
113 self.ssh_key = '{}-key'.format(name)
115 self.rcs = [self._get_rc_name(rc) for rc in template_cfg]
116 self.k8s_objs = [KubernetesObject(self._get_rc_name(rc),
117 ssh_key=self.ssh_key,
119 for rc, cfg in template_cfg.items()]
122 def _get_rc_name(self, rc_name):
123 return '{}-{}'.format(rc_name, self.name)
125 def get_rc_pods(self):
126 resp = k8s_utils.get_pod_list()
127 self.pods = [p.metadata.name for p in resp.items for s in self.rcs
128 if p.metadata.name.startswith(s)]