From 028e92b1b2dcbaffd4a80061cc3d387877b59d62 Mon Sep 17 00:00:00 2001 From: John O Loughlin Date: Tue, 15 May 2018 16:20:33 +0100 Subject: Add "restartPolicy" parameter in Kubernetes policy This new parameter, "restartPolicy", will allow define the restart policy per pod. Example of yaml definition in Kubernetes: apiVersion: v1 kind: Pod metadata: name: frontend spec: containers: - name: db ... restartPolicy: Always # Possible values: "Always", "OnFailure" and "Never" Example of definition in a Yardstick context: context: type: Kubernetes servers: host: containers: - name: ... restartPolicy: Always # Default value: "Always" Restart policy [1]. [1] https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy JIRA: YARDSTICK-1175 Change-Id: Id4317b909f98422e89d6d4553e8cfb0e1f593355 Signed-off-by: John O Loughlin --- yardstick/common/exceptions.py | 4 ++++ yardstick/orchestrator/kubernetes.py | 8 +++++++- yardstick/tests/unit/orchestrator/test_kubernetes.py | 14 ++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/yardstick/common/exceptions.py b/yardstick/common/exceptions.py index 50def0647..018654a4e 100644 --- a/yardstick/common/exceptions.py +++ b/yardstick/common/exceptions.py @@ -237,6 +237,10 @@ class KubernetesNetworkObjectKindMissing(YardstickException): message = 'Kubernetes kind "Network" is not defined' +class KubernetesWrongRestartPolicy(YardstickException): + message = 'Restart policy "%(rpolicy)s" is not valid' + + class ScenarioCreateNetworkError(YardstickException): message = 'Create Neutron Network Scenario failed' diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 07a7ab1b6..2c401fc93 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -77,6 +77,7 @@ class ContainerObject(object): class ReplicationControllerObject(object): SSHKEY_DEFAULT = 'yardstick_key' + RESTART_POLICY = ('Always', 'OnFailure', 'Never') def __init__(self, name, **kwargs): super(ReplicationControllerObject, self).__init__() @@ -87,6 +88,10 @@ class ReplicationControllerObject(object): self._volumes = parameters.pop('volumes', []) self._security_context = parameters.pop('securityContext', None) self._networks = parameters.pop('networks', []) + self._restart_policy = parameters.pop('restartPolicy', 'Always') + if self._restart_policy not in self.RESTART_POLICY: + raise exceptions.KubernetesWrongRestartPolicy( + rpolicy=self._restart_policy) containers = parameters.pop('containers', None) if containers: @@ -112,7 +117,8 @@ class ReplicationControllerObject(object): "spec": { "containers": [], "volumes": [], - "nodeSelector": {} + "nodeSelector": {}, + "restartPolicy": self._restart_policy } } } diff --git a/yardstick/tests/unit/orchestrator/test_kubernetes.py b/yardstick/tests/unit/orchestrator/test_kubernetes.py index 2451518a4..e9c3c9751 100644 --- a/yardstick/tests/unit/orchestrator/test_kubernetes.py +++ b/yardstick/tests/unit/orchestrator/test_kubernetes.py @@ -66,7 +66,8 @@ service ssh restart;while true ; do sleep 10000; done" ], "nodeSelector": { "kubernetes.io/hostname": "node-01" - } + }, + "restartPolicy": "Always" } } } @@ -77,13 +78,21 @@ service ssh restart;while true ; do sleep 10000; done" service ssh restart;while true ; do sleep 10000; done'], 'ssh_key': 'k8s-86096c30-key', 'nodeSelector': {'kubernetes.io/hostname': 'node-01'}, - 'volumes': [] + 'volumes': [], + 'restartPolicy': 'Always' } name = 'host-k8s-86096c30' output_r = kubernetes.ReplicationControllerObject( name, **input_s).get_template() self.assertEqual(output_r, output_t) + def test_get_template_invalid_restart_policy(self): + input_s = {'restartPolicy': 'invalid_option'} + name = 'host-k8s-86096c30' + with self.assertRaises(exceptions.KubernetesWrongRestartPolicy): + kubernetes.ReplicationControllerObject( + name, **input_s).get_template() + class GetRcPodsTestCase(base.BaseUnitTestCase): @@ -321,6 +330,7 @@ class ContainerObjectTestCase(base.BaseUnitTestCase): 'limits': {'key2': 'val2'}}} self.assertEqual(expected, container_obj.get_container_item()) + class CustomResourceDefinitionObjectTestCase(base.BaseUnitTestCase): def test__init(self): -- cgit 1.2.3-korg