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 2023/05/12 11:07:18 UTC

[brooklyn-server] branch master updated: minor tweaks to software process driver to allow running without a location

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


The following commit(s) were added to refs/heads/master by this push:
     new acdbee92cb minor tweaks to software process driver to allow running without a location
acdbee92cb is described below

commit acdbee92cb8224871220f6576230322e0344624b
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Fri May 12 12:06:40 2023 +0100

    minor tweaks to software process driver to allow running without a location
---
 .../base/AbstractSoftwareProcessDriver.java        |  9 +++++----
 .../base/AbstractSoftwareProcessSshDriver.java     | 23 ++++++++++++++++------
 2 files changed, 22 insertions(+), 10 deletions(-)

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 9f0cca99ee..a1c74a3792 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
@@ -88,7 +88,7 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr
 
     public AbstractSoftwareProcessDriver(EntityLocal entity, Location location) {
         this.entity = checkNotNull(entity, "entity");
-        this.location = checkNotNull(location, "location");
+        this.location = location;  // shouldn't normally be null, but useful in some cases where SSH driver is subclassed for other purposes
         this.resource = ResourceUtils.create(entity);
     }
 
@@ -124,7 +124,8 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr
     @Override
     public void start() {
         boolean skipStart = false;
-        Optional<Boolean> locationRunning = Optional.fromNullable(getLocation().getConfig(BrooklynConfigKeys.SKIP_ENTITY_START_IF_RUNNING));
+        final Location l = getLocation();
+        Optional<Boolean> locationRunning = Optional.fromNullable(l==null ? null : l.getConfig(BrooklynConfigKeys.SKIP_ENTITY_START_IF_RUNNING));
         Optional<Boolean> entityRunning = Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_START_IF_RUNNING));
         Optional<Boolean> entityStarted = Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_START));
         if (locationRunning.or(entityRunning).or(false)) {
@@ -139,7 +140,7 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr
 
         if (!skipStart) {
             DynamicTasks.queue("install", new Runnable() { @Override public void run() {
-                Optional<Boolean> locationInstalled = Optional.fromNullable(getLocation().getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
+                Optional<Boolean> locationInstalled = Optional.fromNullable(l==null ? null : l.getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
                 Optional<Boolean> entityInstalled = Optional.fromNullable(entity.getConfig(BrooklynConfigKeys.SKIP_ENTITY_INSTALLATION));
 
                 boolean skipInstall = locationInstalled.or(entityInstalled).or(false);
@@ -758,7 +759,7 @@ public abstract class AbstractSoftwareProcessDriver implements SoftwareProcessDr
     public void setExpandedInstallDir(String val) {
         String oldVal = getEntity().getAttribute(SoftwareProcess.EXPANDED_INSTALL_DIR);
         if (Strings.isNonBlank(oldVal) && !oldVal.equals(val)) {
-            log.info("Resetting expandedInstallDir (to "+val+" from "+oldVal+") for "+getEntity());
+            log.debug("Resetting expandedInstallDir (to "+val+" from "+oldVal+") for "+getEntity());
         }
 
         expandedInstallDir = val;
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 20c3dbc282..8d626c4db5 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
@@ -43,6 +43,7 @@ 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.mutex.MutexSupport;
 import org.apache.brooklyn.util.core.mutex.WithMutexes;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.core.task.Tasks;
@@ -107,7 +108,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
         // FIXME this assumes we own the location, and causes warnings about configuring location after deployment;
         // better would be to wrap the ssh-execution-provider to supply these flags
-        if (getSshFlags()!=null && !getSshFlags().isEmpty())
+        if (getSshFlags()!=null && !getSshFlags().isEmpty() && machine!=null)
             machine.configure(getSshFlags());
 
         // ensure these are set using the routines below, not a global ConfigToAttributes.apply()
@@ -186,13 +187,23 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
                 flags.put("err", stderr);
             }
         }
-        if (!flags.containsKey("logPrefix")) flags.put("logPrefix", ""+entity.getId()+"@"+getLocation().getDisplayName());
+        if (!flags.containsKey("logPrefix")) {
+            SshMachineLocation l = getLocation();
+            flags.put("logPrefix", "" + entity.getId() + (l!=null ? "@" + l.getDisplayName() : ""));
+        }
         return getMachine().execScript(flags, summaryForLogging, script, environment);
     }
 
+    private transient WithMutexes defaultMutexes = new MutexSupport();
+    protected WithMutexes getMutexes() {
+        SshMachineLocation l = getLocation();
+        if (l!=null) return l.mutexes();
+        return defaultMutexes;
+    }
+
     @Override
     public void copyPreInstallResources() {
-        final WithMutexes mutexSupport = getLocation().mutexes();
+        final WithMutexes mutexSupport = getMutexes();
         String mutexId = "installation lock at host";
         mutexSupport.acquireMutex(mutexId, "pre-installation lock at host for files and templates");
         try {
@@ -207,7 +218,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
     @Override
     public void copyInstallResources() {
-        final WithMutexes mutexSupport = getLocation().mutexes();
+        final WithMutexes mutexSupport = getMutexes();
         String mutexId = "installation lock at host";
         mutexSupport.acquireMutex(mutexId, "installation lock at host for files and templates");
         try {
@@ -222,7 +233,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
 
     @Override
     public void copyCustomizeResources() {
-        final WithMutexes mutexSupport = getLocation().mutexes();
+        final WithMutexes mutexSupport = getMutexes();
         String mutexId = "installation lock at host";
         mutexSupport.acquireMutex(mutexId, "installation lock at host for files and templates");
         try {
@@ -478,7 +489,7 @@ public abstract class AbstractSoftwareProcessSshDriver extends AbstractSoftwareP
             if (INSTALLING.equals(phase)) {
                 // mutexId should be global because otherwise package managers will contend with each other
                 final String mutexId = "installation lock at host";
-                s.useMutex(getLocation().mutexes(), mutexId, "installing "+elvis(entity,this));
+                s.useMutex(getMutexes(), mutexId, "installing "+elvis(entity,this));
                 s.header.append(
                         "export "+INSTALL_DIR_ENV_VAR+"=\""+getInstallDir()+"\"",
                         "mkdir -p $"+INSTALL_DIR_ENV_VAR,