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

commit d3f34ab10ab9d58e971390a301a236143ca936da
Author: Alex Heneveld <[email protected]>
AuthorDate: Wed Aug 24 12:09:40 2022 +0100

    provide more visibility of container lifecycle
    
    so consumers can tell when a container is up, should they wish to use it 
e.g. for a `kubectl cp` command
---
 .../brooklyn/tasks/kubectl/ContainerTaskFactory.java       |  4 ++++
 .../apache/brooklyn/tasks/kubectl/ContainerTaskResult.java | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

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 310888cf08..0cb3cd9236 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
@@ -195,6 +195,7 @@ public class ContainerTaskFactory<T extends 
ContainerTaskFactory<T,RET>,RET> imp
 
                             // wait for it to be running (or failed / 
succeeded) -
                             PodPhases phaseOnceActive = 
waitForContainerAvailable(entity, kubeJobName, result, timer);
+                            result.containerStarted = true;
 //                            waitForContainerPodContainerState(kubeJobName, 
result, timer);
 
                             // notify once pod is available
@@ -221,6 +222,9 @@ public class ContainerTaskFactory<T extends 
ContainerTaskFactory<T,RET>,RET> imp
                             if (Strings.isNonBlank(exitCodeS)) 
result.mainExitCode = Integer.parseInt(exitCodeS.trim());
                             else result.mainExitCode = -1;
 
+                            result.containerEnded = true;
+                            synchronized (result) { result.notifyAll(); }
+
                             if (result.mainExitCode!=0 && 
config.get(REQUIRE_EXIT_CODE_ZERO)) {
                                 LOG.info("Failed container job "+namespace+" 
(exit code "+result.mainExitCode+") output: "+result.mainStdout);
                                 throw new IllegalStateException("Non-zero exit 
code (" + result.mainExitCode + ") disallowed");
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskResult.java
 
b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskResult.java
index 22cfe13d46..e0fd5f08c1 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskResult.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskResult.java
@@ -18,12 +18,17 @@
  */
 package org.apache.brooklyn.tasks.kubectl;
 
+/**
+ * Object containing details of a container task. This object is notified when 
containerStarted and containerEnded are set.
+ */
 public class ContainerTaskResult {
     String mainStdout;
     Integer mainExitCode;
     String namespace;
     String kubeJobName;
     public String kubePodName;
+    boolean containerStarted = false;
+    boolean containerEnded = false;
 
     /**
      * This will be 0 unless allowNonZeroExitCode was specified
@@ -47,4 +52,13 @@ public class ContainerTaskResult {
     public String getKubePodName() {
         return kubePodName;
     }
+
+    /** indicates container has started; namespace, pod name and job name will 
be available now */
+    public boolean getContainerStarted() {
+        return containerStarted;
+    }
+    /** indicates container has ended; all output will be set */
+    public boolean getContainerEnded() {
+        return containerEnded;
+    }
 }

Reply via email to