diff options
author | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-05-08 16:46:13 +0100 |
---|---|---|
committer | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-06-14 07:15:41 +0000 |
commit | 1042a7077bba049d51022b7f4914048afb521cb1 (patch) | |
tree | e68ee712c9d29a0a3e288d047f8c4e16742830ac /yardstick/orchestrator | |
parent | fa269e3789d19f1335ae9207817203c6ad58cf42 (diff) |
Add new Kubernetes resource kind: "Network"
Add a new Kubernetes resource kind: "Network" [1] [2]
Kubernetes network plugins (alpha definition): [3]
Network definition example in Kubernetes:
apiVersion: "kubernetes.com/v1"
kind: Network
metadata:
name: flannel
plugin: flannel
args: '[
{delegate": {"isDefaultGateway": true}}
]'
Proposed Kubernetes context network definition:
context:
networks:
- name: flannel
plugin: flannel
args: (string)
- name: sriov_upload
plugin: sriov
args: (string)
[1]https://builders.intel.com/docs/networkbuilders/multiple-network-interfaces-in-kubernetes-application-note.pdf
[2]http://cdn.opensourcecloud.cn/zt/k8s/01.pdf
[3]https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/
JIRA: YARDSTICK-1160
Change-Id: I71a49ac14e3d28ded91d2ed3cd9cc527e40303f7
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Diffstat (limited to 'yardstick/orchestrator')
-rw-r--r-- | yardstick/orchestrator/kubernetes.py | 99 |
1 files changed, 95 insertions, 4 deletions
diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 637abd813..44a333e4b 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -91,9 +91,7 @@ class KubernetesObject(object): "replicas": 1, "template": { "metadata": { - "labels": { - "app": name - } + "labels": {"app": name} }, "spec": { "containers": [], @@ -237,6 +235,98 @@ class CustomResourceDefinitionObject(object): k8s_utils.delete_custom_resource_definition(self._name) +class NetworkObject(object): + + MANDATORY_PARAMETERS = {'name', 'plugin', 'args'} + KIND = 'Network' + + def __init__(self, **kwargs): + if not self.MANDATORY_PARAMETERS.issubset(kwargs): + missing_parameters = ', '.join( + str(param) for param in + (self.MANDATORY_PARAMETERS - set(kwargs))) + raise exceptions.KubernetesNetworkObjectDefinitionError( + missing_parameters=missing_parameters) + + self._name = kwargs['name'] + self._plugin = kwargs['plugin'] + self._args = kwargs['args'] + self._crd = None + self._template = None + self._group = None + self._version = None + self._plural = None + self._scope = None + + @property + def crd(self): + if self._crd: + return self._crd + crd = k8s_utils.get_custom_resource_definition(self.KIND) + if not crd: + raise exceptions.KubernetesNetworkObjectKindMissing() + self._crd = crd + return self._crd + + @property + def group(self): + if self._group: + return self._group + self._group = self.crd.spec.group + return self._group + + @property + def version(self): + if self._version: + return self._version + self._version = self.crd.spec.version + return self._version + + @property + def plural(self): + if self._plural: + return self._plural + self._plural = self.crd.spec.names.plural + return self._plural + + @property + def scope(self): + if self._scope: + return self._scope + self._scope = self.crd.spec.scope + return self._scope + + @property + def template(self): + """"Network" object template + + This template can be rendered only once the CRD "Network" is created in + Kubernetes. This function call must be delayed until the creation of + the CRD "Network". + """ + if self._template: + return self._template + + self._template = { + 'apiVersion': '{}/{}'.format(self.group, self.version), + 'kind': self.KIND, + 'metadata': { + 'name': self._name + }, + 'plugin': self._plugin, + 'args': self._args + } + return self._template + + def create(self): + k8s_utils.create_network(self.scope, self.group, self.version, + self.plural, self.template) + + def delete(self): + k8s_utils.delete_network(self.scope, self.group, self.version, + self.plural, self._name) + + class KubernetesTemplate(object): def __init__(self, name, context_cfg): @@ -248,6 +338,7 @@ class KubernetesTemplate(object): context_cfg = copy.deepcopy(context_cfg) servers_cfg = context_cfg.pop('servers', {}) crd_cfg = context_cfg.pop('custom_resources', []) + networks_cfg = context_cfg.pop('networks', []) self.name = name self.ssh_key = '{}-key'.format(name) @@ -259,7 +350,7 @@ class KubernetesTemplate(object): self.service_objs = [ServiceObject(s) for s in self.rcs] self.crd = [CustomResourceDefinitionObject(self.name, **crd) for crd in crd_cfg] - + self.network_objs = [NetworkObject(**nobj) for nobj in networks_cfg] self.pods = [] def _get_rc_name(self, rc_name): |