Improve "get_server" function in Kubernetes context
[yardstick.git] / yardstick / benchmark / contexts / kubernetes.py
index d322954..9feb006 100644 (file)
@@ -16,6 +16,8 @@ import paramiko
 
 from yardstick.benchmark.contexts.base import Context
 from yardstick.orchestrator import kubernetes
+from yardstick.common import constants
+from yardstick.common import exceptions
 from yardstick.common import kubernetes_utils as k8s_utils
 from yardstick.common import utils
 
@@ -47,6 +49,8 @@ class KubernetesContext(Context):
         LOG.info('Creating ssh key')
         self._set_ssh_key()
 
+        self._create_crd()
+        self._create_networks()
         LOG.info('Launch containers')
         self._create_rcs()
         self._create_services()
@@ -60,6 +64,8 @@ class KubernetesContext(Context):
         self._delete_rcs()
         self._delete_pods()
         self._delete_services()
+        self._delete_networks()
+        self._delete_crd()
 
         super(KubernetesContext, self).undeploy()
 
@@ -106,6 +112,26 @@ class KubernetesContext(Context):
     def _delete_pod(self, pod):
         k8s_utils.delete_pod(pod)
 
+    def _create_crd(self):
+        LOG.info('Create Custom Resource Definition elements')
+        for crd in self.template.crd:
+            crd.create()
+
+    def _delete_crd(self):
+        LOG.info('Delete Custom Resource Definition elements')
+        for crd in self.template.crd:
+            crd.delete()
+
+    def _create_networks(self):  # pragma: no cover
+        LOG.info('Create Network elements')
+        for net in self.template.network_objs:
+            net.create()
+
+    def _delete_networks(self):  # pragma: no cover
+        LOG.info('Create Network elements')
+        for net in self.template.network_objs:
+            net.delete()
+
     def _get_key_path(self):
         task_id = self.name.split('-')[-1]
         k = 'files/yardstick_key-{}'.format(task_id)
@@ -132,21 +158,34 @@ class KubernetesContext(Context):
 
     def _get_server(self, name):
         service_name = '{}-service'.format(name)
-        service = k8s_utils.get_service_by_name(service_name).ports[0]
-
-        host = {
-            'name': service.name,
+        service = k8s_utils.get_service_by_name(service_name)
+        if not service:
+            raise exceptions.KubernetesServiceObjectNotDefined()
+
+        for sn_port in (sn_port for sn_port in service.ports
+                        if sn_port.port == constants.SSH_PORT):
+            node_port = sn_port.node_port
+            break
+        else:
+            raise exceptions.KubernetesSSHPortNotDefined()
+
+        return {
+            'name': name,
             'ip': self._get_node_ip(),
             'private_ip': k8s_utils.get_pod_by_name(name).status.pod_ip,
-            'ssh_port': service.node_port,
+            'ssh_port': node_port,
             'user': 'root',
-            'key_filename': self.key_path,
+            'key_filename': self.key_path
         }
 
-        return host
-
     def _get_node_ip(self):
         return k8s_utils.get_node_list().items[0].status.addresses[0].address
 
     def _get_network(self, attr_name):
         return None
+
+    def _get_physical_nodes(self):
+        return None
+
+    def _get_physical_node_for_server(self, server_name):
+        return None