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/07/29 13:53:36 UTC
[brooklyn-server] 03/06: update other files to use new BashCommandsConfigurable rather than statics
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 e2084ef0da333d6d7ff39e45cc77869b237e01e7
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Fri Jul 29 02:08:56 2022 +0100
update other files to use new BashCommandsConfigurable rather than statics
---
.../core/effector/ssh/SshEffectorTasks.java | 34 ++++---
.../LocalhostMachineProvisioningLocation.java | 2 +-
.../brooklyn/util/core/file/ArchiveUtils.java | 15 ++-
.../util/core/internal/ssh/ShellAbstractTool.java | 1 +
.../brooklyn/util/core/task/ssh/SshTasks.java | 21 ++--
.../ssh/internal/AbstractSshExecTaskFactory.java | 4 +-
.../util/core/task/system/ProcessTaskFactory.java | 2 +
.../util/core/task/system/ProcessTaskStub.java | 11 ++-
.../util/core/task/system/ProcessTaskWrapper.java | 2 +-
.../internal/AbstractProcessTaskFactory.java | 14 ++-
.../system/internal/SystemProcessTaskFactory.java | 4 +-
.../persist/deserializingClassRenames.properties | 4 +-
.../core/effector/ssh/SshEffectorTasksTest.java | 5 +-
.../util/core/ssh/BashCommandsIntegrationTest.java | 109 ++++++++++-----------
.../brooklyn/location/jclouds/JcloudsLocation.java | 43 ++++----
.../policy/jclouds/os/CreateUserPolicy.java | 11 ++-
.../location/jclouds/JcloudsSuseLiveTest.java | 4 +-
...eJcloudsLocationUserLoginAndConfigLiveTest.java | 5 +-
.../brooklyn/entity/brooklynnode/BrooklynNode.java | 4 +-
.../entity/brooklynnode/BrooklynNodeSshDriver.java | 7 +-
.../entity/java/JavaSoftwareProcessSshDriver.java | 7 +-
.../brooklyn/entity/machine/MachineInitTasks.java | 31 +++---
.../entity/machine/SetHostnameCustomizer.java | 12 ++-
.../entity/machine/SetLimitsCustomizer.java | 4 +-
.../base/AbstractSoftwareProcessSshDriver.java | 26 ++---
.../base/VanillaSoftwareProcessSshDriver.java | 8 +-
.../system_service/InitdServiceInstaller.java | 14 +--
.../entity/AbstractMultiDistroLiveTest.java | 5 +-
.../test/mysql/DynamicToyMySqlEntityBuilder.java | 21 ++--
.../system_service/SystemServiceEnricherTest.java | 4 +-
.../util/ssh/IptablesCommandsFirewalldTest.java | 21 ++--
.../brooklyn/util/ssh/IptablesCommandsTest.java | 20 ++--
32 files changed, 269 insertions(+), 206 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 bf6f0b783b..1ea2b816b6 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
@@ -56,7 +56,7 @@ import org.apache.brooklyn.util.core.task.ssh.internal.PlainSshExecTaskFactory;
import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.guava.Maybe;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -253,20 +253,24 @@ public class SshEffectorTasks {
}
+ @Deprecated /** @deprecated since 1.1 supply bash context */
+ public static SshEffectorTaskFactory<Integer> codePidFromFileRunning(final String pidFile) {
+ return codePidFromFileRunning(BashCommandsConfigurable.newInstance(), pidFile);
+ }
/** task which returns 0 if pid in the given file is running;
* method accepts wildcards so long as they match a single file on the remote end
* <p>
* returns 1 if no matching file,
* 1 if matching file but no matching process,
* and 2 if 2+ matching files */
- public static SshEffectorTaskFactory<Integer> codePidFromFileRunning(final String pidFile) {
- return ssh(BashCommands.chain(
+ public static SshEffectorTaskFactory<Integer> codePidFromFileRunning(BashCommandsConfigurable bash, final String pidFile) {
+ return ssh(bash.chain(
// this fails, but isn't an error
- BashCommands.requireTest("-f "+pidFile, "The PID file "+pidFile+" does not exist."),
+ bash.requireTest("-f "+pidFile, "The PID file "+pidFile+" does not exist."),
// this fails and logs an error picked up later
- BashCommands.requireTest("`ls "+pidFile+" | wc -w` -eq 1", "ERROR: there are multiple matching PID files"),
+ bash.requireTest("`ls "+pidFile+" | wc -w` -eq 1", "ERROR: there are multiple matching PID files"),
// this fails and logs an error picked up later
- BashCommands.require("cat "+pidFile, "ERROR: the PID file "+pidFile+" cannot be read (permissions?)."),
+ bash.require("cat "+pidFile, "ERROR: the PID file "+pidFile+" cannot be read (permissions?)."),
// finally check the process
"ps -p `cat "+pidFile+"`")).summary("PID file "+pidFile+" is-running check (exit code)")
.allowingNonZeroExitCode()
@@ -279,18 +283,26 @@ public class SshEffectorTasks {
}
});
}
-
+
+ @Deprecated /** @deprecated since 1.1 supply bash context */
+ public static SshEffectorTaskFactory<?> requirePidFromFileRunning(String pidFile) {
+ return requirePidFromFileRunning(BashCommandsConfigurable.newInstance(), pidFile);
+ }
/** task which fails if the pid in the given file is not running (or if there is no such PID file);
* method accepts wildcards so long as they match a single file on the remote end (fails if 0 or 2+ matching files) */
- public static SshEffectorTaskFactory<?> requirePidFromFileRunning(String pidFile) {
- return codePidFromFileRunning(pidFile)
+ public static SshEffectorTaskFactory<?> requirePidFromFileRunning(BashCommandsConfigurable bash, String pidFile) {
+ return codePidFromFileRunning(bash, pidFile)
.summary("PID file "+pidFile+" is-running check (required)")
.requiringExitCodeZero("Process with PID from file "+pidFile+" is required to be running");
}
- /** as {@link #codePidFromFileRunning(String)} but returning boolean */
+ @Deprecated /** @deprecated since 1.1 supply bash context */
public static SshEffectorTaskFactory<Boolean> isPidFromFileRunning(String pidFile) {
- return codePidFromFileRunning(pidFile).summary("PID file "+pidFile+" is-running check (boolean)").
+ return isPidFromFileRunning(BashCommandsConfigurable.newInstance(), pidFile);
+ }
+ /** as {@link #codePidFromFileRunning(BashCommandsConfigurable, String)} but returning boolean */
+ public static SshEffectorTaskFactory<Boolean> isPidFromFileRunning(BashCommandsConfigurable bash, String pidFile) {
+ return codePidFromFileRunning(bash, pidFile).summary("PID file "+pidFile+" is-running check (boolean)").
returning(new Function<ProcessTaskWrapper<?>, Boolean>() {
@Override
public Boolean apply(@Nullable ProcessTaskWrapper<?> input) { return ((Integer)0).equals(input.getExitCode()); }
diff --git a/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java b/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
index 8656f5dd9b..e0537baacc 100644
--- a/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/location/localhost/LocalhostMachineProvisioningLocation.java
@@ -51,10 +51,10 @@ import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.core.internal.ssh.process.ProcessTool;
import org.apache.brooklyn.util.core.mutex.MutexSupport;
import org.apache.brooklyn.util.core.mutex.WithMutexes;
-import org.apache.brooklyn.util.exceptions.UserFacingException;
import org.apache.brooklyn.util.net.Networking;
import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
import org.slf4j.Logger;
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveUtils.java b/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveUtils.java
index ea103f2b5c..2f16f0baed 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/file/ArchiveUtils.java
@@ -45,7 +45,8 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.javalang.StackTraceSimplifier;
import org.apache.brooklyn.util.net.Urls;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
@@ -109,19 +110,23 @@ public class ArchiveUtils {
}
}
+ @Deprecated /** @deprecated since 1.1 use {@link IptablesCommandsConfigurable} */
+ public static List<String> installCommands(String fileName) {
+ return installCommands(BashCommandsConfigurable.newInstance(), fileName);
+ }
/**
* Returns the list of commands used to install support for an archive with the given name.
*/
- public static List<String> installCommands(String fileName) {
+ public static List<String> installCommands(BashCommandsConfigurable bash, String fileName) {
List<String> commands = new LinkedList<String>();
switch (ArchiveType.of(fileName)) {
case TAR:
case TGZ:
case TBZ:
- commands.add(BashCommands.INSTALL_TAR);
+ commands.add(bash.INSTALL_TAR);
break;
case ZIP:
- commands.add(BashCommands.INSTALL_UNZIP);
+ commands.add(bash.INSTALL_UNZIP);
break;
case JAR:
case WAR:
@@ -281,7 +286,7 @@ public class ArchiveUtils {
}
// extract, now using task if available
- MutableList<String> commands = MutableList.copyOf(installCommands(destFile))
+ MutableList<String> commands = MutableList.copyOf(installCommands(BrooklynOsCommands.bash(machine.getManagementContext()), destFile))
.appendAll(extractCommands(destFile, tmpDir, destDir, false, keepArchiveAfterUnpacking));
if (DynamicTasks.getTaskQueuingContext()!=null) {
result = DynamicTasks.queue(SshTasks.newSshExecTaskFactory(machine, commands.toArray(new String[0])).summary("extracting archive").requiringExitCodeZero()).get();
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
index befef2e33d..eb1e9cbbb2 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/ShellAbstractTool.java
@@ -37,6 +37,7 @@ import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.core.flags.TypeCoercions;
import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes;
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 d732177051..16066e9967 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
@@ -42,8 +42,10 @@ import org.apache.brooklyn.core.location.AbstractLocation;
import org.apache.brooklyn.core.location.internal.LocationInternal;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableSet;
import org.apache.brooklyn.util.core.ResourceUtils;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.Tasks;
@@ -52,7 +54,7 @@ import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.net.Urls;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
@@ -178,10 +180,17 @@ public class SshTasks {
}
final String id = Identifiers.makeRandomId(6);
- return newSshExecTaskFactory(machine,
- BashCommands.dontRequireTtyForSudo(),
- // strange quotes are to ensure we don't match against echoed stdin
- BashCommands.sudo("echo \"sudo\"-is-working-"+id))
+ return newSshExecTaskFactory(machine, "(commands to modify sudo config to allow tty)")
+ .commandModifier(x -> {
+ Entity entity = BrooklynTaskTags.getTargetOrContextEntity(Tasks.current());
+ BashCommandsConfigurable bash;
+ if (entity!=null) bash = BrooklynOsCommands.bash(entity);
+ else bash = BrooklynOsCommands.bash(machine.getManagementContext());
+ return MutableList.of(
+ bash.dontRequireTtyForSudo(),
+ // strange quotes are to ensure we don't match against echoed stdin
+ bash.sudo("echo \"sudo\"-is-working-"+id));
+ })
.summary("patch /etc/sudoers to disable requiretty")
.configure(SshTool.PROP_ALLOCATE_PTY, true)
.allowingNonZeroExitCode()
@@ -216,7 +225,7 @@ public class SshTasks {
return new Function<ProcessTaskWrapper<?>, String>() {
@Override
public String apply(@Nullable ProcessTaskWrapper<?> input) {
- if (logger!=null) logger.info(input+" COMMANDS:\n"+Strings.join(input.getCommands(),"\n"));
+ if (logger!=null) logger.info(input+" COMMANDS:\n"+Strings.join(input.getCommands(true),"\n"));
if (logger!=null) logger.info(input+" STDOUT:\n"+input.getStdout());
if (logger!=null) logger.info(input+" STDERR:\n"+input.getStderr());
if (requireZero && input.getExitCode()!=0)
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 e61bd7cd01..4e9e08e0c0 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
@@ -60,9 +60,9 @@ public abstract class AbstractSshExecTaskFactory<T extends AbstractProcessTaskFa
protected void run(ConfigBag config) {
Preconditions.checkNotNull(getMachine(), "machine");
if (Boolean.FALSE.equals(this.runAsScript)) {
- this.exitCode = getMachine().execCommands(config.getAllConfig(), getSummary(), commands, shellEnvironment);
+ this.exitCode = getMachine().execCommands(config.getAllConfig(), getSummary(), getCommands(true), shellEnvironment);
} else { // runScript = null or TRUE
- this.exitCode = getMachine().execScript(config.getAllConfig(), getSummary(), commands, shellEnvironment);
+ this.exitCode = getMachine().execScript(config.getAllConfig(), getSummary(), getCommands(true), shellEnvironment);
}
}
@Override
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 b7e8e3aab9..a46436d188 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
@@ -24,6 +24,7 @@ import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import org.apache.brooklyn.util.core.task.system.ProcessTaskStub.ScriptReturnType;
+import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -46,6 +47,7 @@ public interface ProcessTaskFactory<T> extends SimpleProcessTaskFactory<ProcessT
ProcessTaskFactory<T> runAsCommand();
ProcessTaskFactory<T> runAsScript();
ProcessTaskFactory<T> runAsRoot();
+ ProcessTaskFactory<T> commandModifier(Function<List<String>, List<String>> modifier);
@Override ProcessTaskFactory<T> environmentVariable(String key, String val);
@Override ProcessTaskFactory<T> environmentVariables(Map<String,String> vars);
@Override ProcessTaskFactory<T> summary(String summary);
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 471fe54965..522dec4d40 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
@@ -39,6 +39,7 @@ public class ProcessTaskStub {
// config data
protected String summary;
+ protected Function<List<String>,List<String>> commandModifier;
protected final ConfigBag config = ConfigBag.newInstance();
public static enum ScriptReturnType { CUSTOM, EXIT_CODE, STDOUT_STRING, STDOUT_BYTES, STDERR_STRING, STDERR_BYTES }
@@ -53,12 +54,13 @@ public class ProcessTaskStub {
protected final List<Function<ProcessTaskWrapper<?>, Void>> completionListeners = new ArrayList<Function<ProcessTaskWrapper<?>,Void>>();
public ProcessTaskStub() {}
-
+
protected ProcessTaskStub(ProcessTaskStub source) {
- commands.addAll(source.getCommands());
+ commands.addAll(source.getCommands(false));
machine = source.getMachine();
summary = source.getSummary();
config.copy(source.getConfig());
+ commandModifier = source.commandModifier;
returnResultTransformation = source.returnResultTransformation;
returnType = source.returnType;
runAsScript = source.runAsScript;
@@ -89,7 +91,10 @@ public class ProcessTaskStub {
}
public List<String> getCommands() {
- return ImmutableList.copyOf(commands);
+ return getCommands(false);
+ }
+ public List<String> getCommands(boolean modified) {
+ return ImmutableList.copyOf(modified && commandModifier!=null ? commandModifier.apply(commands) : commands);
}
public List<Function<ProcessTaskWrapper<?>, Void>> getCompletionListeners() {
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 4185ca2923..e19bc40f0e 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
@@ -145,7 +145,7 @@ public abstract class ProcessTaskWrapper<RET> extends ProcessTaskStub implements
log.warn(message+" (throwing)");
logProblemDetails("STDERR", stderrForReading(), 1024);
logProblemDetails("STDOUT", stdoutForReading(), 1024);
- logProblemDetails("STDIN", Streams.byteArrayOfString(Strings.join(commands,"\n")), 4096);
+ logProblemDetails("STDIN", Streams.byteArrayOfString(Strings.join(getCommands(true),"\n")), 4096);
if (optionalCause!=null) throw new IllegalStateException(message, optionalCause);
throw new IllegalStateException(message);
}
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 f1a22e6e8e..b76a228eaf 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
@@ -19,8 +19,10 @@
package org.apache.brooklyn.util.core.task.system.internal;
import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import java.util.function.Function;
+import java.util.function.Supplier;
import org.apache.brooklyn.api.location.MachineLocation;
import org.slf4j.Logger;
@@ -61,6 +63,10 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa
return self();
}
+ public List<String> getCommands() {
+ return this.commands;
+ }
+
@Override
public T add(Iterable<String> commandsToAdd) {
Iterables.addAll(this.commands, commandsToAdd);
@@ -183,7 +189,7 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa
TaskBuilder<Object> tb = TaskBuilder.builder().dynamic(false).displayName(displayName);
tb.tag(BrooklynTaskTags.tagForStream(BrooklynTaskTags.STREAM_STDIN,
- Streams.byteArrayOfString(Strings.join(commands, "\n"))));
+ Streams.byteArrayOfString(Strings.join(getCommands(true), "\n"))));
tb.tag(BrooklynTaskTags.tagForEnvStream(BrooklynTaskTags.STREAM_ENV, shellEnvironment));
return tb;
@@ -196,6 +202,12 @@ public abstract class AbstractProcessTaskFactory<T extends AbstractProcessTaskFa
return self();
}
+ /** allows caller to supply a command modifier, used to modify the commands set up. */
+ public T commandModifier(Function<List<String>, List<String>> commandModifier) {
+ this.commandModifier = commandModifier;
+ return self();
+ }
+
@Override
public <V> T configure(ConfigKey<V> key, V value) {
config.configure(key, value);
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 3ecbbe6458..b15c9df3c0 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
@@ -93,9 +93,9 @@ public class SystemProcessTaskFactory<T extends SystemProcessTaskFactory<T,RET>,
@Override
protected void run(ConfigBag config) {
if (Boolean.FALSE.equals(this.runAsScript)) {
- this.exitCode = newExecWithLoggingHelpers().execCommands(config.getAllConfig(), getSummary(), getCommands(), getShellEnvironment());
+ this.exitCode = newExecWithLoggingHelpers().execCommands(config.getAllConfig(), getSummary(), getCommands(true), getShellEnvironment());
} else { // runScript = null or TRUE
- this.exitCode = newExecWithLoggingHelpers().execScript(config.getAllConfig(), getSummary(), getCommands(), getShellEnvironment());
+ this.exitCode = newExecWithLoggingHelpers().execScript(config.getAllConfig(), getSummary(), getCommands(true), getShellEnvironment());
}
}
@Override
diff --git a/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties b/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties
index 857941732e..115a8e5806 100644
--- a/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties
+++ b/core/src/main/resources/org/apache/brooklyn/core/mgmt/persist/deserializingClassRenames.properties
@@ -1345,8 +1345,8 @@ brooklyn.util.os.Os
brooklyn.util.pool.BasicPool : org.apache.brooklyn.util.pool.BasicPool
brooklyn.util.pool.Lease : org.apache.brooklyn.util.pool.Lease
brooklyn.util.pool.Pool : org.apache.brooklyn.util.pool.Pool
-brooklyn.util.ssh.BashCommands : org.apache.brooklyn.util.ssh.BashCommands
-brooklyn.util.ssh.IptablesCommands : org.apache.brooklyn.util.ssh.IptablesCommands
+brooklyn.util.ssh.BashCommands : org.apache.brooklyn.util.ssh.BashCommandsConfigurable
+brooklyn.util.ssh.IptablesCommands : org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable
brooklyn.util.stream.DelegatingPrintStream : org.apache.brooklyn.util.stream.DelegatingPrintStream
brooklyn.util.stream.IllegalOutputStream : org.apache.brooklyn.util.stream.IllegalOutputStream
brooklyn.util.stream.KnownSizeInputStream : org.apache.brooklyn.util.stream.KnownSizeInputStream
diff --git a/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasksTest.java b/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasksTest.java
index 0e22470ea0..327fe74152 100644
--- a/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasksTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/effector/ssh/SshEffectorTasksTest.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.util.core.task.ssh.SshPutTaskWrapper;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.exceptions.PropagatedRuntimeException;
import org.apache.brooklyn.util.net.Urls;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -188,9 +189,9 @@ public class SshEffectorTasksTest {
public void testRunningPidFromFile() throws IOException {
File f = File.createTempFile("testBrooklynPid", ".pid");
Files.write( (""+getMyPid()).getBytes(), f );
- ProcessTaskWrapper<Integer> t = submit(SshEffectorTasks.codePidFromFileRunning(f.getPath()));
+ ProcessTaskWrapper<Integer> t = submit(SshEffectorTasks.codePidFromFileRunning(BashCommandsConfigurable.newInstance(), f.getPath()));
Assert.assertEquals(t.getTask().getUnchecked(), (Integer)0);
- ProcessTaskWrapper<Boolean> t2 = submit(SshEffectorTasks.isPidFromFileRunning(f.getPath()));
+ ProcessTaskWrapper<Boolean> t2 = submit(SshEffectorTasks.isPidFromFileRunning(BashCommandsConfigurable.newInstance(), f.getPath()));
Assert.assertTrue(t2.getTask().getUnchecked());
}
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/ssh/BashCommandsIntegrationTest.java b/core/src/test/java/org/apache/brooklyn/util/core/ssh/BashCommandsIntegrationTest.java
index 311bce7d38..d6699ced71 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/ssh/BashCommandsIntegrationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/ssh/BashCommandsIntegrationTest.java
@@ -18,23 +18,14 @@
*/
package org.apache.brooklyn.util.core.ssh;
-import static java.lang.String.format;
-import static org.apache.brooklyn.util.ssh.BashCommands.sudo;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotEquals;
-import static org.testng.Assert.assertTrue;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
+import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.io.Files;
import org.apache.brooklyn.core.test.BrooklynMgmtUnitTestSupport;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.test.DisableOnWindows;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.core.task.BasicExecutionContext;
@@ -43,7 +34,7 @@ import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.apache.brooklyn.util.net.Networking;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
@@ -54,13 +45,17 @@ import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation;
-import org.apache.brooklyn.location.ssh.SshMachineLocation;
-import com.google.common.base.Charsets;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.io.Files;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import static java.lang.String.format;
+import static org.testng.Assert.*;
public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@@ -83,7 +78,9 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
private File localRepoEntityBasePath;
private String localRepoEntityVersionPath;
private File localRepoEntityFile;
-
+
+ private final BashCommandsConfigurable bashTestInstance = BashCommandsConfigurable.newInstance();
+
@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
super.setUp();
@@ -136,7 +133,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@Test(groups="Integration")
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testRemoveRequireTtyFromSudoersFile() throws Exception {
- String cmds = BashCommands.dontRequireTtyForSudo();
+ String cmds = bashTestInstance.dontRequireTtyForSudo();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
@@ -160,7 +157,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
public void testSudo() throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ByteArrayOutputStream errStream = new ByteArrayOutputStream();
- String cmd = sudo("whoami");
+ String cmd = bashTestInstance.sudo("whoami");
int exitcode = loc.execCommands(ImmutableMap.of("out", outStream, "err", errStream), "test", ImmutableList.of(cmd));
String outstr = new String(outStream.toByteArray());
String errstr = new String(errStream.toByteArray());
@@ -170,7 +167,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
}
public void testDownloadUrl() throws Exception {
- List<String> cmds = BashCommands.commandsToDownloadUrlsAs(
+ List<String> cmds = bashTestInstance.commandsToDownloadUrlsAs(
ImmutableList.of(sourceFileUrl1),
destFile.getAbsolutePath());
int exitcode = loc.execCommands("test", cmds);
@@ -182,7 +179,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@Test(groups="Integration")
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testDownloadFirstSuccessfulFile() throws Exception {
- List<String> cmds = BashCommands.commandsToDownloadUrlsAs(
+ List<String> cmds = bashTestInstance.commandsToDownloadUrlsAs(
ImmutableList.of(sourceNonExistantFileUrl, sourceFileUrl1, sourceFileUrl2),
destFile.getAbsolutePath());
int exitcode = loc.execCommands("test", cmds);
@@ -196,7 +193,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
public void testDownloadToStdout() throws Exception {
ProcessTaskWrapper<String> t = SshTasks.newSshExecTaskFactory(loc,
"cd "+destFile.getParentFile().getAbsolutePath(),
- BashCommands.downloadToStdout(Arrays.asList(sourceFileUrl1))+" | sed s/my/your/")
+ bashTestInstance.downloadToStdout(Arrays.asList(sourceFileUrl1))+" | sed s/my/your/")
.requiringZeroAndReturningStdout().newTask();
String result = exec.submit(t).get();
@@ -207,7 +204,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testAlternativesWhereFirstSucceeds() throws Exception {
ProcessTaskWrapper<Integer> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.alternatives(Arrays.asList("echo first", "exit 88")))
+ .add(bashTestInstance.alternatives(Arrays.asList("echo first", "exit 88")))
.newTask();
Integer returnCode = exec.submit(t).get();
@@ -222,7 +219,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testAlternatives() throws Exception {
ProcessTaskWrapper<Integer> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.alternatives(Arrays.asList("asdfj_no_such_command_1", "exit 88")))
+ .add(bashTestInstance.alternatives(Arrays.asList("asdfj_no_such_command_1", "exit 88")))
.newTask();
Integer returnCode = exec.submit(t).get();
@@ -234,7 +231,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testRequireTestHandlesFailure() throws Exception {
ProcessTaskWrapper<?> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.requireTest("-f "+sourceNonExistantFile.getPath(),
+ .add(bashTestInstance.requireTest("-f "+sourceNonExistantFile.getPath(),
"The requested file does not exist")).newTask();
exec.submit(t).get();
@@ -247,7 +244,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testRequireTestHandlesSuccess() throws Exception {
ProcessTaskWrapper<?> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.requireTest("-f "+sourceFile1.getPath(),
+ .add(bashTestInstance.requireTest("-f "+sourceFile1.getPath(),
"The requested file does not exist")).newTask();
exec.submit(t).get();
@@ -259,7 +256,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testRequireFileHandlesFailure() throws Exception {
ProcessTaskWrapper<?> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.requireFile(sourceNonExistantFile.getPath())).newTask();
+ .add(bashTestInstance.requireFile(sourceNonExistantFile.getPath())).newTask();
exec.submit(t).get();
assertNotEquals(t.getExitCode(), 0);
@@ -273,7 +270,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testRequireFileHandlesSuccess() throws Exception {
ProcessTaskWrapper<?> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.requireFile(sourceFile1.getPath())).newTask();
+ .add(bashTestInstance.requireFile(sourceFile1.getPath())).newTask();
exec.submit(t).get();
assertEquals(t.getExitCode(), (Integer)0);
@@ -284,7 +281,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs an ssh server listening on port 22 on localhost")
public void testRequireFailureExitsImmediately() throws Exception {
ProcessTaskWrapper<?> t = SshTasks.newSshExecTaskFactory(loc)
- .add(BashCommands.requireTest("-f "+sourceNonExistantFile.getPath(),
+ .add(bashTestInstance.requireTest("-f "+sourceNonExistantFile.getPath(),
"The requested file does not exist"))
.add("echo shouldnae come here").newTask();
@@ -299,7 +296,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testPipeMultiline() throws Exception {
String output = execRequiringZeroAndReturningStdout(loc,
- BashCommands.pipeTextTo("hello world\n"+"and goodbye\n", "wc")).get();
+ bashTestInstance.pipeTextTo("hello world\n"+"and goodbye\n", "wc")).get();
assertEquals(Strings.replaceAllRegex(output, "\\s+", " ").trim(), "3 4 25");
}
@@ -308,7 +305,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testWaitForFileContentsWhenAbortingOnFail() throws Exception {
String fileContent = "mycontents";
- String cmd = BashCommands.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.ONE_SECOND, true);
+ String cmd = bashTestInstance.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.ONE_SECOND, true);
int exitcode = loc.execCommands("test", ImmutableList.of(cmd));
assertEquals(exitcode, 1);
@@ -322,7 +319,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testWaitForFileContentsWhenNotAbortingOnFail() throws Exception {
String fileContent = "mycontents";
- String cmd = BashCommands.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.ONE_SECOND, false);
+ String cmd = bashTestInstance.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.ONE_SECOND, false);
String output = execRequiringZeroAndReturningStdout(loc, cmd).get();
assertTrue(output.contains("Couldn't find"), "output="+output);
@@ -337,7 +334,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
public void testWaitForFileContentsWhenContentsAppearAfterStart() throws Exception {
String fileContent = "mycontents";
- String cmd = BashCommands.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.THIRTY_SECONDS, false);
+ String cmd = bashTestInstance.waitForFileContents(destFile.getAbsolutePath(), fileContent, Duration.THIRTY_SECONDS, false);
ProcessTaskWrapper<String> t = execRequiringZeroAndReturningStdout(loc, cmd);
exec.submit(t);
@@ -353,7 +350,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@Test(groups="Integration")
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testWaitForFileExistsWhenAbortingOnFail() throws Exception {
- String cmd = BashCommands.waitForFileExists(destFile.getAbsolutePath(), Duration.ONE_SECOND, true);
+ String cmd = bashTestInstance.waitForFileExists(destFile.getAbsolutePath(), Duration.ONE_SECOND, true);
int exitcode = loc.execCommands("test", ImmutableList.of(cmd));
assertEquals(exitcode, 0);
@@ -366,7 +363,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
@Test(groups="Integration")
@DisableOnWindows(reason = "Needs a bash shell available on localhost")
public void testWaitForFileExistsWhenNotAbortingOnFail() throws Exception {
- String cmd = BashCommands.waitForFileExists(destFile.getAbsolutePath(), Duration.ONE_SECOND, false);
+ String cmd = bashTestInstance.waitForFileExists(destFile.getAbsolutePath(), Duration.ONE_SECOND, false);
String output = execRequiringZeroAndReturningStdout(loc, cmd).get();
assertFalse(output.contains("Couldn't find"), "output="+output);
@@ -382,7 +379,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
ServerSocket serverSocket = openServerSocket();
try {
int port = serverSocket.getLocalPort();
- String cmd = BashCommands.waitForPortFree(port, Duration.ONE_SECOND, true);
+ String cmd = bashTestInstance.waitForPortFree(port, Duration.ONE_SECOND, true);
int exitcode = loc.execCommands("test", ImmutableList.of(cmd));
assertEquals(exitcode, 1);
@@ -402,7 +399,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
ServerSocket serverSocket = openServerSocket();
try {
int port = serverSocket.getLocalPort();
- String cmd = BashCommands.waitForPortFree(port, Duration.ONE_SECOND, false);
+ String cmd = bashTestInstance.waitForPortFree(port, Duration.ONE_SECOND, false);
String output = execRequiringZeroAndReturningStdout(loc, cmd).get();
assertTrue(output.contains(port+" still in use"), "output="+output);
@@ -423,7 +420,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
try {
int port = serverSocket.getLocalPort();
- String cmd = BashCommands.waitForPortFree(port, Duration.THIRTY_SECONDS, false);
+ String cmd = bashTestInstance.waitForPortFree(port, Duration.THIRTY_SECONDS, false);
ProcessTaskWrapper<String> t = execRequiringZeroAndReturningStdout(loc, cmd);
exec.submit(t);
@@ -470,15 +467,15 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
LocalManagementContextForTests mgmt = new LocalManagementContextForTests();
SshMachineLocation loc = mgmt.getLocationManager().createLocation(LocalhostMachineProvisioningLocation.spec()).obtain();
- execRequiringZeroAndReturningStdout(loc, sudo("cp /etc/hosts /etc/hosts-orig-testSetHostname")).get();
- execRequiringZeroAndReturningStdout(loc, BashCommands.ifFileExistsElse0("/etc/hostname", sudo("cp /etc/hostname /etc/hostname-orig-testSetHostname"))).get();
- execRequiringZeroAndReturningStdout(loc, BashCommands.ifFileExistsElse0("/etc/sysconfig/network", sudo("cp /etc/sysconfig/network /etc/sysconfig/network-orig-testSetHostname"))).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.sudo("cp /etc/hosts /etc/hosts-orig-testSetHostname")).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.ifFileExistsElse0("/etc/hostname", bashTestInstance.sudo("cp /etc/hostname /etc/hostname-orig-testSetHostname"))).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.ifFileExistsElse0("/etc/sysconfig/network", bashTestInstance.sudo("cp /etc/sysconfig/network /etc/sysconfig/network-orig-testSetHostname"))).get();
String origHostname = getHostnameNoArgs(loc);
assertTrue(Strings.isNonBlank(origHostname));
try {
- List<String> cmd = (includeDomain) ? BashCommands.setHostname(newHostname, newDomain) : BashCommands.setHostname(newHostname);
+ List<String> cmd = (includeDomain) ? bashTestInstance.setHostname(newHostname, newDomain) : bashTestInstance.setHostname(newHostname);
execRequiringZeroAndReturningStdout(loc, cmd).get();
String actualHostnameUnqualified = getHostnameUnqualified(loc);
@@ -500,10 +497,10 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
log.info("result="+result);
} finally {
- execRequiringZeroAndReturningStdout(loc, sudo("cp /etc/hosts-orig-testSetHostname /etc/hosts")).get();
- execRequiringZeroAndReturningStdout(loc, BashCommands.ifFileExistsElse0("/etc/hostname-orig-testSetHostname", sudo("cp /etc/hostname-orig-testSetHostname /etc/hostname"))).get();
- execRequiringZeroAndReturningStdout(loc, BashCommands.ifFileExistsElse0("/etc/sysconfig/network-orig-testSetHostname", sudo("cp /etc/sysconfig/network-orig-testSetHostname /etc/sysconfig/network"))).get();
- execRequiringZeroAndReturningStdout(loc, sudo("hostname "+origHostname)).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.sudo("cp /etc/hosts-orig-testSetHostname /etc/hosts")).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.ifFileExistsElse0("/etc/hostname-orig-testSetHostname", bashTestInstance.sudo("cp /etc/hostname-orig-testSetHostname /etc/hostname"))).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.ifFileExistsElse0("/etc/sysconfig/network-orig-testSetHostname", bashTestInstance.sudo("cp /etc/sysconfig/network-orig-testSetHostname /etc/sysconfig/network"))).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.sudo("hostname "+origHostname)).get();
}
}
@@ -513,14 +510,14 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
LocalManagementContextForTests mgmt = new LocalManagementContextForTests();
SshMachineLocation loc = mgmt.getLocationManager().createLocation(LocalhostMachineProvisioningLocation.spec()).obtain();
- execRequiringZeroAndReturningStdout(loc, sudo("cp /etc/hosts /etc/hosts-orig-testModifyEtcHosts")).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.sudo("cp /etc/hosts /etc/hosts-orig-testModifyEtcHosts")).get();
int numLinesOrig = Integer.parseInt(execRequiringZeroAndReturningStdout(loc, "wc -l /etc/hosts").get().trim().split("\\s")[0]);
try {
- String cmd = BashCommands.prependToEtcHosts("1.2.3.4", "myhostnamefor1234.at.start", "myhostnamefor1234b");
+ String cmd = bashTestInstance.prependToEtcHosts("1.2.3.4", "myhostnamefor1234.at.start", "myhostnamefor1234b");
execRequiringZeroAndReturningStdout(loc, cmd).get();
- String cmd2 = BashCommands.appendToEtcHosts("5.6.7.8", "myhostnamefor5678.at.end", "myhostnamefor5678");
+ String cmd2 = bashTestInstance.appendToEtcHosts("5.6.7.8", "myhostnamefor5678.at.end", "myhostnamefor5678");
execRequiringZeroAndReturningStdout(loc, cmd2).get();
String grepFirst = execRequiringZeroAndReturningStdout(loc, "grep -n myhostnamefor1234 /etc/hosts").get();
@@ -532,7 +529,7 @@ public class BashCommandsIntegrationTest extends BrooklynMgmtUnitTestSupport {
assertTrue(grepLast.startsWith((numLinesOrig+2)+":") && grepLast.contains("5.6.7.8 myhostnamefor5678.at.end myhostnamefor5678"), "last="+grepLast);
assertEquals(numLinesOrig + 2, numLinesAfter, "lines orig="+numLinesOrig+", after="+numLinesAfter);
} finally {
- execRequiringZeroAndReturningStdout(loc, sudo("cp /etc/hosts-orig-testModifyEtcHosts /etc/hosts")).get();
+ execRequiringZeroAndReturningStdout(loc, bashTestInstance.sudo("cp /etc/hosts-orig-testModifyEtcHosts /etc/hosts")).get();
}
}
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 7b1b4be93d..764b9021e1 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -26,7 +26,6 @@ import org.apache.brooklyn.core.location.*;
import org.apache.brooklyn.core.location.MachineLifecycleUtils.MachineStatus;
import static org.apache.brooklyn.util.JavaGroovyEquivalents.elvis;
import static org.apache.brooklyn.util.JavaGroovyEquivalents.groovyTruth;
-import static org.apache.brooklyn.util.ssh.BashCommands.sbinPath;
import static org.jclouds.compute.predicates.NodePredicates.withIds;
import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
@@ -90,6 +89,7 @@ import org.apache.brooklyn.util.core.ClassLoaderUtils;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.core.config.ResolvingConfigBag;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.core.internal.ssh.ShellTool;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
@@ -112,10 +112,10 @@ import org.apache.brooklyn.util.net.Cidr;
import org.apache.brooklyn.util.net.Networking;
import org.apache.brooklyn.util.net.Protocol;
import org.apache.brooklyn.util.repeat.Repeater;
-import org.apache.brooklyn.util.ssh.BashCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Chain;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Policy;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Chain;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Policy;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.KeyValueParser;
import org.apache.brooklyn.util.text.StringPredicates;
@@ -404,9 +404,12 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
: (OsFamily.WINDOWS == confFamily);
}
+ private BashCommandsConfigurable bashCommands() { return BrooklynOsCommands.bash(getManagementContext()); }
+ private IptablesCommandsConfigurable iptablesCommands() { return new IptablesCommandsConfigurable(bashCommands()); }
+
public boolean isLocationFirewalldEnabled(SshMachineLocation location) {
int result = location.execCommands("checking if firewalld is active",
- ImmutableList.of(IptablesCommands.firewalldServiceIsActive()));
+ ImmutableList.of(iptablesCommands().firewalldServiceIsActive()));
return result == 0;
}
@@ -939,8 +942,8 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
(SshMachineLocation)machineLocation,
"using urandom instead of random",
Arrays.asList(
- BashCommands.sudo("mv /dev/random /dev/random-real"),
- BashCommands.sudo("ln -s /dev/urandom /dev/random")));
+ bashCommands().sudo("mv /dev/random /dev/random-real"),
+ bashCommands().sudo("ln -s /dev/urandom /dev/random")));
}
}
@@ -955,10 +958,10 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
executeCommandThrowingOnError(
(SshMachineLocation)machineLocation,
"Generate hostname " + node.getName(),
- ImmutableList.of(BashCommands.chainGroup(
- String.format("echo '127.0.0.1 %s' | ( %s )", node.getName(), BashCommands.sudo("tee -a /etc/hosts")),
- "{ " + BashCommands.sudo("sed -i \"s/HOSTNAME=.*/HOSTNAME=" + node.getName() + "/g\" /etc/sysconfig/network") + " || true ; }",
- BashCommands.sudo("hostname " + node.getName()))));
+ ImmutableList.of(bashCommands().chainGroup(
+ String.format("echo '127.0.0.1 %s' | ( %s )", node.getName(), bashCommands().sudo("tee -a /etc/hosts")),
+ "{ " + bashCommands().sudo("sed -i \"s/HOSTNAME=.*/HOSTNAME=" + node.getName() + "/g\" /etc/sysconfig/network") + " || true ; }",
+ bashCommands().sudo("hostname " + node.getName()))));
}
}
@@ -979,14 +982,14 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
if (isLocationFirewalldEnabled((SshMachineLocation)machineLocation)) {
for (Integer port : inboundPorts) {
- iptablesRules.add(IptablesCommands.addFirewalldRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
+ iptablesRules.add(iptablesCommands().addFirewalldRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
}
} else {
iptablesRules = Lists.newArrayList();
for (Integer port : inboundPorts) {
- iptablesRules.add(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
+ iptablesRules.add(iptablesCommands().insertIptablesRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
}
- iptablesRules.add(IptablesCommands.saveIptablesRules());
+ iptablesRules.add(iptablesCommands().saveIptablesRules());
}
List<String> batch = Lists.newArrayList();
// Some entities, such as Riak (erlang based) have a huge range of ports, which leads to a script that
@@ -1010,7 +1013,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
executeCommandWarningOnError(
(SshMachineLocation)machineLocation,
"List iptables rules",
- ImmutableList.of(IptablesCommands.listIptablesRule()));
+ ImmutableList.of(iptablesCommands().listIptablesRule()));
}
}
}
@@ -1025,9 +1028,9 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
List<String> cmds = ImmutableList.<String>of();
if (isLocationFirewalldEnabled((SshMachineLocation)machineLocation)) {
- cmds = ImmutableList.of(IptablesCommands.firewalldServiceStop(), IptablesCommands.firewalldServiceStatus());
+ cmds = ImmutableList.of(iptablesCommands().firewalldServiceStop(), iptablesCommands().firewalldServiceStatus());
} else {
- cmds = ImmutableList.of(IptablesCommands.iptablesServiceStop(), IptablesCommands.iptablesServiceStatus());
+ cmds = ImmutableList.of(iptablesCommands().iptablesServiceStop(), iptablesCommands().iptablesServiceStatus());
}
executeCommandWarningOnError(
(SshMachineLocation)machineLocation,
@@ -1825,7 +1828,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
SshMachineLocation sshLoc = createTemporarySshMachineLocation(managementHostAndPort, initialCredentials, config);
try {
// BROOKLYN-188: for SUSE, need to specify the path (for groupadd, useradd, etc)
- Map<String, ?> env = ImmutableMap.of("PATH", sbinPath());
+ Map<String, ?> env = ImmutableMap.of("PATH", bashCommands().sbinPath());
int exitcode = sshLoc.execScript(execProps, "create-user", commands, env);
@@ -3067,7 +3070,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
MutableMap.of("out", outStream, "err", errStream),
"get public AWS hostname",
ImmutableList.of(
- BashCommands.INSTALL_CURL,
+ bashCommands().INSTALL_CURL,
"echo `curl --silent --retry 20 http://169.254.169.254/latest/meta-data/public-hostname`; exit"));
String outString = new String(outStream.toByteArray());
String[] outLines = outString.split("\n");
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
index 555d7cb866..abf0c8d8a0 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/policy/jclouds/os/CreateUserPolicy.java
@@ -29,13 +29,13 @@ import org.apache.brooklyn.api.sensor.SensorEventListener;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.entity.AbstractEntity;
-import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.sensor.Sensors;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
-import static org.apache.brooklyn.util.ssh.BashCommands.sbinPath;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.jclouds.compute.config.AdminAccessConfiguration;
import org.jclouds.scriptbuilder.functions.InitAdminAccess;
@@ -149,14 +149,15 @@ public class CreateUserPolicy extends AbstractPolicy implements SensorEventListe
String cmd = adminAccess.render(scriptOsFamily);
// Exec command to create the user
- int result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd), ImmutableMap.of("PATH", sbinPath()));
+ BashCommandsConfigurable bash = BrooklynOsCommands.bash(entity);
+ int result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd), ImmutableMap.of("PATH", bash.sbinPath()));
if (result != 0) {
throw new IllegalStateException("Failed to auto-generate user, using command "+cmd);
}
// Exec command to grant password-access to sshd (which may have been disabled earlier).
cmd = new SshdConfig(ImmutableMap.of("PasswordAuthentication", "yes")).render(scriptOsFamily);
- result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd), ImmutableMap.of("PATH", sbinPath()));
+ result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "create-user-"+user, ImmutableList.of(cmd), ImmutableMap.of("PATH", bash.sbinPath()));
if (result != 0) {
throw new IllegalStateException("Failed to enable ssh-login-with-password, using command "+cmd);
}
@@ -168,7 +169,7 @@ public class CreateUserPolicy extends AbstractPolicy implements SensorEventListe
user+" ALL = (ALL) NOPASSWD:ALL\n"+
"END_OF_JCLOUDS_FILE\n",
"chmod 0440 /etc/sudoers");
- result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "add-user-to-sudoers-"+user, cmds, ImmutableMap.of("PATH", sbinPath()));
+ result = machine.execScript(ImmutableMap.of(SshTool.PROP_RUN_AS_ROOT.getName(), true), "add-user-to-sudoers-"+user, cmds, ImmutableMap.of("PATH", bash.sbinPath()));
if (result != 0) {
throw new IllegalStateException("Failed to auto-generate user, using command "+cmds);
}
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSuseLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSuseLiveTest.java
index 8fe3dc2e6d..b36dbb9b39 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSuseLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSuseLiveTest.java
@@ -25,7 +25,7 @@ import org.apache.brooklyn.core.location.Locations;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.stream.Streams;
import org.testng.annotations.Test;
@@ -36,7 +36,7 @@ import com.google.common.collect.ImmutableMap;
* Extra-special tests for deploying SUSE VMs, because we've had so many problems. For example:
* <ul>
* <li>{@code groupadd -f}: You are using an undocumented option (-f); and exits with 9
- * <li>path does not by default contain groupadd etc (see {@link BashCommands#sbinPath()}
+ * <li>path does not by default contain groupadd etc (see {@link BashCommandsConfigurable#sbinPath()}
* </ul>
*/
public class JcloudsSuseLiveTest extends AbstractJcloudsLiveTest {
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/SimpleJcloudsLocationUserLoginAndConfigLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/SimpleJcloudsLocationUserLoginAndConfigLiveTest.java
index e9755ad92b..230bc78f4a 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/SimpleJcloudsLocationUserLoginAndConfigLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/SimpleJcloudsLocationUserLoginAndConfigLiveTest.java
@@ -26,7 +26,8 @@ import java.util.Map;
import org.apache.brooklyn.api.location.NoMachinesAvailableException;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -214,7 +215,7 @@ public class SimpleJcloudsLocationUserLoginAndConfigLiveTest extends AbstractJcl
"grantUserSudo", false,
"waitForSshable", 30*1000));
- int exitCode = execWithExitCode(m, ImmutableList.of(BashCommands.sudo("echo yes")));
+ int exitCode = execWithExitCode(m, ImmutableList.of(BrooklynOsCommands.bash(m.getManagementContext()).sudo("echo yes")));
Assert.assertFalse(exitCode == 0, "exit code for sudo command should not have been 0");
}
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNode.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNode.java
index 027085f6cf..3fb424d779 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNode.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNode.java
@@ -45,7 +45,7 @@ import org.apache.brooklyn.entity.software.base.SoftwareProcess;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.flags.SetFromFlag;
import org.apache.brooklyn.util.net.Networking;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.time.Duration;
import com.google.common.annotations.VisibleForTesting;
@@ -99,7 +99,7 @@ public interface BrooklynNode extends SoftwareProcess, UsesJava {
ConfigKey<String> MANAGEMENT_PASSWORD =
ConfigKeys.newStringConfigKey("brooklynnode.managementPassword", "Password for MANAGEMENT_USER", null);
- /** useful e.g. with {@link BashCommands#generateKeyInDotSshIdRsaIfNotThere() } */
+ /** useful e.g. with {@link BashCommandsConfigurable#generateKeyInDotSshIdRsaIfNotThere() } */
@SetFromFlag("extraCustomizationScript")
ConfigKey<String> EXTRA_CUSTOMIZATION_SCRIPT = ConfigKeys.newStringConfigKey("brooklynnode.customization.extraScript",
"Optional additional script commands to run as part of customization; this might e.g. ensure id_rsa is set up",
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
index 80e717e199..67a0d8689e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
@@ -38,12 +38,13 @@ import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.file.ArchiveBuilder;
import org.apache.brooklyn.util.core.file.ArchiveUtils;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.net.Networking;
import org.apache.brooklyn.util.net.Urls;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
@@ -153,9 +154,9 @@ public class BrooklynNodeSshDriver extends JavaSoftwareProcessSshDriver implemen
getMachine().copyTo(distroStream, getInstallDir()+"/"+saveAs);
}
} else {
- commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, saveAs));
+ commands.addAll(BrooklynOsCommands.bash(getEntity()).commandsToDownloadUrlsAs(urls, saveAs));
}
- commands.add(BashCommands.INSTALL_TAR);
+ commands.add(BrooklynOsCommands.bash(getEntity()).INSTALL_TAR);
commands.add("tar xzfv " + saveAs);
newScript(INSTALLING).
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
index 7e0d1c2b0c..636d1d35e3 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/java/JavaSoftwareProcessSshDriver.java
@@ -34,6 +34,7 @@ import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.entity.software.base.AbstractSoftwareProcessSshDriver;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,7 +60,7 @@ import org.apache.brooklyn.util.core.task.ssh.SshTasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes;
@@ -291,7 +292,7 @@ public abstract class JavaSoftwareProcessSshDriver extends AbstractSoftwareProce
return true;
}
}
- return tryJavaInstall(requiredVersion, BashCommands.installJava(requiredJavaMinor)) == 0;
+ return tryJavaInstall(requiredVersion, BrooklynOsCommands.bash(getEntity()).installJava(requiredJavaMinor)) == 0;
}
/**
@@ -416,7 +417,7 @@ public abstract class JavaSoftwareProcessSshDriver extends AbstractSoftwareProce
// http://mail.openjdk.java.net/pipermail/net-dev/2012-July/004603.html
String newHostname = "br-"+getEntity().getId().toLowerCase();
log.info("Detected likelihood of Java hostname bug with hostname length "+len+" for "+getEntity()+"; renaming "+getMachine()+" to hostname "+newHostname);
- DynamicTasks.queue(SshEffectorTasks.ssh(BashCommands.setHostname(newHostname, null))).block();
+ DynamicTasks.queue(SshEffectorTasks.ssh(BrooklynOsCommands.bash(getEntity()).setHostname(newHostname, null))).block();
}
} else {
log.debug("Hostname length could not be determined for location "+EffectorTasks.findSshMachine()+"; not doing Java hostname bug check");
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/machine/MachineInitTasks.java b/software/base/src/main/java/org/apache/brooklyn/entity/machine/MachineInitTasks.java
index 1ded4208de..c1bbe1e63a 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/machine/MachineInitTasks.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/machine/MachineInitTasks.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.core.entity.EntityInternal;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.task.system.ProcessTaskFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,10 +38,10 @@ import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.task.ssh.SshTasks;
import org.apache.brooklyn.util.net.Protocol;
-import org.apache.brooklyn.util.ssh.BashCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Chain;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Policy;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Chain;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Policy;
import org.apache.brooklyn.util.text.Strings;
/**
@@ -69,6 +70,8 @@ public class MachineInitTasks {
});
}
+ private IptablesCommandsConfigurable iptablesCommands(SshMachineLocation m) { return new IptablesCommandsConfigurable(BrooklynOsCommands.bash(m.getManagementContext())); }
+
protected void stopIptablesImpl(final SshMachineLocation machine) {
log.info("Stopping iptables for {} at {}", entity(), machine);
@@ -78,9 +81,9 @@ public class MachineInitTasks {
Task<Integer> checkFirewall = checkLocationFirewall(machine);
if (checkFirewall.getUnchecked() == 0) {
- cmds = ImmutableList.of(IptablesCommands.firewalldServiceStop(), IptablesCommands.firewalldServiceStatus());
+ cmds = ImmutableList.of(iptablesCommands(machine).firewalldServiceStop(), iptablesCommands(machine).firewalldServiceStatus());
} else {
- cmds = ImmutableList.of(IptablesCommands.iptablesServiceStop(), IptablesCommands.iptablesServiceStatus());
+ cmds = ImmutableList.of(iptablesCommands(machine).iptablesServiceStop(), iptablesCommands(machine).iptablesServiceStatus());
}
@@ -89,7 +92,7 @@ public class MachineInitTasks {
/**
- * See docs in {@link BashCommands#dontRequireTtyForSudo()}
+ * See docs in {@link BashCommandsConfigurable#dontRequireTtyForSudo()}
*/
public Task<Boolean> dontRequireTtyForSudoAsync(final SshMachineLocation machine) {
return DynamicTasks.queue(SshTasks.dontRequireTtyForSudo(machine, true).newTask().asTask());
@@ -120,11 +123,11 @@ public class MachineInitTasks {
if (checkFirewall.getUnchecked() == 0) {
for (Integer port : inboundPorts) {
- iptablesRules.add(IptablesCommands.addFirewalldRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
+ iptablesRules.add(iptablesCommands(machine).addFirewalldRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
}
} else {
- iptablesRules = createIptablesRulesForNetworkInterface(inboundPorts);
- iptablesInstallCommands = IptablesCommands.saveIptablesRules();
+ iptablesRules = createIptablesRulesForNetworkInterface(inboundPorts, machine);
+ iptablesInstallCommands = iptablesCommands(machine).saveIptablesRules();
}
insertIptablesRules(iptablesRules, iptablesInstallCommands, machine);
@@ -136,7 +139,7 @@ public class MachineInitTasks {
* Returns a queued {@link Task} which checks if location firewall is enabled.
*/
public Task<Integer> checkLocationFirewall(final SshMachineLocation machine) {
- return subTaskHelperAllowingNonZeroExitCode("check if firewall is active", machine, IptablesCommands.firewalldServiceIsActive());
+ return subTaskHelperAllowingNonZeroExitCode("check if firewall is active", machine, iptablesCommands(machine).firewalldServiceIsActive());
}
/**
@@ -185,7 +188,7 @@ public class MachineInitTasks {
* Returns a queued {@link Task} which lists the iptables rules.
*/
private Task<Integer> listIptablesRules(final SshMachineLocation machine) {
- return subTaskHelperRequiringZeroExitCode("list rules", machine, IptablesCommands.listIptablesRule());
+ return subTaskHelperRequiringZeroExitCode("list rules", machine, iptablesCommands(machine).listIptablesRule());
}
private Task<Integer> subTaskHelperRequiringZeroExitCode(String taskName, SshMachineLocation machine, String... comands) {
@@ -202,10 +205,10 @@ public class MachineInitTasks {
return DynamicTasks.queue(taskFactory).asTask();
}
- private List<String> createIptablesRulesForNetworkInterface(Iterable<Integer> ports) {
+ private List<String> createIptablesRulesForNetworkInterface(Iterable<Integer> ports, SshMachineLocation machine) {
List<String> iptablesRules = Lists.newArrayList();
for (Integer port : ports) {
- iptablesRules.add(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
+ iptablesRules.add(iptablesCommands(machine).insertIptablesRule(Chain.INPUT, Protocol.TCP, port, Policy.ACCEPT));
}
return iptablesRules;
}
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetHostnameCustomizer.java b/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetHostnameCustomizer.java
index 28f97ee5bc..128ad9b66c 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetHostnameCustomizer.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetHostnameCustomizer.java
@@ -30,11 +30,12 @@ import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks.SshEffectorTaskFactory;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.core.text.TemplateProcessor;
import org.apache.brooklyn.util.net.Networking;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -172,11 +173,12 @@ public class SetHostnameCustomizer extends BasicMachineLocationCustomizer {
boolean hasDomain = Strings.isNonBlank(domainFixed);
String fqdn = hasDomain ? hostName+"."+domainFixed : hostName;
-
+
+ BashCommandsConfigurable bash = BrooklynOsCommands.bash(machine.getManagementContext());
exec(machine, true,
- BashCommands.sudo(String.format("sed -i.bak -e '1i127.0.0.1 %s %s' -e '/^127.0.0.1/d' /etc/hosts", fqdn, hostName)),
- BashCommands.sudo(String.format("sed -i.bak -e 's/^HOSTNAME=.*$/HOSTNAME=%s/' /etc/sysconfig/network", fqdn)),
- BashCommands.sudo(String.format("hostname %s", fqdn)));
+ bash.sudo(String.format("sed -i.bak -e '1i127.0.0.1 %s %s' -e '/^127.0.0.1/d' /etc/hosts", fqdn, hostName)),
+ bash.sudo(String.format("sed -i.bak -e 's/^HOSTNAME=.*$/HOSTNAME=%s/' /etc/sysconfig/network", fqdn)),
+ bash.sudo(String.format("hostname %s", fqdn)));
return hostName;
}
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetLimitsCustomizer.java b/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetLimitsCustomizer.java
index e3997ff921..612e5f289b 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetLimitsCustomizer.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/machine/SetLimitsCustomizer.java
@@ -19,7 +19,6 @@
package org.apache.brooklyn.entity.machine;
import static com.google.common.base.Preconditions.checkArgument;
-import static org.apache.brooklyn.util.ssh.BashCommands.sudo;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,6 +35,7 @@ import org.apache.brooklyn.core.objs.BasicConfigurableObject;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
+import org.apache.brooklyn.util.ssh.BashCommands;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -122,7 +122,7 @@ public class SetLimitsCustomizer extends BasicMachineLocationCustomizer implemen
try {
List<String> cmds = new ArrayList<>();
for (String content : contents) {
- cmds.add(sudo(String.format("echo \"%s\" | tee -a %s", content, file)));
+ cmds.add(BashCommands.sudo(String.format("echo \"%s\" | tee -a %s", content, file)));
}
exec((SshMachineLocation)machine, true, cmds.toArray(new String[cmds.size()]));
} catch (Exception e) {
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
index acf59bfd47..697fa6bdf0 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
@@ -36,22 +36,20 @@ import org.apache.brooklyn.core.effector.ssh.SshEffectorTasks;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
import org.apache.brooklyn.core.entity.Entities;
-import org.apache.brooklyn.core.entity.EntityInternal;
-import org.apache.brooklyn.core.feed.ConfigToAttributes;
import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.entity.software.base.lifecycle.NaiveScriptRunner;
import org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
import org.apache.brooklyn.util.core.internal.ssh.sshj.SshjTool;
-import org.apache.brooklyn.util.core.json.ShellEnvironmentSerializer;
import org.apache.brooklyn.util.core.mutex.WithMutexes;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.stream.KnownSizeInputStream;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.StringPredicates;
@@ -364,6 +362,8 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
return result;
}
+ protected BashCommandsConfigurable bashCommands() { return BrooklynOsCommands.bash(getEntity()); }
+
public void checkNoHostnameBug() {
try {
ProcessTaskWrapper<Integer> hostnameTask = DynamicTasks.queue(SshEffectorTasks.ssh("echo FOREMARKER; hostname; echo AFTMARKER")).block();
@@ -373,7 +373,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
if (hostname.equals("(none)")) {
String newHostname = "br-"+getEntity().getId().toLowerCase();
log.info("Detected no-hostname bug with hostname "+hostname+" for "+getEntity()+"; renaming "+getMachine()+" to hostname "+newHostname);
- DynamicTasks.queue(SshEffectorTasks.ssh(BashCommands.setHostname(newHostname, null))).block();
+ DynamicTasks.queue(SshEffectorTasks.ssh(bashCommands().setHostname(newHostname, null))).block();
}
} else {
log.debug("Hostname could not be determined for location "+EffectorTasks.findSshMachine()+"; not doing no-hostname bug check");
@@ -534,8 +534,8 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
// new way, preferred?
if (processOwner != null) {
s.body.append(
- BashCommands.sudoAsUser(processOwner, "test -f "+pidFile) + " || exit 1",
- "ps -p $(" + BashCommands.sudoAsUser(processOwner, "cat "+pidFile) + ")"
+ bashCommands().sudoAsUser(processOwner, "test -f "+pidFile) + " || exit 1",
+ "ps -p $(" + bashCommands().sudoAsUser(processOwner, "cat "+pidFile) + ")"
);
} else {
s.body.append(
@@ -566,17 +566,17 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
"fi",
"rm -f " + pidFile);
if (processOwner != null) {
- s.body.append(BashCommands.sudoAsUser(processOwner, stopCommand));
+ s.body.append(bashCommands().sudoAsUser(processOwner, stopCommand));
} else {
s.body.append(stopCommand);
}
} else if (KILLING.equals(phase)) {
if (processOwner != null) {
s.body.append(
- "export PID=$(" + BashCommands.sudoAsUser(processOwner, "cat "+pidFile) + ")",
+ "export PID=$(" + bashCommands().sudoAsUser(processOwner, "cat "+pidFile) + ")",
"test -n \"$PID\" || exit 0",
- BashCommands.sudoAsUser(processOwner, "kill -9 $PID"),
- BashCommands.sudoAsUser(processOwner, "rm -f "+pidFile)
+ bashCommands().sudoAsUser(processOwner, "kill -9 $PID"),
+ bashCommands().sudoAsUser(processOwner, "rm -f "+pidFile)
);
} else {
s.body.append(
@@ -589,8 +589,8 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
} else if (RESTARTING.equals(phase)) {
if (processOwner != null) {
s.footer.prepend(
- BashCommands.sudoAsUser(processOwner, "test -f "+pidFile) + " || exit 1",
- "ps -p $(" + BashCommands.sudoAsUser(processOwner, "cat "+pidFile) + ") || exit 1"
+ bashCommands().sudoAsUser(processOwner, "test -f "+pidFile) + " || exit 1",
+ "ps -p $(" + bashCommands().sudoAsUser(processOwner, "cat "+pidFile) + ") || exit 1"
);
} else {
s.footer.prepend(
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessSshDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessSshDriver.java
index 07afb74da5..2cc3575075 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessSshDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaSoftwareProcessSshDriver.java
@@ -32,10 +32,11 @@ import org.apache.brooklyn.entity.software.base.lifecycle.ScriptHelper;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.file.ArchiveUtils;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.net.Urls;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.Strings;
@@ -90,8 +91,9 @@ public class VanillaSoftwareProcessSshDriver extends AbstractSoftwareProcessSshD
downloadedFilename = resolver.getFilename();
List<String> commands = new LinkedList<String>();
- commands.addAll(BashCommands.commandsToDownloadUrlsAs(urls, downloadedFilename));
- commands.addAll(ArchiveUtils.installCommands(downloadedFilename));
+ BashCommandsConfigurable bash = BrooklynOsCommands.bash(getEntity());
+ commands.addAll(bash.commandsToDownloadUrlsAs(urls, downloadedFilename));
+ commands.addAll(ArchiveUtils.installCommands(bash, downloadedFilename));
int result = newScript(ImmutableMap.of(INSTALL_INCOMPLETE, true), INSTALLING)
.failOnNonZeroResultCode(false)
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
index 97d51213ef..6c47b9b20b 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/system_service/InitdServiceInstaller.java
@@ -37,13 +37,14 @@ import org.apache.brooklyn.entity.software.base.SoftwareProcess;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.ResourceUtils;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.task.ssh.SshPutTaskWrapper;
import org.apache.brooklyn.util.core.task.ssh.SshTasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
import org.apache.brooklyn.util.core.text.TemplateProcessor;
import org.apache.brooklyn.util.os.Os;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
public class InitdServiceInstaller implements SystemServiceInstaller {
@@ -79,12 +80,13 @@ public class InitdServiceInstaller implements SystemServiceInstaller {
SshPutTaskWrapper putServiceTask = SshTasks.newSshPutTaskFactory(sshMachine, tmpServicePath)
.contents(service)
.newTask();
+ BashCommandsConfigurable bash = BrooklynOsCommands.bash(sshMachine.getManagementContext());
ProcessTaskWrapper<Integer> installServiceTask = SshTasks.newSshExecTaskFactory(sshMachine,
- BashCommands.chain(
- BashCommands.sudo("mv " + tmpServicePath + " " + servicePath),
- BashCommands.sudo("chmod 0755 " + servicePath),
- BashCommands.sudo("chkconfig --add " + serviceName),
- BashCommands.sudo("chkconfig " + serviceName + " on")))
+ bash.chain(
+ bash.sudo("mv " + tmpServicePath + " " + servicePath),
+ bash.sudo("chmod 0755 " + servicePath),
+ bash.sudo("chkconfig --add " + serviceName),
+ bash.sudo("chkconfig " + serviceName + " on")))
.requiringExitCodeZero()
.newTask();
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/AbstractMultiDistroLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/AbstractMultiDistroLiveTest.java
index ff29408e36..38a6cb37b7 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/AbstractMultiDistroLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/AbstractMultiDistroLiveTest.java
@@ -34,7 +34,8 @@ import org.apache.brooklyn.location.jclouds.JcloudsLocationConfig;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.test.Asserts;
import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -142,7 +143,7 @@ public abstract class AbstractMultiDistroLiveTest extends BrooklynAppLiveTestSup
Asserts.succeedsEventually(ImmutableMap.of("timeout", Duration.FIVE_MINUTES), new Runnable() {
@Override
public void run() {
- assertExecSsh(server, ImmutableList.of(BashCommands.installPackage("curl"), "netstat -antp", "curl -k --retry 3 "+url));
+ assertExecSsh(server, ImmutableList.of(BrooklynOsCommands.bash(server).installPackage("curl"), "netstat -antp", "curl -k --retry 3 "+url));
}});
}
}
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
index 5fda8bbbef..98ce92a8a9 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/mysql/DynamicToyMySqlEntityBuilder.java
@@ -18,8 +18,11 @@
*/
package org.apache.brooklyn.entity.software.base.test.mysql;
-import java.io.File;
-
+import com.google.common.base.Predicates;
+import com.google.common.base.Splitter;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.Iterables;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntityInitializer;
import org.apache.brooklyn.api.entity.EntityLocal;
@@ -34,21 +37,17 @@ import org.apache.brooklyn.entity.stock.BasicStartable;
import org.apache.brooklyn.location.localhost.LocalhostMachineProvisioningLocation.LocalhostMachine;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.core.config.ConfigBag;
+import org.apache.brooklyn.util.core.file.BrooklynOsCommands;
import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.core.task.ssh.SshTasks;
import org.apache.brooklyn.util.core.task.system.ProcessTaskWrapper;
-import org.apache.brooklyn.util.ssh.BashCommands;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Predicates;
-import com.google.common.base.Splitter;
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.Iterables;
+import java.io.File;
public class DynamicToyMySqlEntityBuilder {
@@ -109,10 +108,10 @@ public class DynamicToyMySqlEntityBuilder {
SshEffectorTasks.ssh(
"mkdir "+dir(entity),
"cd "+dir(entity),
- BashCommands.downloadToStdout(downloadUrl(entity, isLocalhost(machineS)))+" | tar xvz"
+ BrooklynOsCommands.bash(entity).downloadToStdout(downloadUrl(entity, isLocalhost(machineS)))+" | tar xvz"
).summary("download mysql").returning(SshTasks.returningStdoutLoggingInfo(log, true)));
if (isLinux(machineS)) {
- DynamicTasks.queue(SshEffectorTasks.ssh(BashCommands.installPackage("libaio1")));
+ DynamicTasks.queue(SshEffectorTasks.ssh(BrooklynOsCommands.bash(entity).installPackage("libaio1")));
}
DynamicTasks.queue(
SshEffectorTasks.put(".my.cnf")
@@ -128,7 +127,7 @@ public class DynamicToyMySqlEntityBuilder {
protected void postStartCustom(ConfigBag parameters) {
// if it's still up after 5s assume we are good
Time.sleep(Duration.FIVE_SECONDS);
- if (!DynamicTasks.queue(SshEffectorTasks.isPidFromFileRunning(dir(entity)+"/*/data/*.pid")).get()) {
+ if (!DynamicTasks.queue(SshEffectorTasks.isPidFromFileRunning(BrooklynOsCommands.bash(entity()), dir(entity)+"/*/data/*.pid")).get()) {
// but if it's not up add a bunch of other info
log.warn("MySQL did not start: "+dir(entity));
ProcessTaskWrapper<Integer> info = DynamicTasks.queue(SshEffectorTasks.ssh(
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricherTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricherTest.java
index 7cf1f3fa54..9a95ce0d4a 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricherTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/system_service/SystemServiceEnricherTest.java
@@ -31,13 +31,13 @@ import org.apache.brooklyn.core.test.BrooklynAppLiveTestSupport;
import org.apache.brooklyn.entity.software.base.VanillaSoftwareProcess;
import org.apache.brooklyn.entity.software.base.VanillaSoftwareProcessImpl;
import org.apache.brooklyn.entity.software.base.VanillaSoftwareProcessSshDriver;
-import org.apache.brooklyn.entity.system_service.SystemServiceEnricher;
+import org.apache.brooklyn.util.ssh.BashCommands;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.apache.brooklyn.location.jclouds.JcloudsLocation;
import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.test.Asserts;
-import org.apache.brooklyn.util.ssh.BashCommands;
+import org.apache.brooklyn.util.ssh.BashCommandsConfigurable;
import org.apache.brooklyn.util.time.Duration;
import com.google.common.base.Suppliers;
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsFirewalldTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsFirewalldTest.java
index 78d202b536..7056d3ae3e 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsFirewalldTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsFirewalldTest.java
@@ -19,9 +19,8 @@
package org.apache.brooklyn.util.ssh;
import org.apache.brooklyn.util.net.Protocol;
-import org.apache.brooklyn.util.ssh.IptablesCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Chain;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Policy;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Chain;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Policy;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -66,39 +65,41 @@ public class IptablesCommandsFirewalldTest {
+ "else echo \"( { which systemctl && systemctl is-active firewalld ; } || /usr/bin/systemctl is-active firewalld )\" | "
+ "sudo -E -n -S -s -- bash ; fi )";
+ static IptablesCommandsConfigurable testInstance = new IptablesCommandsConfigurable(BashCommandsConfigurable.newInstance());
+
@Test
public void testAddFirewalldRule() {
- Assert.assertEquals(IptablesCommands.addFirewalldRule(Chain.INPUT,
+ Assert.assertEquals(testInstance.addFirewalldRule(Chain.INPUT,
Protocol.TCP, 3306, Policy.ACCEPT), addFirewalldRule);
}
@Test
public void testFirewalldService() {
- Assert.assertEquals(IptablesCommands.firewalldService("status"), firewalldService);
+ Assert.assertEquals(testInstance.firewalldService("status"), firewalldService);
}
@Test
public void testFirewalldServiceRestart() {
- Assert.assertEquals(IptablesCommands.firewalldServiceRestart(), firewalldServiceRestart);
+ Assert.assertEquals(testInstance.firewalldServiceRestart(), firewalldServiceRestart);
}
@Test
public void testFirewalldServiceStart() {
- Assert.assertEquals(IptablesCommands.firewalldServiceStart(), firewalldServiceStart);
+ Assert.assertEquals(testInstance.firewalldServiceStart(), firewalldServiceStart);
}
@Test
public void testFirewalldServiceStatus() {
- Assert.assertEquals(IptablesCommands.firewalldServiceStatus(), firewalldServiceStatus);
+ Assert.assertEquals(testInstance.firewalldServiceStatus(), firewalldServiceStatus);
}
@Test
public void testFirewalldServiceStop() {
- Assert.assertEquals(IptablesCommands.firewalldServiceStop(), firewalldServiceStop);
+ Assert.assertEquals(testInstance.firewalldServiceStop(), firewalldServiceStop);
}
@Test
public void testFirewalldServiceIsActive() {
- Assert.assertEquals(IptablesCommands.firewalldServiceIsActive(), firewalldServiceIsActive);
+ Assert.assertEquals(testInstance.firewalldServiceIsActive(), firewalldServiceIsActive);
}
}
diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsTest.java
index 29d80be05e..be5843a76b 100644
--- a/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsTest.java
+++ b/utils/common/src/test/java/org/apache/brooklyn/util/ssh/IptablesCommandsTest.java
@@ -19,9 +19,8 @@
package org.apache.brooklyn.util.ssh;
import org.apache.brooklyn.util.net.Protocol;
-import org.apache.brooklyn.util.ssh.IptablesCommands;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Chain;
-import org.apache.brooklyn.util.ssh.IptablesCommands.Policy;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Chain;
+import org.apache.brooklyn.util.ssh.IptablesCommandsConfigurable.Policy;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -52,37 +51,40 @@ public class IptablesCommandsTest {
"(( echo \"WARNING: no known/successful package manager to install iptables-persistent, may fail subsequently\" | tee /dev/stderr ) || true) ) " +
"&& ( if test \"$UID\" -eq 0; then ( /etc/init.d/iptables-persistent save ); else sudo -E -n -S -- /etc/init.d/iptables-persistent save; fi ) ) )";
+ static IptablesCommandsConfigurable testInstance = new IptablesCommandsConfigurable(BashCommandsConfigurable.newInstance());
+
@Test
public void testCleanUpIptablesRules() {
- Assert.assertEquals(IptablesCommands.cleanUpIptablesRules(), cleanUptptablesRules);
+ Assert.assertEquals(testInstance.cleanUpIptablesRules(), cleanUptptablesRules);
}
@Test
public void testInsertIptablesRules() {
- Assert.assertEquals(IptablesCommands.insertIptablesRule(Chain.INPUT, "eth0", Protocol.TCP, 3306, Policy.ACCEPT),
+ Assert.assertEquals(testInstance.insertIptablesRule(Chain.INPUT, "eth0", Protocol.TCP, 3306, Policy.ACCEPT),
insertIptablesRule);
}
@Test
public void testAppendIptablesRules() {
- Assert.assertEquals(IptablesCommands.appendIptablesRule(Chain.INPUT, "eth0", Protocol.TCP, 3306, Policy.ACCEPT),
+ Assert.assertEquals(testInstance.appendIptablesRule(Chain.INPUT, "eth0", Protocol.TCP, 3306, Policy.ACCEPT),
appendIptablesRule);
}
@Test
public void testInsertIptablesRulesForAllInterfaces() {
- Assert.assertEquals(IptablesCommands.insertIptablesRule(Chain.INPUT, Protocol.TCP, 3306, Policy.ACCEPT),
+ Assert.assertEquals(testInstance.insertIptablesRule(Chain.INPUT, Protocol.TCP, 3306, Policy.ACCEPT),
insertIptablesRuleAll);
}
@Test
public void testAppendIptablesRulesForAllInterfaces() {
- Assert.assertEquals(IptablesCommands.appendIptablesRule(Chain.INPUT, Protocol.TCP, 3306, Policy.ACCEPT),
+ Assert.assertEquals(testInstance.appendIptablesRule(Chain.INPUT, Protocol.TCP, 3306, Policy.ACCEPT),
appendIptablesRuleAll);
}
@Test
public void testSaveIptablesRules() {
- Assert.assertEquals(IptablesCommands.saveIptablesRules(), saveIptablesRules);
+ Assert.assertEquals(testInstance.saveIptablesRules(), saveIptablesRules);
}
+
}