diff options
author | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-07-18 12:02:58 +0100 |
---|---|---|
committer | Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com> | 2018-07-19 08:07:29 +0000 |
commit | c8facac8b67176e61ab2e00b312cc2deafe57b79 (patch) | |
tree | 89a1a89240475f35b70e699552a1b1b90008f8ae | |
parent | 3eb7c80aa614456b05e08651a55f7450e6864c79 (diff) |
Add "imagePullPolicy" parameter in Kubernetes container
The configuration parameter "imagePullPolicy" defines how Kubernetes
retrieves de image. By default, Kubernetes will always try to pull the
latest image from the repository [1]. Three possible arguments are accepted:
- Always
- IfNotPresent
- Never
Example of Kubernetes pod definition:
containers:
- name: vcmts-pktgen-pod-0
image: openretriever/yardstick
imagePullPolicy: IfNotPresent
Example of Yardstick definition:
context:
name: k8syardstick
type: Kubernetesservers:
vnf:
image: openretriever/yardstick
imagePullPolicy: IfNotPresent
[1] https://kubernetes.io/docs/concepts/containers/images/
JIRA: YARDSTICK-1328
Change-Id: I83bfb01670eef22218b1affd7d37af14e32a622e
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
-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): |