You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2014/07/15 06:42:49 UTC

git commit: [KARAF-3115]add address flag when create a child instance (cherry picked from commit 71aca23470605f7c78ae7d8bfa99ebef017a79b9)

Repository: karaf
Updated Branches:
  refs/heads/master f0aad2014 -> fc5d92b4d


[KARAF-3115]add address flag when create a child instance
(cherry picked from commit 71aca23470605f7c78ae7d8bfa99ebef017a79b9)

Conflicts:
	instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java
	instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java


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

Branch: refs/heads/master
Commit: fc5d92b4d27525715fb94cc888fd96c50fb40bb0
Parents: f0aad20
Author: Freeman Fang <fr...@gmail.com>
Authored: Mon Jul 14 18:43:06 2014 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Tue Jul 15 12:41:55 2014 +0800

----------------------------------------------------------------------
 .../karaf/instance/command/CreateCommand.java   |  5 +++-
 .../karaf/instance/core/InstanceSettings.java   | 15 +++++++++++-
 .../core/internal/InstanceServiceImpl.java      | 25 +++++++++++++++++++-
 .../resources/etc/org.apache.karaf.shell.cfg    |  2 +-
 4 files changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/fc5d92b4/instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java
----------------------------------------------------------------------
diff --git a/instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java b/instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java
index 9efc268..2d4ac1c 100644
--- a/instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java
+++ b/instance/src/main/java/org/apache/karaf/instance/command/CreateCommand.java
@@ -72,6 +72,9 @@ public class CreateCommand extends InstanceCommandSupport
     @Option(name = "-v", aliases = {"--verbose"}, description = "Display actions performed by the command (disabled by default)", required = false, multiValued = false)
     boolean verbose = false;
 
+    @Option(name = "-a", aliases = {"--adderss"}, description = "IP address of the new container instance running on(When Virtual IP is used)", required = false, multiValued = false)
+    String address = "0.0.0.0";
+
     @Argument(index = 0, name = "name", description="The name of the new container instance", required = true, multiValued = false)
     String instance = null;
 
@@ -101,7 +104,7 @@ public class CreateCommand extends InstanceCommandSupport
                 }
             }
         }
