You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by iu...@apache.org on 2022/07/04 08:47:59 UTC

[brooklyn-server] branch master updated: Add kubectl job completion timeout config

This is an automated email from the ASF dual-hosted git repository.

iuliana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 6c8fcab24d Add kubectl job completion timeout config
     new a3d37cea44 Merge pull request #1331 from algairim/improvements/container-effector
6c8fcab24d is described below

commit 6c8fcab24d32ce58535a7eababfa346bc0d20dc6
Author: Mykola Mandra <my...@cloudsoft.io>
AuthorDate: Mon Jul 4 09:42:14 2022 +0100

    Add kubectl job completion timeout config
    
    Signed-off-by: Mykola Mandra <my...@cloudsoft.io>
---
 .../java/org/apache/brooklyn/tasks/kubectl/ContainerCommons.java  | 8 +++++---
 .../org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java   | 4 +++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerCommons.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerCommons.java
index c29c6c8b07..6f4064759c 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerCommons.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerCommons.java
@@ -19,14 +19,14 @@
 package org.apache.brooklyn.tasks.kubectl;
 
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.reflect.TypeToken;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.BasicConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.config.SetConfigKey;
 
-import java.util.*;
+import java.util.List;
+import java.util.Map;
 
 @SuppressWarnings({ "rawtypes"})
 public interface ContainerCommons {
@@ -41,6 +41,8 @@ public interface ContainerCommons {
     ConfigKey<List> COMMANDS = ConfigKeys.newConfigKey(List.class,"commands", "Commands to execute for container", Lists.newArrayList());
     ConfigKey<List> ARGUMENTS = ConfigKeys.newConfigKey(List.class,"args", "Arguments to execute for container", Lists.newArrayList());
 
+    ConfigKey<String> TIMEOUT = ConfigKeys.newStringConfigKey("timeout", "Container wait timeout", "5m");
+
     ConfigKey<String> WORKING_DIR = ConfigKeys.newStringConfigKey("workingDir", "Location where the container commands are executed");
     BasicConfigKey<Map<String,String>> VOLUME_MOUNTS = SetConfigKey.builder(new TypeToken<Map<String,String>>()  {}, "volumeMounts")
             .description("Configuration to mount a volume into a container.").defaultValue(null).build();
@@ -51,7 +53,7 @@ public interface ContainerCommons {
     String NAMESPACE_CREATE_CMD = "kubectl create namespace brooklyn-%s"; // namespace name
     String NAMESPACE_SET_CMD = "kubectl config set-context --current --namespace=brooklyn-%s"; // namespace name
     String JOBS_CREATE_CMD = "kubectl apply -f %s"; // deployment.yaml absolute path
-    String JOBS_FEED_CMD = "kubectl wait --for=condition=complete job/%s"; // containerName
+    String JOBS_FEED_CMD = "kubectl wait --timeout=%s --for=condition=complete job/%s"; // timeout, containerName
     String JOBS_LOGS_CMD = "kubectl logs jobs/%s"; // containerName
     String NAMESPACE_DELETE_CMD = "kubectl delete namespace brooklyn-%s"; // namespace name
 
diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
index 9b175a1258..5c7c92756b 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
@@ -71,6 +71,7 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET>  im
                 : containerNameFromCfg).replace(" ", "-")
                 .replace("/", "-")
                 .replace("_", "-")
+                .replaceAll("[^a-z0-9-]", "") // remove other symbols
                 .toLowerCase();
 
         final String jobYamlLocation =  new JobBuilder()
@@ -86,8 +87,9 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET>  im
                 .build();
 
 
+        final String timeout = EntityInitializers.resolve(configBag, TIMEOUT);
         Task<String> runCommandsTask = buildKubeTask(configBag, "Submit job", String.format(JOBS_CREATE_CMD,jobYamlLocation)).asTask();
-        Task<String> waitTask =  buildKubeTask(configBag, "Wait For Completion", String.format(JOBS_FEED_CMD,containerName)).asTask();
+        Task<String> waitTask =  buildKubeTask(configBag, "Wait For Completion", String.format(JOBS_FEED_CMD,timeout,containerName)).asTask();
         if(!devMode) {
             // making these two inessential to insure proper namespace cleanup
             BrooklynTaskTags.addTagDynamically(runCommandsTask, BrooklynTaskTags.INESSENTIAL_TASK);