You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/08/24 12:27:30 UTC

[brooklyn-server] 01/05: provide more visibility of container lifecycle

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 <al...@cloudsoft.io>
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;
+    }
 }