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"
}
]
}