diff options
-rw-r--r-- | yardstick/common/exceptions.py | 4 | ||||
-rw-r--r-- | yardstick/orchestrator/kubernetes.py | 6 | ||||
-rw-r--r-- | yardstick/tests/unit/orchestrator/test_kubernetes.py | 11 |
3 files changed, 21 insertions, 0 deletions
diff --git a/yardstick/common/exceptions.py b/yardstick/common/exceptions.py index c25acbaf8..51db552ee 100644 --- a/yardstick/common/exceptions.py +++ b/yardstick/common/exceptions.py @@ -253,6 +253,10 @@ class KubernetesContainerPortNotDefined(YardstickException): message = 'Container port not defined in "%(port)s"' +class KubernetesContainerWrongImagePullPolicy(YardstickException): + message = 'Image pull policy must be "Always", "IfNotPresent" or "Never"' + + class ScenarioCreateNetworkError(YardstickException): message = 'Create Neutron Network Scenario failed' diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 98832908c..ec3588371 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -24,6 +24,7 @@ class ContainerObject(object): COMMAND_DEFAULT = '/bin/bash' RESOURCES = ('requests', 'limits') PORT_OPTIONS = ('containerPort', 'hostIP', 'hostPort', 'name', 'protocol') + IMAGE_PULL_POLICY = ('Always', 'IfNotPresent', 'Never') def __init__(self, name, ssh_key, **kwargs): self._name = name @@ -36,6 +37,7 @@ class ContainerObject(object): self._env = kwargs.get('env', []) self._resources = kwargs.get('resources', {}) self._ports = kwargs.get('ports', []) + self._image_pull_policy = kwargs.get('imagePullPolicy') def _create_volume_mounts(self): """Return all "volumeMounts" items per container""" @@ -82,6 +84,10 @@ class ContainerObject(object): for res in (res for res in self._resources if res in self.RESOURCES): container['resources'][res] = self._resources[res] + if self._image_pull_policy: + if self._image_pull_policy not in self.IMAGE_PULL_POLICY: + raise exceptions.KubernetesContainerWrongImagePullPolicy() + container['imagePullPolicy'] = self._image_pull_policy return container diff --git a/yardstick/tests/unit/orchestrator/test_kubernetes.py b/yardstick/tests/unit/orchestrator/test_kubernetes.py index 8d351e419..394ab58d5 100644 --- a/yardstick/tests/unit/orchestrator/test_kubernetes.py +++ b/yardstick/tests/unit/orchestrator/test_kubernetes.py @@ -395,6 +395,17 @@ class ContainerObjectTestCase(base.BaseUnitTestCase): 'limits': {'key2': 'val2'}}} self.assertEqual(expected, container_obj.get_container_item()) + def test_get_container_item_image_pull_policy(self): + container_obj = kubernetes.ContainerObject( + 'cname', ssh_key='fake_sshkey', imagePullPolicy='Always') + expected = {'args': [], + 'command': [kubernetes.ContainerObject.COMMAND_DEFAULT], + 'image': kubernetes.ContainerObject.IMAGE_DEFAULT, + 'name': 'cname-container', + 'volumeMounts': container_obj._create_volume_mounts(), + 'imagePullPolicy':'Always'} + self.assertEqual(expected, container_obj.get_container_item()) + class CustomResourceDefinitionObjectTestCase(base.BaseUnitTestCase): |