Change preInstall to prepare and add ARCHIVE_DIRECTORY_NAME_FORMAT config

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/d50580be
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/d50580be
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/d50580be

Branch: refs/heads/master
Commit: d50580bea44bd48c0cba66190c9e545158e629f9
Parents: 48e8fd7
Author: Andrew Donald Kennedy <andrew.kenn...@cloudsoftcorp.com>
Authored: Thu Mar 3 16:33:52 2016 +0000
Committer: Andrew Donald Kennedy <andrew.kenn...@cloudsoftcorp.com>
Committed: Fri Mar 4 17:57:48 2016 +0000

----------------------------------------------------------------------
 .../brooklynnode/BrooklynNodeSshDriver.java     |  7 +-
 .../base/AbstractSoftwareProcessDriver.java     | 68 +++++++++-----------
 .../base/AbstractSoftwareProcessSshDriver.java  | 62 ++++++++----------
 .../AbstractSoftwareProcessWinRmDriver.java     | 35 ++++++++--
 .../entity/software/base/SoftwareProcess.java   | 34 ++++------
 5 files changed, 101 insertions(+), 105 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d50580be/software/base/src/main/java/org/apache/brooklyn/entity/brooklynnode/BrooklynNodeSshDriver.java
----------------------------------------------------------------------
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 8058d0f..5e2caa2 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
@@ -88,8 +88,7 @@ public class BrooklynNodeSshDriver extends 
JavaSoftwareProcessSshDriver implemen
     }
 
     @Override
-    public void preInstall() {
-        resolver = Entities.newDownloader(this);
+    public String getArchiveNameFormat() {
         String subpath = entity.getConfig(BrooklynNode.SUBPATH_IN_ARCHIVE);
         if (subpath==null) {
             // assume the dir name is `basename-VERSION` where download link 
is `basename-VERSION-dist.tar.gz`
@@ -112,8 +111,8 @@ public class BrooklynNodeSshDriver extends 
JavaSoftwareProcessSshDriver implemen
                 }
             }
         }
