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 ccc632229cdf4f8a6e8066d542ad186192053cb8 Author: Alex Heneveld <[email protected]> AuthorDate: Wed Jul 20 00:11:32 2022 +0100 add new SimpleProcessTaskFactory interface, fix error in container bashScript arg new shared interface can be used for containers and processes. Function switched from guava to java.util. --- .../core/effector/ssh/SshEffectorTasks.java | 2 +- .../brooklyn/util/core/task/ssh/SshTasks.java | 2 +- .../ssh/internal/AbstractSshExecTaskFactory.java | 2 +- .../task/ssh/internal/PlainSshExecTaskFactory.java | 3 +- .../util/core/task/system/ProcessTaskFactory.java | 54 +++++++++++----------- .../util/core/task/system/ProcessTaskStub.java | 3 +- .../util/core/task/system/ProcessTaskWrapper.java | 5 +- .../core/task/system/SimpleProcessTaskFactory.java | 41 ++++++++++++++++ .../internal/AbstractProcessTaskFactory.java | 15 ++++-- .../system/internal/SystemProcessTaskFactory.java | 1 + .../tasks/kubectl/ContainerTaskFactory.java | 43 +++++++++++------ .../brooklyn/tasks/kubectl/ContainerTaskTest.java | 8 ++-- .../location/winrm/PlainWinRmExecTaskFactory.java | 3 +- 13 files changed, 123 insertions(+), 59 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasks.java b/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasks.java index d101b5c4a0..bf6f0b783b 100644 --- a/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasks.java +++ b/core/src/main/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasks.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.core.effector.ssh; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import javax.annotation.Nullable; @@ -60,7 +61,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.Beta; -import com.google.common.base.Function; import com.google.common.collect.Maps; /** diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java index fd6a6e399a..d732177051 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/SshTasks.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import javax.annotation.Nullable; @@ -59,7 +60,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.annotations.Beta; -import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/AbstractSshExecTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/AbstractSshExecTaskFactory.java index 170040bc54..e61bd7cd01 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/AbstractSshExecTaskFactory.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/AbstractSshExecTaskFactory.java @@ -35,7 +35,7 @@ import org.apache.commons.io.output.TeeOutputStream; import org.apache.commons.io.output.WriterOutputStream; // cannot be (cleanly) instantiated due to nested generic self-referential type; however trivial subclasses do allow it -public abstract class AbstractSshExecTaskFactory<T extends AbstractProcessTaskFactory<T,RET>,RET> extends AbstractProcessTaskFactory<T,RET> implements ProcessTaskFactory<RET> { +public abstract class AbstractSshExecTaskFactory<T extends AbstractProcessTaskFactory<T,RET>,RET> extends AbstractProcessTaskFactory<T,RET> { /** constructor where machine will be added later */ public AbstractSshExecTaskFactory(String ...commands) { diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/PlainSshExecTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/PlainSshExecTaskFactory.java index 3da6d6f9ce..2decc6c11a 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/PlainSshExecTaskFactory.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/ssh/internal/PlainSshExecTaskFactory.java @@ -19,12 +19,11 @@ package org.apache.brooklyn.util.core.task.ssh.internal; import java.util.List; +import java.util.function.Function; import org.apache.brooklyn.location.ssh.SshMachineLocation; import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper; -import com.google.common.base.Function; - /** the "Plain" class exists purely so we can massage return types for callers' convenience */ public class PlainSshExecTaskFactory<RET> extends AbstractSshExecTaskFactory<PlainSshExecTaskFactory<RET>,RET> { /** constructor where machine will be added later */ diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskFactory.java index b0878c3020..b7e8e3aab9 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskFactory.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskFactory.java @@ -18,48 +18,50 @@ */ package org.apache.brooklyn.util.core.task.system; -import java.util.Map; - +import com.google.common.annotations.Beta; import org.apache.brooklyn.api.location.MachineLocation; -import org.apache.brooklyn.api.mgmt.TaskFactory; import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.location.ssh.SshMachineLocation; import org.apache.brooklyn.util.core.internal.ssh.SshTool; import org.apache.brooklyn.util.core.task.system.ProcessTaskStub.ScriptReturnType; -import com.google.common.annotations.Beta; -import com.google.common.base.Function; +import java.util.Map; +import java.util.function.Function; + +public interface ProcessTaskFactory<T> extends SimpleProcessTaskFactory<ProcessTaskFactory<T>,ProcessTaskWrapper<?>,T,ProcessTaskWrapper<T>> { + ProcessTaskFactory<T> machine(MachineLocation machine); + ProcessTaskFactory<T> add(String ...commandsToAdd); + ProcessTaskFactory<T> add(Iterable<String> commandsToAdd); + ProcessTaskFactory<T> requiringExitCodeZero(); + ProcessTaskFactory<T> requiringExitCodeZero(String extraErrorMessage); + @Override ProcessTaskFactory<T> allowingNonZeroExitCode(); + + ProcessTaskFactory<String> requiringZeroAndReturningStdout(); + ProcessTaskFactory<Boolean> returningIsExitCodeZero(); + <RET2> ProcessTaskFactory<RET2> returning(ScriptReturnType type); + @Override ProcessTaskFactory<String> returningStdout(); + @Override ProcessTaskFactory<Integer> returningExitCodeAllowingNonZero(); + @Override <TT2> ProcessTaskFactory<TT2> returning(Function<ProcessTaskWrapper<?>, TT2> resultTransformation); -public interface ProcessTaskFactory<T> extends TaskFactory<ProcessTaskWrapper<T>> { - public ProcessTaskFactory<T> machine(MachineLocation machine); - public ProcessTaskFactory<T> add(String ...commandsToAdd); - public ProcessTaskFactory<T> add(Iterable<String> commandsToAdd); - public ProcessTaskFactory<T> requiringExitCodeZero(); - public ProcessTaskFactory<T> requiringExitCodeZero(String extraErrorMessage); - public ProcessTaskFactory<T> allowingNonZeroExitCode(); - public ProcessTaskFactory<String> requiringZeroAndReturningStdout(); - public ProcessTaskFactory<Boolean> returningIsExitCodeZero(); - public <RET2> ProcessTaskFactory<RET2> returning(ScriptReturnType type); - public <RET2> ProcessTaskFactory<RET2> returning(Function<ProcessTaskWrapper<?>, RET2> resultTransformation); - public ProcessTaskFactory<T> runAsCommand(); - public ProcessTaskFactory<T> runAsScript(); - public ProcessTaskFactory<T> runAsRoot(); - public ProcessTaskFactory<T> environmentVariable(String key, String val); - public ProcessTaskFactory<T> environmentVariables(Map<String,String> vars); - public ProcessTaskFactory<T> summary(String summary); + //public <RET2> ProcessTaskFactory<T0,RET2> returning(Function<ProcessTaskWrapper<T0>, RET2> resultTransformation); + ProcessTaskFactory<T> runAsCommand(); + ProcessTaskFactory<T> runAsScript(); + ProcessTaskFactory<T> runAsRoot(); + @Override ProcessTaskFactory<T> environmentVariable(String key, String val); + @Override ProcessTaskFactory<T> environmentVariables(Map<String,String> vars); + @Override ProcessTaskFactory<T> summary(String summary); /** allows setting config-key based properties for specific underlying tools */ @Beta - public <V> ProcessTaskFactory<T> configure(ConfigKey<V> key, V value); + <V> ProcessTaskFactory<T> configure(ConfigKey<V> key, V value); /** allows setting config-key/flag based properties for specific underlying tools; * but note that if any are prefixed with {@link SshTool#BROOKLYN_CONFIG_KEY_PREFIX} * these should normally be filtered out */ @Beta - public ProcessTaskFactory<T> configure(Map<?,?> flags); + ProcessTaskFactory<T> configure(Map<?,?> flags); /** adds a listener which will be notified of (otherwise) successful completion, * typically used to invalidate the result (ie throw exception, to promote a string in the output to an exception); * invoked even if return code is zero, so a better error can be thrown */ - public ProcessTaskFactory<T> addCompletionListener(Function<ProcessTaskWrapper<?>, Void> function); + ProcessTaskFactory<T> addCompletionListener(Function<ProcessTaskWrapper<?>, Void> function); } diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskStub.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskStub.java index 549ba91d31..471fe54965 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskStub.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskStub.java @@ -21,14 +21,13 @@ package org.apache.brooklyn.util.core.task.system; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Function; import org.apache.brooklyn.api.location.MachineLocation; -import org.apache.brooklyn.location.ssh.SshMachineLocation; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.text.Strings; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskWrapper.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskWrapper.java index 03ca591c0a..4185ca2923 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskWrapper.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/ProcessTaskWrapper.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.util.core.task.system; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.concurrent.Callable; +import java.util.function.Function; import org.apache.brooklyn.api.mgmt.Task; import org.apache.brooklyn.api.mgmt.TaskWrapper; @@ -35,9 +36,7 @@ import org.apache.brooklyn.util.text.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Function; - -/** Wraps a fully constructed process task, and allows callers to inspect status. +/** Wraps a fully constructed process task, and allows callers to inspect status. * Note that methods in here such as {@link #getStdout()} will return partially completed streams while the task is ongoing * (and exit code will be null). You can {@link #block()} or {@link #get()} as conveniences on the underlying {@link #getTask()}. */ public abstract class ProcessTaskWrapper<RET> extends ProcessTaskStub implements TaskWrapper<RET> { diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/SimpleProcessTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/SimpleProcessTaskFactory.java new file mode 100644 index 0000000000..6b4831d2d4 --- /dev/null +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/SimpleProcessTaskFactory.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.util.core.task.system; + +import org.apache.brooklyn.api.mgmt.TaskAdaptable; +import org.apache.brooklyn.api.mgmt.TaskFactory; + +import java.util.Map; +import java.util.function.Function; + +public interface SimpleProcessTaskFactory<SELF extends SimpleProcessTaskFactory<SELF,T0,T,TT>,T0,T,TT extends TaskAdaptable<T>> extends TaskFactory<TT> { + + SELF summary(String summary); + + SELF environmentVariable(String key, String val); + SELF environmentVariables(Map<String,String> vars); + + SELF allowingNonZeroExitCode(); + + SimpleProcessTaskFactory<?,T0,String,?> returningStdout(); + SimpleProcessTaskFactory<?,T0,Integer,?> returningExitCodeAllowingNonZero(); + + <T2> SimpleProcessTaskFactory<?,T0,T2,?> returning(Function<T0, T2> resultTransformation); + +} diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java index d463779ba3..f1a22e6e8e 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/AbstractProcessTaskFactory.java @@ -20,13 +20,13 @@ package org.apache.brooklyn.util.core.task.system.internal; import java.util.Arrays; import java.util.Map; +import java.util.function.Function; import org.apache.brooklyn.api.location.MachineLocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.brooklyn.config.ConfigKey; import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; -import org.apache.brooklyn.location.ssh.SshMachineLocation; import org.apache.brooklyn.util.core.task.TaskBuilder; import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory; import org.apache.brooklyn.util.core.task.system.ProcessTaskStub; @@ -34,7 +34,6 @@ import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper; import org.apache.brooklyn.util.stream.Streams; import org.apache.brooklyn.util.text.Strings; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; @@ -54,7 +53,7 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa protected void markDirty() { dirty = true; } - + @Override public T add(String ...commandsToAdd) { markDirty(); @@ -114,6 +113,16 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa return this.<String>returning(ScriptReturnType.STDOUT_STRING); } + @Override + public ProcessTaskFactory<String> returningStdout() { + return returning(ScriptReturnType.STDOUT_STRING); + } + + @Override + public ProcessTaskFactory<Integer> returningExitCodeAllowingNonZero() { + return allowingNonZeroExitCode().returning(ScriptReturnType.EXIT_CODE); + } + @Override @SuppressWarnings("unchecked") public <RET2> ProcessTaskFactory<RET2> returning(ScriptReturnType type) { diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/SystemProcessTaskFactory.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/SystemProcessTaskFactory.java index 56be6cfc6f..3ecbbe6458 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/SystemProcessTaskFactory.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/SystemProcessTaskFactory.java @@ -21,6 +21,7 @@ package org.apache.brooklyn.util.core.task.system.internal; import java.io.File; import org.apache.brooklyn.api.location.MachineLocation; +import org.apache.brooklyn.util.core.task.system.SimpleProcessTaskFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.brooklyn.core.config.Sanitizer; 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 40d01a47d7..45b17058fa 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 @@ -21,7 +21,6 @@ package org.apache.brooklyn.tasks.kubectl; import com.google.common.collect.Lists; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.mgmt.Task; -import org.apache.brooklyn.api.mgmt.TaskFactory; import org.apache.brooklyn.core.entity.BrooklynConfigKeys; import org.apache.brooklyn.core.entity.Entities; import org.apache.brooklyn.core.entity.EntityInitializers; @@ -38,6 +37,7 @@ import org.apache.brooklyn.util.core.task.Tasks; import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory; import org.apache.brooklyn.util.core.task.system.ProcessTaskStub; 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.text.Strings; @@ -60,7 +60,7 @@ import java.util.stream.Collectors; import static org.apache.brooklyn.tasks.kubectl.ContainerCommons.*; -public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> implements TaskFactory<Task<RET>> { +public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> implements SimpleProcessTaskFactory<T,ContainerTaskFactory.ContainerTaskResult,RET, Task<RET>> { private static final Logger LOG = LoggerFactory.getLogger(ContainerTaskFactory.class); @@ -88,7 +88,7 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> imp if (!argumentsCfg.isEmpty()) LOG.warn("Ignoring 'args' "+argumentsCfg+" because bashScript is set"); commandsCfg = MutableList.of("/bin/bash", "-c"); - List<Object> argumentsCfgO = bashScript instanceof Iterable ? MutableList.copyOf((Iterable) commandsCfg) : MutableList.of(bashScript); + List<Object> argumentsCfgO = bashScript instanceof Iterable ? MutableList.copyOf((Iterable) bashScript) : MutableList.of(bashScript); argumentsCfg = MutableList.of(argumentsCfgO.stream().map(x -> ""+x).collect(Collectors.joining("\n"))); } @@ -126,9 +126,9 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> imp .withImage(containerImage) .withImagePullPolicy(containerImagePullPolicy) .withName(containerName) + .withCommand(Lists.newArrayList(commandsCfg)) .withArgs(argumentsCfg) .withEnv(env) - .withCommand(Lists.newArrayList(commandsCfg)) .withVolumeMounts(volumeMounts) .withVolumes(volumes) .withWorkingDir(workingDir) @@ -263,7 +263,7 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> imp else result.mainExitCode = -1; if (result.mainExitCode!=0 && config.get(REQUIRE_EXIT_CODE_ZERO)) { - LOG.info("Failed container job "+namespace+" (exit code "+result.mainExitCode+") output: "+result.mainExitCode); + LOG.info("Failed container job "+namespace+" (exit code "+result.mainExitCode+") output: "+result.mainStdout); throw new IllegalStateException("Non-zero exit code (" + result.mainExitCode + ") disallowed"); } @@ -298,26 +298,39 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> imp } public T bashScriptCommands(String firstCommandAndArgs, String ...otherCommandAndArgs) { return bashScriptCommands(MutableList.of(firstCommandAndArgs).appendAll(Arrays.asList(otherCommandAndArgs))); } public T image(String image) { config.put(CONTAINER_IMAGE, image); return self(); } - public T allowNonZeroExitCode() { return allowNonZeroExitCode(true); } - public T allowNonZeroExitCode(boolean allowNonZero) { config.put(REQUIRE_EXIT_CODE_ZERO, !allowNonZero); 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 env(Map<String,?> map) { + @Override + public T environmentVariables(Map<String,String> map) { + return environmentVariablesRaw(map); + } + public T environmentVariablesRaw(Map<String,?> map) { config.put(BrooklynConfigKeys.SHELL_ENVIRONMENT, MutableMap.copyOf( map ) ); return self(); } - public T env(String key, Object val) { - return env(MutableMap.copyOf( config.get(BrooklynConfigKeys.SHELL_ENVIRONMENT) ).add(key, val)); + + @Override + public T environmentVariable(String key, String val) { + return this.environmentVariableRaw(key, (Object)val); } - public <RET2,T2 extends ContainerTaskFactory<T2,RET2>> T2 returning(Function<ContainerTaskResult,RET2> conversion) { - T2 result = (T2) self(); + public T environmentVariableRaw(String key, Object val) { + return environmentVariablesRaw(MutableMap.copyOf( config.get(BrooklynConfigKeys.SHELL_ENVIRONMENT) ).add(key, val)); + } + + @Override + public <RET2> ContainerTaskFactory<?,RET2> returning(Function<ContainerTaskResult,RET2> conversion) { + ContainerTaskFactory<?,RET2> result = (ContainerTaskFactory<?,RET2>) self(); result.returnConversion = conversion; return result; } - public <T2 extends ContainerTaskFactory<T2,String>> T2 returningStdout() { + @Override + public ContainerTaskFactory<?,String> returningStdout() { return returning(ContainerTaskResult::getMainStdout); } - public <T2 extends ContainerTaskFactory<T2,Integer>> T2 returningExitCode() { - return returning(ContainerTaskResult::getMainExitCode); + @Override + public ContainerTaskFactory<?,Integer> returningExitCodeAllowingNonZero() { + return allowingNonZeroExitCode().returning(ContainerTaskResult::getMainExitCode); } /** specify the namespace to use, and whether to create or delete it. by default a randomly generated namespace is used and always cleaned up, diff --git a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java index fa9c61df1c..828f9be068 100644 --- a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java +++ b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java @@ -53,7 +53,7 @@ public class ContainerTaskTest extends BrooklynAppUnitTestSupport { .imagePullPolicy(PullPolicy.IF_NOT_PRESENT) .timeout(Duration.TWO_MINUTES) .image("perl") - .command( "/bin/bash", "-c","echo 'hello test'" ) + .command( "/bin/bash", "-c", "echo 'hello test'" ) .newTask(); DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity); @@ -71,7 +71,7 @@ public class ContainerTaskTest extends BrooklynAppUnitTestSupport { .imagePullPolicy(PullPolicy.IF_NOT_PRESENT) .timeout(Duration.TWO_MINUTES) .image("perl") - .env("test_name", "EnvTest") + .environmentVariable("test_name", "EnvTest") .bashScriptCommands("echo hello ${test_name}" ) .newTask(); @@ -110,7 +110,7 @@ public class ContainerTaskTest extends BrooklynAppUnitTestSupport { .timeout(Duration.TWO_MINUTES) .image("perl") .command( "/bin/bash", "-c","echo 'hello test' && exit 42" ) - .allowNonZeroExitCode() + .allowingNonZeroExitCode() .newTask(); DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity); @@ -132,7 +132,7 @@ public class ContainerTaskTest extends BrooklynAppUnitTestSupport { .timeout(Duration.TWO_MINUTES) .image("perl") .bashScriptCommands("echo starting", "sleep 6", "echo done", "exit 42", "echo ignored") - .allowNonZeroExitCode() + .allowingNonZeroExitCode() .newTask(); DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity); diff --git a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/PlainWinRmExecTaskFactory.java b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/PlainWinRmExecTaskFactory.java index 7d719ddc0a..5c04659fac 100644 --- a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/PlainWinRmExecTaskFactory.java +++ b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/PlainWinRmExecTaskFactory.java @@ -19,9 +19,10 @@ package org.apache.brooklyn.location.winrm; import com.google.common.annotations.Beta; -import com.google.common.base.Function; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; +import java.util.function.Function; + import org.apache.brooklyn.core.mgmt.BrooklynTaskTags; import org.apache.brooklyn.util.core.internal.winrm.winrm4j.PrettyXmlWriter; import org.apache.brooklyn.util.core.task.TaskBuilder;
