diff options
author | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-05-15 16:03:30 +0100 |
---|---|---|
committer | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-06-14 07:15:47 +0000 |
commit | 9c19d2dc2ca9057d5d27b3e1b77e40fee2fcc6d4 (patch) | |
tree | 92eebc5739778f3d963b9003185acec8ab58e100 | |
parent | 1042a7077bba049d51022b7f4914048afb521cb1 (diff) |
Specify the networks to be used per pod
If CRD "Network" is defined and network items are created, each pod (server)
can have access to one or several networks. This is defined in the metadata
section, as "annotations.networks" [1].
Example of Kubernetes pod definition with networks:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
annotations:
networks: '[{"name": "flannel"}]'
Example of Yardstick server definition with networks:
context:
type: Kubernetes
servers:
host:
containers:
- name: ...
networks:
- flannel # These names must be defined in
# context.networks
...
networks:
- name: flannel
plugin: flannel
Kubernetes annotations [2].
[1]https://github.com/intel/multus-cni/tree/b9446232cdf4f1b6f2bea583291973cc97e963f4#configuring-multus-to-use-kubeconfig-and-a-default-network
[2]https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
JIRA: YARDSTICK-1178
Change-Id: I6e7b4bacf10810833ec733c14d44e5db613675e3
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
-rw-r--r-- | yardstick/orchestrator/kubernetes.py | 19 | ||||
-rw-r--r-- | yardstick/tests/unit/orchestrator/test_kubernetes.py | 10 |
2 files changed, 28 insertions, 1 deletions
diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 44a333e4b..231a03b13 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -9,10 +9,12 @@ import copy +from oslo_serialization import jsonutils + from yardstick.common import constants from yardstick.common import exceptions -from yardstick.common import utils from yardstick.common import kubernetes_utils as k8s_utils +from yardstick.common import utils class ContainerObject(object): @@ -71,6 +73,7 @@ class KubernetesObject(object): self.ssh_key = parameters.pop('ssh_key', self.SSHKEY_DEFAULT) self._volumes = parameters.pop('volumes', []) self._security_context = parameters.pop('securityContext', None) + self._networks = parameters.pop('networks', []) containers = parameters.pop('containers', None) if containers: @@ -107,6 +110,7 @@ class KubernetesObject(object): self._add_node_selector() self._add_volumes() self._add_security_context() + self._add_networks() def get_template(self): return self.template @@ -164,6 +168,19 @@ class KubernetesObject(object): 'spec.template.spec.securityContext', self._security_context) + def _add_networks(self): + networks = [] + for net in self._networks: + networks.append({'name': net}) + + if not networks: + return + + annotations = {'networks': jsonutils.dumps(networks)} + utils.set_dict_value(self.template, + 'spec.template.metadata.annotations', + annotations) + class ServiceObject(object): diff --git a/yardstick/tests/unit/orchestrator/test_kubernetes.py b/yardstick/tests/unit/orchestrator/test_kubernetes.py index e45545d6a..fe9e2fd2b 100644 --- a/yardstick/tests/unit/orchestrator/test_kubernetes.py +++ b/yardstick/tests/unit/orchestrator/test_kubernetes.py @@ -208,6 +208,16 @@ class KubernetesObjectTestCase(base.BaseUnitTestCase): self.assertEqual({'key%s' % i: 'value%s' % i}, container['securityContext']) + def test__add_networks(self): + k8s_obj = kubernetes.KubernetesObject( + 'name', networks=['network1', 'network2', 'network3']) + k8s_obj._add_networks() + networks = k8s_obj.\ + template['spec']['template']['metadata']['annotations']['networks'] + expected = ('[{"name": "network1"}, {"name": "network2"}, ' + '{"name": "network3"}]') + self.assertEqual(expected, networks) + class ContainerObjectTestCase(base.BaseUnitTestCase): |