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;
+ }
}