You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ch...@apache.org on 2016/01/28 12:15:39 UTC

[3/3] stratos git commit: Kubernetes - pullPolicy can be defined through the Cartridge definition

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 <cs...@chamiladealwis.com>
Authored: Wed Jan 27 11:32:37 2016 +0530
Committer: Chamila de Alwis <ch...@apache.org>
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"
         }
     ]
 }