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

heneveld 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 1b93348544 correclty use pull policy default, and show kubeconfig yaml 
file
1b93348544 is described below

commit 1b93348544be0c4968e133b43f3a429ee4337fd3
Author: Alex Heneveld <[email protected]>
AuthorDate: Wed Sep 6 17:32:05 2023 +0100

    correclty use pull policy default, and show kubeconfig yaml file
---
 .../tasks/kubectl/ContainerTaskFactory.java        | 10 +++---
 .../brooklyn/tasks/kubectl/KubeJobFileCreator.java | 36 ++++++++++++++++++----
 2 files changed, 36 insertions(+), 10 deletions(-)

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 70e6219336..0ca46cda75 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
@@ -42,6 +42,7 @@ import 
org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
 import org.apache.brooklyn.util.core.task.system.SimpleProcessTaskFactory;
 import 
org.apache.brooklyn.util.core.task.system.internal.SystemProcessTaskFactory;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.stream.Streams;
 import org.apache.brooklyn.util.text.Identifiers;
 import org.apache.brooklyn.util.text.StringShortener;
 import org.apache.brooklyn.util.text.Strings;
@@ -124,7 +125,7 @@ public class ContainerTaskFactory<T extends 
ContainerTaskFactory<T,RET>,RET> imp
                     LOG.debug("Submitting container job in namespace 
"+namespace+", name "+kubeJobName);
 
                     Map<String, String> env = new 
ShellEnvironmentSerializer(((EntityInternal)entity).getManagementContext()).serialize(EntityInitializers.resolve(config,
 SHELL_ENVIRONMENT));
-                    final 
BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<File> jobYaml =  new 
KubeJobFileCreator()
+                    KubeJobFileCreator kubeJobFileCreator = new 
KubeJobFileCreator()
                             .withImage(containerImage)
                             .withImagePullPolicy(containerImagePullPolicy)
                             .withName(kubeJobName)
@@ -133,9 +134,10 @@ public class ContainerTaskFactory<T extends 
ContainerTaskFactory<T,RET>,RET> imp
                             .withEnv(env)
                             .withVolumeMounts(volumeMounts)
                             .withVolumes(volumes)
-                            .withWorkingDir(workingDir)
-                            .createFile();
+                            .withWorkingDir(workingDir);
+                    final 
BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<File> jobYaml =  
kubeJobFileCreator.createFile();
                     
Tasks.addTagDynamically(BrooklynTaskTags.tagForEnvStream(BrooklynTaskTags.STREAM_ENV,
 env));
+                    
Tasks.addTagDynamically(BrooklynTaskTags.tagForStream("kube job config", 
Streams.byteArrayOfString(kubeJobFileCreator.getAsString())));
 
                     try {
 
@@ -612,7 +614,7 @@ public class ContainerTaskFactory<T extends 
ContainerTaskFactory<T,RET>,RET> imp
     public T image(String image) { config.put(CONTAINER_IMAGE, image); return 
self(); }
     public T allowingNonZeroExitCode() { return allowingNonZeroExitCode(true); 
}
     public T allowingNonZeroExitCode(boolean allowNonZero) { 
config.put(REQUIRE_EXIT_CODE_ZERO, !allowNonZero); return self(); }
-    public T imagePullPolicy(PullPolicy policy) { 
config.put(CONTAINER_IMAGE_PULL_POLICY, policy); return self(); }
+    public T imagePullPolicy(PullPolicy policy) { if (policy==null) 
config.remove(CONTAINER_IMAGE_PULL_POLICY); else 
config.put(CONTAINER_IMAGE_PULL_POLICY, policy); return self(); }
     @Override
     public T environmentVariables(Map<String,String> map) {
         return environmentVariablesRaw(map);
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/KubeJobFileCreator.java
 
b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/KubeJobFileCreator.java
index 5b090d7442..ac411c34d1 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/KubeJobFileCreator.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/KubeJobFileCreator.java
@@ -34,6 +34,8 @@ import org.yaml.snakeyaml.representer.Representer;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -129,6 +131,18 @@ public class KubeJobFileCreator {
     }
 
     public BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<File> createFile(){
+        JobTemplate jobTemplate = buildJobTemplate();
+        return serializeAndWriteToTempFile(jobTemplate);
+    }
+
+    public String getAsString(){
+        JobTemplate jobTemplate = buildJobTemplate();
+        StringWriter sw = new StringWriter();
+        serializeAndWriteToWriter(jobTemplate, sw);
+        return sw.toString();
+    }
+
+    private JobTemplate buildJobTemplate() {
         JobTemplate jobTemplate = new JobTemplate(jobName);
 
         ContainerSpec containerSpec = 
jobTemplate.getSpec().getTemplate().getContainerSpec(0);
@@ -175,10 +189,23 @@ public class KubeJobFileCreator {
             });
             containerSpec.setVolumeMounts(vms);
         }
-        return serializeAndWriteToTempFile(jobTemplate);
+        return jobTemplate;
     }
 
     private BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<File> 
serializeAndWriteToTempFile(JobTemplate jobTemplate) {
+        try {
+            File jobBodyPath = File.createTempFile(prefix, ".yaml");
+            jobBodyPath.deleteOnExit();  // We should have already deleted it, 
but just in case
+
+            serializeAndWriteToWriter(jobTemplate, new 
PrintWriter(jobBodyPath));
+            LOG.debug("Job body dumped at: {}", jobBodyPath.getAbsolutePath());
+            return new 
BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<>(jobBodyPath, true);
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to create temp file for 
container", e);
+        }
+    }
+
+    private void serializeAndWriteToWriter(JobTemplate jobTemplate, Writer 
writer) {
         DumperOptions options = new DumperOptions();
         options.setIndent(2);
         options.setPrettyFlow(true);
@@ -201,13 +228,10 @@ public class KubeJobFileCreator {
             File jobBodyPath = File.createTempFile(prefix, ".yaml");
             jobBodyPath.deleteOnExit();  // We should have already deleted it, 
but just in case
 
-            PrintWriter sw = new PrintWriter(jobBodyPath);
             Yaml yaml = new Yaml(representer, options);
-            yaml.dump(jobTemplate, sw);
-            LOG.debug("Job body dumped at: {}" , 
jobBodyPath.getAbsolutePath());
-            return new 
BrooklynBomOsgiArchiveInstaller.FileWithTempInfo<>(jobBodyPath, true);
+            yaml.dump(jobTemplate, writer);
         } catch (IOException e) {
-            throw new RuntimeException("Failed to create temp file for 
container", e);
+            throw new RuntimeException("Failed to write job file for 
container", e);
         }
     }
 }

Reply via email to