Kubernetes - pullPolicy can be defined through the Cartridge definition
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/25083bfb Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/25083bfb Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/25083bfb Branch: refs/heads/master Commit: 25083bfb8cb778aaae2e42e5ad1208026a618a35 Parents: a3e5deb Author: Chamila de Alwis <[email protected]> Authored: Wed Jan 27 11:32:37 2016 +0530 Committer: Chamila de Alwis <[email protected]> Committed: Thu Jan 28 16:25:48 2016 +0530 ---------------------------------------------------------------------- .../iaases/kubernetes/KubernetesIaas.java | 13 ++++++++++--- .../kubernetes/client/KubernetesApiClient.java | 19 +++++++++++++++++-- .../kubernetes/client/KubernetesConstants.java | 2 ++ .../interfaces/KubernetesAPIClientInterface.java | 3 ++- .../kubernetes/client/live/AbstractLiveTest.java | 5 +++-- .../client/live/KubernetesApiClientLiveTest.java | 8 ++++---- samples/cartridges/kubernetes/php-secret.json | 4 ++++ 7 files changed, 42 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java index 54966d3..66e76a0 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java @@ -69,17 +69,16 @@ public class KubernetesIaas extends Iaas { public static final String POD_ID_PREFIX = "pod"; public static final String SERVICE_NAME_PREFIX = "service"; public static final String IMAGE_PULL_SECRETS = "IMAGE_PULL_SECRETS"; + public static final String IMAGE_PULL_POLICY = "IMAGE_PULL_POLICY"; private PartitionValidator partitionValidator; private List<NameValuePair> payload; private Long podActivationTimeout; - private List<String> imagePullSecrets; public KubernetesIaas(IaasProvider iaasProvider) { super(iaasProvider); partitionValidator = new KubernetesPartitionValidator(); payload = new ArrayList<>(); - imagePullSecrets = new ArrayList<>(); podActivationTimeout = Long.getLong("stratos.pod.activation.timeout"); if (podActivationTimeout == null) { @@ -360,6 +359,9 @@ public class KubernetesIaas extends Iaas { KubernetesApiClient kubernetesApi, KubernetesClusterContext kubernetesClusterContext) throws KubernetesClientException, RegistryException { + List<String> imagePullSecrets = new ArrayList<>(); + String imagePullPolicy = null; + String applicationId = memberContext.getApplicationId(); String cartridgeType = memberContext.getCartridgeType(); String clusterId = memberContext.getClusterId(); @@ -404,6 +406,11 @@ public class KubernetesIaas extends Iaas { imagePullSecrets.add(imagePullSecretsProperty.getValue()); } + Property imagePullPolicyProperty = cartridge.getProperties().getProperty(IMAGE_PULL_POLICY); + if (imagePullPolicyProperty != null){ + imagePullPolicy = imagePullPolicyProperty.getValue(); + } + IaasProvider iaasProvider = CloudControllerContext.getInstance() .getIaasProviderOfPartition(cartridge.getType(), partition.getId()); if (iaasProvider == null) { @@ -455,7 +462,7 @@ public class KubernetesIaas extends Iaas { podAnnotations.put(CloudControllerConstants.MEMBER_ID_LABEL, memberContext.getMemberId()); kubernetesApi.createPod(podId, podName, podLabels, podAnnotations, dockerImage, cpu, memory, ports, - environmentVariables, imagePullSecrets); + environmentVariables, imagePullSecrets, imagePullPolicy); log.info(String.format("Pod started successfully: [application] %s [cartridge] %s [member] %s " + "[pod] %s [pod-label] %s [cpu] %s [memory] %s", memberContext.getApplicationId(), http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java index 7818a33..47884c0 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java @@ -55,12 +55,13 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { * @param ports Ports exposed by the pod * @param environmentVariables Environment variables to be passed to the pod * @param imagePullSecrets Image Pull Secret to be passed to the pod + * @param imagePullPolicy Image Pull policy to be passed to the pod * @throws KubernetesClientException */ @Override public void createPod(String podId, String podName, Map<String, String> podLabels, Map<String, String> annotations, String dockerImage, String cpu, String memory, List<ContainerPort> ports, - List<EnvVar> environmentVariables, List<String> imagePullSecrets) + List<EnvVar> environmentVariables, List<String> imagePullSecrets, String imagePullPolicy) throws KubernetesClientException { try { @@ -111,7 +112,21 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface { containerTemplate.setResources(resources); containerTemplate.setPorts(ports); - containerTemplate.setImagePullPolicy(KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT); + + if (imagePullPolicy == null) { + // default pull policy + imagePullPolicy = KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT; + } else if ( + !imagePullPolicy.equals(KubernetesConstants.POLICY_PULL_ALWAYS) && + !imagePullPolicy.equals(KubernetesConstants.POLICY_PULL_NEVER) && + !imagePullPolicy.equals(KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT)) { + + // pull policy validation failed + throw new KubernetesClientException("Invalid Image Pull Policy defined : " + imagePullPolicy); + } + + containerTemplate.setImagePullPolicy(imagePullPolicy); + if (environmentVariables != null) { containerTemplate.setEnv(environmentVariables); } http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java index 08bdfbc..2a8a289 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java @@ -26,6 +26,8 @@ public class KubernetesConstants { public static final String POD_STATUS_RUNNING = "Running"; public static final String POLICY_PULL_IF_NOT_PRESENT = "IfNotPresent"; + public static final String POLICY_PULL_ALWAYS = "Always"; + public static final String POLICY_PULL_NEVER = "Never"; public static final String SESSION_AFFINITY_CLIENT_IP = "ClientIP"; public static final String KIND_POD = "Pod"; public static final String KIND_SERVICE = "Service"; http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java index 17759c2..d62a3b7 100644 --- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java +++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java @@ -45,11 +45,12 @@ public interface KubernetesAPIClientInterface { * @param ports ports to be opened * @param environmentVariables environment variables * @param imagePullSecrets Image Pull Secret to be passed to the pod + * @param imagePullPolicy Image Pull policy to be passed to the pod * @throws KubernetesClientException */ public void createPod(String podId, String podName, Map<String, String> podLabels, Map<String, String> annotations, String dockerImage, String cpu, String memory, List<ContainerPort> ports, - List<EnvVar> environmentVariables, List<String> imagePullSecrets) + List<EnvVar> environmentVariables, List<String> imagePullSecrets, String imagePullPolicy) throws KubernetesClientException; /** http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java index 765bec2..50719e2 100644 --- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java +++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java @@ -125,12 +125,13 @@ public class AbstractLiveTest extends TestCase { } protected void createPod(String podId, String podName, Map<String, String> labelMap, Map<String, String> - annotations, String containerPortName, String cpu, String memory, List<String> imagePullSecrets) + annotations, String containerPortName, String cpu, String memory, List<String> imagePullSecrets, + String imagePullPolicy) throws KubernetesClientException { log.info("Creating pod: [pod] " + podId); List<ContainerPort> ports = createPorts(containerPortName); - client.createPod(podId, podName, annotations, labelMap, dockerImage, cpu, memory, ports, null, imagePullSecrets); + client.createPod(podId, podName, annotations, labelMap, dockerImage, cpu, memory, ports, null, imagePullSecrets, imagePullPolicy); podIdList.add(podId); sleep(2000); http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java index 343dead..36bed87 100644 --- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java +++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java @@ -52,13 +52,13 @@ public class KubernetesApiClientLiveTest extends AbstractLiveTest { podLabels1.put("applicationId", "my-application-1"); Map<String, String> podAnnocations1 = new HashMap<>(); podAnnocations1.put("test", "test"); - createPod("stratos-test-pod-1", "stratos-test-pod", podLabels1, podAnnocations1, "http-1", "1", "512Mi", null); + createPod("stratos-test-pod-1", "stratos-test-pod", podLabels1, podAnnocations1, "http-1", "1", "512Mi", null, null); Map<String, String> podLabels2 = new HashMap<>(); podLabels2.put("applicationId", "my-application-2"); Map<String, String> podAnnocations2 = new HashMap<>(); podAnnocations2.put("test", "test"); - createPod("stratos-test-pod-2", "stratos-test-pod", podLabels2, podAnnocations2, "http-1", "2", "4Gi", null); + createPod("stratos-test-pod-2", "stratos-test-pod", podLabels2, podAnnocations2, "http-1", "2", "4Gi", null, null); deletePod("stratos-test-pod-1"); deletePod("stratos-test-pod-2"); @@ -95,13 +95,13 @@ public class KubernetesApiClientLiveTest extends AbstractLiveTest { podLabels3.put("applicationId", "my-application-3"); Map<String, String> podAnnocations3 = new HashMap<>(); podAnnocations3.put("test", "test"); - createPod("stratos-test-pod-3", serviceName, podLabels3, podAnnocations3, containerPortName, "1", "512", null); + createPod("stratos-test-pod-3", serviceName, podLabels3, podAnnocations3, containerPortName, "1", "512", null, null); Map<String, String> podLabels4 = new HashMap<>(); podLabels4.put("applicationId", "my-application-4"); Map<String, String> podAnnocations4 = new HashMap<>(); podAnnocations4.put("test", "test"); - createPod("stratos-test-pod-4", serviceName, podLabels4, podAnnocations4, containerPortName, "2", "512", null); + createPod("stratos-test-pod-4", serviceName, podLabels4, podAnnocations4, containerPortName, "2", "512", null, null); if (testServiceSocket) { // test service accessibility http://git-wip-us.apache.org/repos/asf/stratos/blob/25083bfb/samples/cartridges/kubernetes/php-secret.json ---------------------------------------------------------------------- diff --git a/samples/cartridges/kubernetes/php-secret.json b/samples/cartridges/kubernetes/php-secret.json index cdf4662..d1718be 100755 --- a/samples/cartridges/kubernetes/php-secret.json +++ b/samples/cartridges/kubernetes/php-secret.json @@ -46,6 +46,10 @@ { "name": "IMAGE_PULL_SECRETS", "value": "privateDockerSecret" + }, + { + "name": "IMAGE_PULL_POLICY", + "value": "Always" } ] }