-        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features);
+        InstanceSettings settings = new InstanceSettings(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features, address);
         getInstanceService().createInstance(instance, settings, verbose);
         return null;
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/fc5d92b4/instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java
----------------------------------------------------------------------
diff --git a/instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java b/instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java
index 0f9cf97..8ec9315 100644
--- a/instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java
+++ b/instance/src/main/java/org/apache/karaf/instance/core/InstanceSettings.java
@@ -27,8 +27,13 @@ public class InstanceSettings {
     private final String javaOpts;
     private final List<String> featureURLs;
     private final List<String> features;
+    private final String address;
 
     public InstanceSettings(int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, List<String> featureURLs, List<String> features) {
+        this(sshPort, rmiRegistryPort, rmiServerPort, location, javaOpts, featureURLs, features, "0.0.0.0");
+    }
+
+    public InstanceSettings(int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, List<String> featureURLs, List<String> features, String address) {
         this.sshPort = sshPort;
         this.rmiRegistryPort = rmiRegistryPort;
         this.rmiServerPort = rmiServerPort;
@@ -36,8 +41,10 @@ public class InstanceSettings {
         this.javaOpts = javaOpts;
         this.featureURLs = featureURLs;
         this.features = features;
+        this.address = address;
     }
 
+
     public int getSshPort() {
         return sshPort;
     }
@@ -66,6 +73,10 @@ public class InstanceSettings {
         return features;
     }
 
+    public String getAddress() {
+        return this.address;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (o == this) {
@@ -81,7 +92,8 @@ public class InstanceSettings {
                (location == null ? is.location == null : location.equals(is.location)) &&
                (javaOpts == null ? is.javaOpts == null : javaOpts.equals(is.javaOpts)) &&
                (featureURLs == null ? is.featureURLs == null : featureURLs.equals(is.featureURLs)) &&
-               (features == null ? is.features == null : features.equals(is.features));
+               (features == null ? is.features == null : features.equals(is.features)) &&
+               (address == null ? is.address == null : address.equals(is.address));
     }
 
     @Override
@@ -91,6 +103,7 @@ public class InstanceSettings {
         result = 31 * result + (javaOpts != null ? javaOpts.hashCode() : 0);
         result = 31 * result + (featureURLs != null ? featureURLs.hashCode() : 0);
         result = 31 * result + (features != null ? features.hashCode() : 0);
+        result = 31 * result + (address != null ? address.hashCode() : 0);
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/karaf/blob/fc5d92b4/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
----------------------------------------------------------------------
diff --git a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
index 5700e43..9493ea8 100644
--- a/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
+++ b/instance/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java
@@ -266,6 +266,7 @@ public class InstanceServiceImpl implements InstanceService {
                 if (sshPort <= 0) {
                     sshPort = ++state.defaultSshPortStart;
                 }
+                String sshHost = settings.getAddress();
                 int rmiRegistryPort = settings.getRmiRegistryPort();
                 if (rmiRegistryPort <= 0) {
                     rmiRegistryPort = ++state.defaultRmiRegistryPortStart;
@@ -329,6 +330,7 @@ public class InstanceServiceImpl implements InstanceService {
                 props.put("${SUBST-KARAF-HOME}", System.getProperty("karaf.home"));
                 props.put("${SUBST-KARAF-BASE}", karafBase.getPath());
                 props.put("${SUBST-SSH-PORT}", Integer.toString(sshPort));
+                props.put("${SUBST-SSH-HOST}", sshHost);
                 props.put("${SUBST-RMI-REGISTRY-PORT}", Integer.toString(rmiRegistryPort));
                 props.put("${SUBST-RMI-SERVER-PORT}", Integer.toString(rmiServerPort));
                 copyFilteredResourceToDir(karafBase, "etc/system.properties", props, printOutput);
@@ -824,6 +826,23 @@ public class InstanceServiceImpl implements InstanceService {
             return 0;
         }
     }
+    
+    private String getKarafHost(State state, String name, String path, final String key) {
+        InstanceState instance = state.instances.get(name);
+        if (instance == null) {
+            throw new IllegalArgumentException("Instance " + name + " not found");
+        }
+        File f = new File(instance.loc, path);
+        try {
+            return FileLockUtils.execute(f, new FileLockUtils.CallableWithProperties<String>() {
+                public String call(org.apache.felix.utils.properties.Properties properties) throws IOException {
+                    return properties.get(key).toString();
+                }
+            }, false);
+        } catch (IOException e) {
+            return "0.0.0.0";
+        }
+    }
 
     private void setKarafPort(final String name, final String path, final String key, final int port) throws IOException {
         execute(new Task<Object>() {
@@ -917,6 +936,10 @@ public class InstanceServiceImpl implements InstanceService {
                     throw new IllegalArgumentException("Instance " + name + " not found");
                 }
                 int port = getKarafPort(state, name, "etc/org.apache.karaf.shell.cfg", "sshPort");
+                String host = getKarafHost(state, name, "etc/org.apache.karaf.shell.cfg", "sshHost");
+                if (host.equals("0.0.0.0")) {
+                    host = "localhost";
+                }
                 if (!new File(instance.loc).isDirectory() || port <= 0) {
                     return Instance.ERROR;
                 }
@@ -925,7 +948,7 @@ public class InstanceServiceImpl implements InstanceService {
                     return Instance.STOPPED;
                 } else {
                     try {
-                        Socket s = new Socket("localhost", port);
+                        Socket s = new Socket(host, port);
                         s.close();
                         return Instance.STARTED;
                     } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/fc5d92b4/instance/src/main/resources/org/apache/karaf/instance/resources/etc/org.apache.karaf.shell.cfg
----------------------------------------------------------------------
diff --git a/instance/src/main/resources/org/apache/karaf/instance/resources/etc/org.apache.karaf.shell.cfg b/instance/src/main/resources/org/apache/karaf/instance/resources/etc/org.apache.karaf.shell.cfg
index b00ffc7..c8c6e79 100644
--- a/instance/src/main/resources/org/apache/karaf/instance/resources/etc/org.apache.karaf.shell.cfg
+++ b/instance/src/main/resources/org/apache/karaf/instance/resources/etc/org.apache.karaf.shell.cfg
@@ -25,7 +25,7 @@
 # Via sshPort and sshHost you define the address you can login into Karaf.
 #
 sshPort = ${SUBST-SSH-PORT}
-sshHost = 0.0.0.0
+sshHost = ${SUBST-SSH-HOST}
 
 #
 # The sshIdleTimeout defines the inactivity timeout to logout the SSH session.