-        if (subpath==null) subpath = format("brooklyn-dist-%s", getVersion());
-        setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(subpath)));
+        if (subpath==null) subpath = "brooklyn-dist-%s";
+        return subpath;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d50580be/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
index b48fab8..6e0f24f 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
@@ -91,7 +91,7 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
      * skipped, {@link BrooklynConfigKeys#SKIP_ENTITY_START} can be set on the 
entity.
      * The {@link BrooklynConfigKeys#SKIP_ENTITY_INSTALLATION} key can also be 
used to
      * skip the {@link #setup()}, {@link #copyInstallResources()} and
-     * {@link #install()} methods if set on the entity or location. 
+     * {@link #install()} methods if set on the entity or location.
      *
      * @see #stop()
      */
@@ -106,26 +106,31 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
         } else {
             skipStart = entityStarted.or(false);
         }
+
+        DynamicTasks.queue("prepare", new Runnable() { public void run() {
+            prepare();
+        }});
+
         if (!skipStart) {
             DynamicTasks.queue("install", new Runnable() { public void run() {
                 Optional<Boolean> locationInstalled = 
Optional.fromNullable(getLocation().getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
                 Optional<Boolean> entityInstalled = 
Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
 
-                DynamicTasks.queue("copy-pre-install-resources", new 
Runnable() { public void run() {
-                    
waitForConfigKey(BrooklynConfigKeys.PRE_INSTALL_RESOURCES_LATCH);
-                    copyPreInstallResources();
-                }});
+                boolean skipInstall = 
locationInstalled.or(entityInstalled).or(false);
+                if (!skipInstall) {
+                    DynamicTasks.queue("copy-pre-install-resources", new 
Runnable() { public void run() {
+                        
waitForConfigKey(BrooklynConfigKeys.PRE_INSTALL_RESOURCES_LATCH);
+                        copyPreInstallResources();
+                    }});
 
-                DynamicTasks.queue("pre-install", new Runnable() { public void 
run() {
-                    preInstall();
-                }});
+                    DynamicTasks.queue("pre-install", new Runnable() { public 
void run() {
+                        preInstall();
+                    }});
 
-                DynamicTasks.queue("pre-install-command", new Runnable() { 
public void run() {
-                    runPreInstallCommand();
-                }});
+                    DynamicTasks.queue("pre-install-command", new Runnable() { 
public void run() {
+                        runPreInstallCommand();
+                    }});
 
-                boolean skipInstall = 
locationInstalled.or(entityInstalled).or(false);
-                if (!skipInstall) {
                     DynamicTasks.queue("setup", new Runnable() { public void 
run() {
                         waitForConfigKey(BrooklynConfigKeys.SETUP_LATCH);
                         setup();
@@ -192,6 +197,11 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
     public abstract void stop();
 
     /**
+     * Prepare the entity instance before running any commands. Always 
executed during {@link #start()}.
+     */
+    public void prepare() {}
+
+    /**
      * Implement this method in child classes to add some pre-install behavior
      */
     public void preInstall() {}
@@ -313,10 +323,10 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
         boolean hasAnythingToCopy = ((files != null && files.size() > 0) || 
(templates != null && templates.size() > 0));
         if (hasAnythingToCopy) {
             createDirectory(getInstallDir(), "create install directory");
-    
+
             // TODO see comment in copyResource, that should be queued as a 
task like the above
             // (better reporting in activities console)
-    
+
             if (files != null && files.size() > 0) {
                 for (String source : files.keySet()) {
                     String target = files.get(source);
@@ -324,7 +334,7 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
                     copyResource(source, destination, true);
                 }
             }
-    
+
             if (templates != null && templates.size() > 0) {
                 for (String source : templates.keySet()) {
                     String target = templates.get(source);
@@ -492,34 +502,16 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
     }
 
     protected void waitForConfigKey(ConfigKey<?> configKey) {
-        Object val = entity.getConfig(configKey);
+        Object val = entity.config().get(configKey);
         if (val != null) log.debug("{} finished waiting for {} (value {}); 
continuing...", new Object[] {this, configKey, val});
     }
 
-    /**
-     * @deprecated since 0.5.0; instead rely on {@link 
org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager} to 
include local-repo, such as:
-     *
-     * <pre>
-     * {@code
-     * DownloadResolver resolver = Entities.newDownloader(this);
-     * List<String> urls = resolver.getTargets();
-     * }
-     * </pre>
-     */
-    protected String getEntityVersionLabel() {
-        return getEntityVersionLabel("_");
-    }
-
-    /**
-     * @deprecated since 0.5.0; instead rely on {@link 
org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager} to 
include local-repo
-     */
-    protected String getEntityVersionLabel(String separator) {
-        return elvis(entity.getEntityType().getSimpleName(),
-                entity.getClass().getName())+(getVersion() != null ? 
separator+getVersion() : "");
+    public String getArchiveNameFormat() {
+        return 
getEntity().config().get(SoftwareProcess.ARCHIVE_DIRECTORY_NAME_FORMAT);
     }
 
     public String getVersion() {
-        return getEntity().getConfig(SoftwareProcess.SUGGESTED_VERSION);
+        return getEntity().config().get(SoftwareProcess.SUGGESTED_VERSION);
     }
 
     public abstract String getRunDir();

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d50580be/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
----------------------------------------------------------------------
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 f9ca7ff..660f537 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
@@ -27,6 +27,16 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolver;
 import org.apache.brooklyn.core.BrooklynLogging;
@@ -35,21 +45,10 @@ 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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
 import org.apache.brooklyn.util.core.internal.ssh.SshTool;
 import org.apache.brooklyn.util.core.internal.ssh.sshj.SshjTool;
@@ -57,7 +56,6 @@ 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.guava.Maybe;
 import org.apache.brooklyn.util.os.Os;
 import org.apache.brooklyn.util.ssh.BashCommands;
 import org.apache.brooklyn.util.stream.KnownSizeInputStream;
@@ -83,10 +81,26 @@ public abstract class AbstractSoftwareProcessSshDriver 
extends AbstractSoftwareP
     private volatile String installDir;
     private volatile String runDir;
     private volatile String expandedInstallDir;
+
     private final Object installDirSetupMutex = new Object();
 
     protected volatile DownloadResolver resolver;
 
+    @Override
+    public void prepare() {
+        // Check if we should create a download resolver?
+        String downloadUrl = 
getEntity().config().get(SoftwareProcess.DOWNLOAD_URL);
+        if (Strings.isNonEmpty(downloadUrl)) {
+            resolver = Entities.newDownloader(this);
+            String formatString = getArchiveNameFormat();
+            if (Strings.isNonEmpty(formatString)) {
+                setExpandedInstallDir(Os.mergePaths(getInstallDir(), 
resolver.getUnpackedDirectoryName(String.format(formatString, getVersion()))));
+            } else {
+                setExpandedInstallDir(getInstallDir());
+            }
+        }
+    }
+
     /** include this flag in newScript creation to prevent entity-level flags 
from being included;
      * any SSH-specific flags passed to newScript override flags from the 
entity,
      * and flags from the entity override flags on the location
@@ -130,17 +144,6 @@ public abstract class AbstractSoftwareProcessSshDriver 
extends AbstractSoftwareP
             // *before* we computed the install label, or that label may have 
changed since previous install; now force a recompute
             setInstallLabel();
 
-            // deprecated in 0.7.0 - "brooklyn.dirs.install" is no longer 
supported
-            Maybe<Object> minstallDir = 
getEntity().getConfigRaw(SoftwareProcess.INSTALL_DIR, false);
-            if (!minstallDir.isPresent() || minstallDir.get()==null) {
-                String installBasedir = 
((EntityInternal)entity).getManagementContext().getConfig().getFirst("brooklyn.dirs.install");
-                if (installBasedir != null) {
-                    log.warn("Using legacy 'brooklyn.dirs.install' setting for 
"+entity+"; may be removed in future versions.");
-                    
setInstallDir(Os.tidyPath(Os.mergePathsUnix(installBasedir, 
getEntityVersionLabel()+"_"+entity.getId())));
-                    return installDir;
-                }
-            }
-
             // set it null first so that we force a recompute
             setInstallDir(null);
             setInstallDir(Os.tidyPath(ConfigToAttributes.apply(getEntity(), 
SoftwareProcess.INSTALL_DIR)));
@@ -181,19 +184,6 @@ public abstract class AbstractSoftwareProcessSshDriver 
extends AbstractSoftwareP
             return runDir;
         }
 
-        // deprecated in 0.7.0
-        Maybe<Object> mRunDir = 
getEntity().getConfigRaw(SoftwareProcess.RUN_DIR, true);
-        if (!mRunDir.isPresent() || mRunDir.get()==null) {
-            String runBasedir = 
((EntityInternal)entity).getManagementContext().getConfig().getFirst("brooklyn.dirs.run");
-            if (runBasedir != null) {
-                log.warn("Using legacy 'brooklyn.dirs.run' setting for 
"+entity+"; may be removed in future versions.");
-                runDir = Os.mergePathsUnix(runBasedir, 
entity.getApplication().getId()+"/"+"entities"+"/"+getEntityVersionLabel()+"_"+entity.getId());
-                runDir = Os.tidyPath(runDir);
-                getEntity().sensors().set(SoftwareProcess.RUN_DIR, runDir);
-                return runDir;
-            }
-        }
-
         setRunDir(Os.tidyPath(ConfigToAttributes.apply(getEntity(), 
SoftwareProcess.RUN_DIR)));
         return runDir;
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d50580be/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
index 897afab..979158f 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
@@ -29,6 +29,13 @@ import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
@@ -48,12 +55,6 @@ import org.apache.brooklyn.util.repeat.Repeater;
 import org.apache.brooklyn.util.stream.Streams;
 import org.apache.brooklyn.util.text.Strings;
 import org.apache.brooklyn.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
 
 public abstract class AbstractSoftwareProcessWinRmDriver extends 
AbstractSoftwareProcessDriver implements NativeWindowsScriptRunner {
     private static final Logger LOG = 
LoggerFactory.getLogger(AbstractSoftwareProcessWinRmDriver.class);
@@ -177,6 +178,28 @@ public abstract class AbstractSoftwareProcessWinRmDriver 
extends AbstractSoftwar
     public int executePsCommand(Map flags, String command, String phase) {
         return executeNativeOrPsCommand(flags, null, command, phase, true);
     }
+    
+    /**
+     * @deprecated since 0.5.0; instead rely on {@link 
org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager} to inc
+     *
+     * <pre>
+     * {@code
+     * DownloadResolver resolver = Entities.newDownloader(this);
+     * List<String> urls = resolver.getTargets();
+     * }
+     * </pre>
+     */
+    protected String getEntityVersionLabel() {
+        return getEntityVersionLabel("_");
+    }
+
+    /**
+     * @deprecated since 0.5.0; instead rely on {@link 
org.apache.brooklyn.api.entity.drivers.downloads.DownloadResolverManager} to inc
+     */
+    protected String getEntityVersionLabel(String separator) {
+        return elvis(entity.getEntityType().getSimpleName(),
+               entity.getClass().getName())+(getVersion() != null ? 
separator+getVersion() : "");
+    }
 
     @Override
     public String getRunDir() {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d50580be/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
----------------------------------------------------------------------
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
index 86f7059..7ee393a 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/SoftwareProcess.java
@@ -20,20 +20,18 @@ package org.apache.brooklyn.entity.software.base;
 
 import java.util.Collection;
 import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
 
-import com.google.common.collect.Sets;
+import com.google.common.annotations.Beta;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.TypeToken;
+
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.location.MachineProvisioningLocation;
-import org.apache.brooklyn.api.location.PortRange;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.annotation.Effector;
 import org.apache.brooklyn.core.config.ConfigKeys;
-import org.apache.brooklyn.core.config.ConfigUtils;
 import org.apache.brooklyn.core.config.MapConfigKey;
-import org.apache.brooklyn.core.entity.AbstractEntity;
 import org.apache.brooklyn.core.entity.Attributes;
 import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
 import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
@@ -42,16 +40,9 @@ import org.apache.brooklyn.core.entity.trait.Startable;
 import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
 import org.apache.brooklyn.core.sensor.Sensors;
 import org.apache.brooklyn.util.collections.MutableMap;
-import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.flags.SetFromFlag;
-import org.apache.brooklyn.util.core.flags.TypeCoercions;
-import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.time.Duration;
 
-import com.google.common.annotations.Beta;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.TypeToken;
-
 public interface SoftwareProcess extends Entity, Startable {
 
     AttributeSensor<String> HOSTNAME = Attributes.HOSTNAME;
@@ -136,6 +127,11 @@ public interface SoftwareProcess extends Entity, Startable 
{
     @SetFromFlag("downloadAddonUrls")
     AttributeSensorAndConfigKey<Map<String,String>,Map<String,String>> 
DOWNLOAD_ADDON_URLS = Attributes.DOWNLOAD_ADDON_URLS;
 
+    @SetFromFlag("archiveNameFormat")
+    ConfigKey<String> ARCHIVE_DIRECTORY_NAME_FORMAT = 
ConfigKeys.newStringConfigKey("archive.nameFormat",
+            "The format for the directory created when the installation 
archive is extracted, if required. " +
+            "The version string will be passed in as the first argument, 
replacing the %s format specifier");
+
     @SetFromFlag("installLabel")
     ConfigKey<String> INSTALL_UNIQUE_LABEL = 
BrooklynConfigKeys.INSTALL_UNIQUE_LABEL;
 
@@ -144,30 +140,26 @@ public interface SoftwareProcess extends Entity, 
Startable {
 
     @SetFromFlag("installDir")
     AttributeSensorAndConfigKey<String,String> INSTALL_DIR = 
BrooklynConfigKeys.INSTALL_DIR;
-    @Deprecated
-    ConfigKey<String> SUGGESTED_INSTALL_DIR = 
BrooklynConfigKeys.SUGGESTED_INSTALL_DIR;
 
     @SetFromFlag("runDir")
     AttributeSensorAndConfigKey<String,String> RUN_DIR = 
BrooklynConfigKeys.RUN_DIR;
-    @Deprecated
-    ConfigKey<String> SUGGESTED_RUN_DIR = BrooklynConfigKeys.SUGGESTED_RUN_DIR;
 
-    public static final ConfigKey<Boolean> OPEN_IPTABLES = 
ConfigKeys.newBooleanConfigKey("openIptables", 
+    ConfigKey<Boolean> OPEN_IPTABLES = 
ConfigKeys.newBooleanConfigKey("openIptables",
             "Whether to open the INBOUND_PORTS via iptables rules; " +
             "if true then ssh in to run iptables commands, as part of machine 
provisioning", false);
 
-    public static final ConfigKey<Boolean> STOP_IPTABLES = 
ConfigKeys.newBooleanConfigKey("stopIptables", 
+    ConfigKey<Boolean> STOP_IPTABLES = 
ConfigKeys.newBooleanConfigKey("stopIptables",
             "Whether to stop iptables entirely; " +
             "if true then ssh in to stop the iptables service, as part of 
machine provisioning", false);
 
-    public static final ConfigKey<Boolean> DONT_REQUIRE_TTY_FOR_SUDO = 
ConfigKeys.newBooleanConfigKey("dontRequireTtyForSudo", 
+    ConfigKey<Boolean> DONT_REQUIRE_TTY_FOR_SUDO = 
ConfigKeys.newBooleanConfigKey("dontRequireTtyForSudo",
             "Whether to explicitly set /etc/sudoers, so don't need tty (will 
leave unchanged if 'false'); " +
             "some machines require a tty for sudo; brooklyn by default does 
not use a tty " +
             "(so that it can get separate error+stdout streams); you can 
enable a tty as an " +
             "option to every ssh command, or you can do it once and " +
             "modify the machine so that a tty is not subsequently required.",
             false);
-    
+
     /**
      * Files to be copied to the server before pre-install.
      * <p>

Reply via email to