This is an automated email from the ASF dual-hosted git repository. sanjeevrk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push: new cd63c84 Changed secretsproviderconfigurator interface to pass v1podspec (#2903) cd63c84 is described below commit cd63c8424051ef87918429dbf750dd89ede770c3 Author: Sanjeev Kulkarni <sanjee...@gmail.com> AuthorDate: Thu Nov 1 10:57:33 2018 -0700 Changed secretsproviderconfigurator interface to pass v1podspec (#2903) --- .../pulsar/functions/runtime/KubernetesRuntime.java | 9 +++++---- .../pulsar/functions/runtime/ProcessRuntimeTest.java | 3 ++- .../DefaultSecretsProviderConfigurator.java | 4 ++-- .../KubernetesSecretsProviderConfigurator.java | 17 ++++++++++++----- .../SecretsProviderConfigurator.java | 4 ++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/KubernetesRuntime.java b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/KubernetesRuntime.java index 152842e..bb1ae71 100644 --- a/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/KubernetesRuntime.java +++ b/pulsar-functions/runtime/src/main/java/org/apache/pulsar/functions/runtime/KubernetesRuntime.java @@ -76,6 +76,7 @@ class KubernetesRuntime implements Runtime { public static final Pattern VALID_POD_NAME_REGEX = Pattern.compile("[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*", Pattern.CASE_INSENSITIVE); + private static final String PULSARFUNCTIONS_CONTAINER_NAME = "pulsarfunction"; private final AppsV1Api appsClient; private final CoreV1Api coreClient; @@ -521,6 +522,9 @@ class KubernetesRuntime implements Runtime { containers.add(getPrometheusContainer()); podSpec.containers(containers); + // Configure secrets + secretsProviderConfigurator.configureKubernetesRuntimeSecretsProvider(podSpec, PULSARFUNCTIONS_CONTAINER_NAME, instanceConfig.getFunctionDetails()); + return podSpec; } @@ -540,7 +544,7 @@ class KubernetesRuntime implements Runtime { } private V1Container getFunctionContainer(List<String> instanceCommand, Function.Resources resource) { - final V1Container container = new V1Container().name("pulsarfunction"); + final V1Container container = new V1Container().name(PULSARFUNCTIONS_CONTAINER_NAME); // set up the container images container.setImage(pulsarDockerImageName); @@ -556,9 +560,6 @@ class KubernetesRuntime implements Runtime { .fieldPath("metadata.name"))); container.addEnvItem(envVarPodName); - // Configure secrets - secretsProviderConfigurator.configureKubernetesRuntimeSecretsProvider(container, instanceConfig.getFunctionDetails()); - // set container resources final V1ResourceRequirements resourceRequirements = new V1ResourceRequirements(); final Map<String, Quantity> requests = new HashMap<>(); diff --git a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/ProcessRuntimeTest.java b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/ProcessRuntimeTest.java index c2f3638..aa385fc 100644 --- a/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/ProcessRuntimeTest.java +++ b/pulsar-functions/runtime/src/test/java/org/apache/pulsar/functions/runtime/ProcessRuntimeTest.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.Map; import io.kubernetes.client.models.V1Container; +import io.kubernetes.client.models.V1PodSpec; import org.apache.pulsar.functions.instance.InstanceConfig; import org.apache.pulsar.functions.proto.Function; import org.apache.pulsar.functions.proto.Function.ConsumerSpec; @@ -70,7 +71,7 @@ public class ProcessRuntimeTest { } @Override - public void configureKubernetesRuntimeSecretsProvider(V1Container container, FunctionDetails functionDetails) { + public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, FunctionDetails functionDetails) { } @Override diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java index 10f9d54..c9b54f5 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/DefaultSecretsProviderConfigurator.java @@ -19,7 +19,7 @@ package org.apache.pulsar.functions.secretsproviderconfigurator; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1Container; +import io.kubernetes.client.models.V1PodSpec; import org.apache.pulsar.functions.proto.Function; import org.apache.pulsar.functions.secretsprovider.ClearTextSecretsProvider; @@ -51,7 +51,7 @@ public class DefaultSecretsProviderConfigurator implements SecretsProviderConfig } @Override - public void configureKubernetesRuntimeSecretsProvider(V1Container container, Function.FunctionDetails functionDetails) { + public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, Function.FunctionDetails functionDetails) { // noop } diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java index 0321734..efefa51 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/KubernetesSecretsProviderConfigurator.java @@ -20,10 +20,7 @@ package org.apache.pulsar.functions.secretsproviderconfigurator; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1EnvVar; -import io.kubernetes.client.models.V1EnvVarSource; -import io.kubernetes.client.models.V1SecretKeySelector; +import io.kubernetes.client.models.*; import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.functions.proto.Function; import org.apache.pulsar.functions.secretsprovider.EnvironmentBasedSecretsProvider; @@ -62,7 +59,17 @@ public class KubernetesSecretsProviderConfigurator implements SecretsProviderCon // environment variables way. Essentially the secretName/secretPath is attached as secretRef to the environment variables // of a pod and kubernetes magically makes the secret pointed to by this combination available as a env variable. @Override - public void configureKubernetesRuntimeSecretsProvider(V1Container container, Function.FunctionDetails functionDetails) { + public void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, Function.FunctionDetails functionDetails) { + V1Container container = null; + for (V1Container v1Container : podSpec.getContainers()) { + if (v1Container.getName().equals(functionsContainerName)) { + container = v1Container; + break; + } + } + if (container == null) { + throw new RuntimeException("No FunctionContainer found"); + } if (!StringUtils.isEmpty(functionDetails.getSecretsMap())) { Type type = new TypeToken<Map<String, Object>>() { }.getType(); diff --git a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java index a1792f1..adbd716 100644 --- a/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java +++ b/pulsar-functions/secrets/src/main/java/org/apache/pulsar/functions/secretsproviderconfigurator/SecretsProviderConfigurator.java @@ -18,7 +18,7 @@ */ package org.apache.pulsar.functions.secretsproviderconfigurator; -import io.kubernetes.client.models.V1Container; +import io.kubernetes.client.models.V1PodSpec; import org.apache.pulsar.functions.proto.Function; import java.lang.reflect.Type; @@ -51,7 +51,7 @@ public interface SecretsProviderConfigurator { /** * Attaches any secrets specific stuff to the k8 container for kubernetes runtime */ - void configureKubernetesRuntimeSecretsProvider(V1Container container, Function.FunctionDetails functionDetails); + void configureKubernetesRuntimeSecretsProvider(V1PodSpec podSpec, String functionsContainerName, Function.FunctionDetails functionDetails); /** * Attaches any secrets specific stuff to the ProcessBuilder for process runtime