Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 845b7564c -> 7870e36ff
KARAF-3551 - Extend instance service with ssh and RMI hosts Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/7870e36f Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/7870e36f Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/7870e36f Branch: refs/heads/karaf-3.0.x Commit: 7870e36ffe18f577f68e24070aae7e492478d77a Parents: 845b756 Author: Jean-Baptiste Onofré <[email protected]> Authored: Mon Feb 8 15:06:29 2016 +0100 Committer: Jean-Baptiste Onofré <[email protected]> Committed: Mon Feb 8 15:06:29 2016 +0100 ---------------------------------------------------------------------- .../karaf/instance/command/ListCommand.java | 6 +++ .../apache/karaf/instance/core/Instance.java | 6 +++ .../karaf/instance/core/InstancesMBean.java | 7 ++- .../instance/core/internal/InstanceImpl.java | 12 +++++ .../core/internal/InstanceServiceImpl.java | 55 ++++++++++++++------ .../core/internal/InstanceToTableMapper.java | 13 +++-- .../internal/InstanceServiceMBeanImplTest.java | 4 ++ .../internal/InstanceToTableMapperTest.java | 12 +++++ 8 files changed, 93 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java ---------------------------------------------------------------------- diff --git a/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java b/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java index fe33ab5..8f6761f 100644 --- a/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java +++ b/instance/command/src/main/java/org/apache/karaf/instance/command/ListCommand.java @@ -38,16 +38,22 @@ public class ListCommand extends InstanceCommandSupport { Instance[] instances = getInstanceService().getInstances(); ShellTable table = new ShellTable(); table.column("SSH Port").alignRight(); + table.column("SSH Host").alignRight(); table.column("RMI Registry").alignRight(); + table.column("RMI Registry Host").alignRight(); table.column("RMI Server").alignRight(); + table.column("RMI Server Host").alignRight(); table.column("State"); table.column("PID"); table.column(getRightColumnHeader()); for (Instance instance : instances) { table.addRow().addContent( instance.getSshPort(), + instance.getSshHost(), instance.getRmiRegistryPort(), + instance.getRmiRegistryHost(), instance.getRmiServerPort(), + instance.getRmiServerHost(), instance.getState(), instance.getPid(), getRightColumnValue(instance)); http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java ---------------------------------------------------------------------- diff --git a/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java b/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java index b30f670..ec6aaa5 100644 --- a/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java +++ b/instance/core/src/main/java/org/apache/karaf/instance/core/Instance.java @@ -41,14 +41,20 @@ public interface Instance { void changeSshPort(int port) throws Exception; + String getSshHost(); + int getRmiRegistryPort(); void changeRmiRegistryPort(int port) throws Exception; + String getRmiRegistryHost(); + int getRmiServerPort(); void changeRmiServerPort(int port) throws Exception; + String getRmiServerHost(); + String getJavaOpts(); void changeJavaOpts(String javaOpts) throws Exception; http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/main/java/org/apache/karaf/instance/core/InstancesMBean.java ---------------------------------------------------------------------- diff --git a/instance/core/src/main/java/org/apache/karaf/instance/core/InstancesMBean.java b/instance/core/src/main/java/org/apache/karaf/instance/core/InstancesMBean.java index 0265091..1c74294 100644 --- a/instance/core/src/main/java/org/apache/karaf/instance/core/InstancesMBean.java +++ b/instance/core/src/main/java/org/apache/karaf/instance/core/InstancesMBean.java @@ -25,14 +25,17 @@ public interface InstancesMBean { String INSTANCE_NAME = "Name"; String INSTANCE_IS_ROOT = "Is Root"; String INSTANCE_SSH_PORT = "SSH Port"; + String INSTANCE_SSH_HOST = "SSH Host"; String INSTANCE_RMI_REGISTRY_PORT = "RMI Registry Port"; + String INSTANCE_RMI_REGISTRY_HOST = "RMI Registry Host"; String INSTANCE_RMI_SERVER_PORT = "RMI Server Port"; + String INSTANCE_RMI_SERVER_HOST = "RMI Server Host"; String INSTANCE_STATE = "State"; String INSTANCE_LOCATION = "Location"; String INSTANCE_JAVAOPTS = "JavaOpts"; - String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT, INSTANCE_SSH_PORT, INSTANCE_RMI_REGISTRY_PORT, - INSTANCE_RMI_SERVER_PORT, INSTANCE_STATE, INSTANCE_LOCATION, INSTANCE_JAVAOPTS }; + String[] INSTANCE = {INSTANCE_PID, INSTANCE_NAME, INSTANCE_IS_ROOT, INSTANCE_SSH_PORT, INSTANCE_SSH_HOST, INSTANCE_RMI_REGISTRY_PORT, INSTANCE_RMI_REGISTRY_HOST, + INSTANCE_RMI_SERVER_PORT, INSTANCE_RMI_SERVER_HOST, INSTANCE_STATE, INSTANCE_LOCATION, INSTANCE_JAVAOPTS }; // Operations int createInstance(String name, int sshPort, int rmiRegistryPort, int rmiServerPort, String location, String javaOpts, String features, String featureURLs) throws MBeanException; http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java ---------------------------------------------------------------------- diff --git a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java index 981ff9e..6eeb5cd 100644 --- a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java +++ b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceImpl.java @@ -60,6 +60,10 @@ public class InstanceImpl implements Instance { return service.getInstanceSshPort(name); } + public String getSshHost() { + return service.getInstanceSshHost(name); + } + public void changeSshPort(int port) throws Exception { service.changeInstanceSshPort(name, port); } @@ -72,6 +76,10 @@ public class InstanceImpl implements Instance { service.changeInstanceRmiRegistryPort(name, port); } + public String getRmiRegistryHost() { + return service.getInstanceRmiRegistryHost(name); + } + public int getRmiServerPort() { return service.getInstanceRmiServerPort(name); } @@ -80,6 +88,10 @@ public class InstanceImpl implements Instance { service.changeInstanceRmiServerPort(name, port); } + public String getRmiServerHost() { + return service.getInstanceRmiServerHost(name); + } + public String getJavaOpts() { return service.getInstanceJavaOpts(name); } http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java ---------------------------------------------------------------------- diff --git a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java index 7ed6665..b335756 100644 --- a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java +++ b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceServiceImpl.java @@ -733,6 +733,10 @@ public class InstanceServiceImpl implements InstanceService { setKarafPort(name, "etc/org.apache.karaf.shell.cfg", "sshPort", port); } + String getInstanceSshHost(String name) { + return getKarafHost(name, "etc/org.apache.karaf.shell.cfg", "sshHost"); + } + int getInstanceRmiRegistryPort(String name) { return getKarafPort(name, "etc/org.apache.karaf.management.cfg", "rmiRegistryPort"); } @@ -741,6 +745,10 @@ public class InstanceServiceImpl implements InstanceService { setKarafPort(name, "etc/org.apache.karaf.management.cfg", "rmiRegistryPort", port); } + String getInstanceRmiRegistryHost(String name) { + return getKarafHost(name, "etc/org.apache.karaf.management.cfg", "rmiRegistryHost"); + } + int getInstanceRmiServerPort(String name) { return getKarafPort(name, "etc/org.apache.karaf.management.cfg", "rmiServerPort"); } @@ -749,6 +757,10 @@ public class InstanceServiceImpl implements InstanceService { setKarafPort(name, "etc/org.apache.karaf.management.cfg", "rmiServerPort", port); } + String getInstanceRmiServerHost(String name) { + return getKarafHost(name, "etc/org.apache.karaf.management.cfg", "rmiServerHost"); + } + private int getKarafPort(final String name, final String path, final String key) { return execute(new Task<Integer>() { public Integer call(State state) throws IOException { @@ -757,6 +769,7 @@ public class InstanceServiceImpl implements InstanceService { }, false); } + private Integer getKarafPort(State state, String name, String path, final String key) { InstanceState instance = state.instances.get(name); if (instance == null) { @@ -773,23 +786,6 @@ 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>() { @@ -813,6 +809,31 @@ public class InstanceServiceImpl implements InstanceService { }, true); } + private String getKarafHost(final String name, final String path, final String key) { + return execute(new Task<String>() { + public String call(State state) throws IOException { + return InstanceServiceImpl.this.getKarafHost(state, name, path, key); + } + }, false); + } + + 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"; + } + } + boolean isInstanceRoot(final String name) { return execute(new Task<Boolean>() { public Boolean call(State state) throws IOException { http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceToTableMapper.java ---------------------------------------------------------------------- diff --git a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceToTableMapper.java b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceToTableMapper.java index baaedaf..45d1cbc 100644 --- a/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceToTableMapper.java +++ b/instance/core/src/main/java/org/apache/karaf/instance/core/internal/InstanceToTableMapper.java @@ -43,8 +43,10 @@ public class InstanceToTableMapper { state = "Error"; } Object[] itemValues = new Object[] {instance.getPid(), instance.getName(), instance.isRoot(), - instance.getSshPort(), instance.getRmiRegistryPort(), - instance.getRmiServerPort(), state, instance.getLocation(), + instance.getSshPort(), instance.getSshHost(), + instance.getRmiRegistryPort(), instance.getRmiRegistryHost(), + instance.getRmiServerPort(), instance.getRmiServerHost(), + state, instance.getLocation(), instance.getJavaOpts()}; return new CompositeDataSupport(comp, InstancesMBean.INSTANCE, itemValues); } @@ -52,13 +54,18 @@ public class InstanceToTableMapper { private static CompositeType createRowType() throws OpenDataException { String desc = "This type describes Karaf instance"; OpenType<?>[] itemTypes = new OpenType[] {SimpleType.INTEGER, SimpleType.STRING, SimpleType.BOOLEAN, - SimpleType.INTEGER, SimpleType.INTEGER, SimpleType.INTEGER, + SimpleType.INTEGER, SimpleType.STRING, + SimpleType.INTEGER, SimpleType.STRING, + SimpleType.INTEGER, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING, SimpleType.STRING}; String[] descriptions = new String[] {"The Process ID of the instance or 0 if not running", "The name of the instance", "Whether the instance is root", "The SSH port that can be used to connect to the instance", + "The host address where the SSH server is listening", "The RMI registry port that can be used to manage the instance", + "The host address where the RMI registry is listening", "The RMI server port that can be used to manage the instance", + "The host address where the RMI server is listening", "The state of the instance", "The location of the instance", "The Java options of the instance"}; CompositeType comp = new CompositeType("Instances", desc, InstancesMBean.INSTANCE, descriptions, itemTypes); http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceServiceMBeanImplTest.java ---------------------------------------------------------------------- diff --git a/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceServiceMBeanImplTest.java b/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceServiceMBeanImplTest.java index 309acfb..8dbf49a 100644 --- a/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceServiceMBeanImplTest.java +++ b/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceServiceMBeanImplTest.java @@ -66,8 +66,11 @@ public class InstanceServiceMBeanImplTest extends TestCase { Instance i1 = EasyMock.createMock(Instance.class); EasyMock.expect(i1.getPid()).andReturn(1234); EasyMock.expect(i1.getSshPort()).andReturn(8818); + EasyMock.expect(i1.getSshHost()).andReturn("0.0.0.0"); EasyMock.expect(i1.getRmiRegistryPort()).andReturn(1122); + EasyMock.expect(i1.getRmiRegistryHost()).andReturn("0.0.0.0"); EasyMock.expect(i1.getRmiServerPort()).andReturn(44444); + EasyMock.expect(i1.getRmiServerHost()).andReturn("0.0.0.0"); EasyMock.expect(i1.getName()).andReturn("i1"); EasyMock.expect(i1.isRoot()).andReturn(true); EasyMock.expect(i1.getLocation()).andReturn("somewhere"); @@ -92,6 +95,7 @@ public class InstanceServiceMBeanImplTest extends TestCase { Assert.assertTrue(cd1.containsValue(8818)); Assert.assertTrue(cd1.containsValue(1122)); Assert.assertTrue(cd1.containsValue(44444)); + Assert.assertTrue(cd1.containsValue("0.0.0.0")); Assert.assertTrue(cd1.containsValue("somewhere")); Assert.assertTrue(cd1.containsValue("someopts")); Assert.assertTrue(cd1.containsValue("Stopped")); http://git-wip-us.apache.org/repos/asf/karaf/blob/7870e36f/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceToTableMapperTest.java ---------------------------------------------------------------------- diff --git a/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceToTableMapperTest.java b/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceToTableMapperTest.java index c9541d3..6210ccb 100644 --- a/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceToTableMapperTest.java +++ b/instance/core/src/test/java/org/apache/karaf/instance/core/management/internal/InstanceToTableMapperTest.java @@ -36,8 +36,11 @@ public class InstanceToTableMapperTest extends TestCase { EasyMock.expect(instance.getName()).andReturn("MyInstance"); EasyMock.expect(instance.isRoot()).andReturn(false); EasyMock.expect(instance.getSshPort()).andReturn(0); + EasyMock.expect(instance.getSshHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getRmiRegistryPort()).andReturn(0); + EasyMock.expect(instance.getRmiRegistryHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getRmiServerPort()).andReturn(0); + EasyMock.expect(instance.getRmiServerHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getState()).andThrow(new Exception("gotcha")); EasyMock.expect(instance.getLocation()).andReturn("somewhere"); EasyMock.expect(instance.getJavaOpts()).andReturn("someopts"); @@ -52,8 +55,11 @@ public class InstanceToTableMapperTest extends TestCase { Assert.assertEquals("MyInstance", cd.get("Name")); Assert.assertEquals(false, cd.get("Is Root")); Assert.assertEquals(0, cd.get("SSH Port")); + Assert.assertEquals("0.0.0.0", cd.get("SSH Host")); Assert.assertEquals(0, cd.get("RMI Registry Port")); + Assert.assertEquals("0.0.0.0", cd.get("RMI Registry Host")); Assert.assertEquals(0, cd.get("RMI Server Port")); + Assert.assertEquals("0.0.0.0", cd.get("RMI Server Host")); Assert.assertEquals("Error", cd.get("State")); Assert.assertEquals("somewhere", cd.get("Location")); Assert.assertEquals("someopts", cd.get("JavaOpts")); @@ -65,8 +71,11 @@ public class InstanceToTableMapperTest extends TestCase { EasyMock.expect(instance.getName()).andReturn("MyInstance"); EasyMock.expect(instance.isRoot()).andReturn(true); EasyMock.expect(instance.getSshPort()).andReturn(0); + EasyMock.expect(instance.getSshHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getRmiRegistryPort()).andReturn(0); + EasyMock.expect(instance.getRmiRegistryHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getRmiServerPort()).andReturn(0); + EasyMock.expect(instance.getRmiServerHost()).andReturn("0.0.0.0"); EasyMock.expect(instance.getState()).andReturn("Started"); EasyMock.expect(instance.getLocation()).andReturn(null); EasyMock.expect(instance.getJavaOpts()).andReturn(null); @@ -81,8 +90,11 @@ public class InstanceToTableMapperTest extends TestCase { Assert.assertEquals("MyInstance", cd.get("Name")); Assert.assertEquals(true, cd.get("Is Root")); Assert.assertEquals(0, cd.get("SSH Port")); + Assert.assertEquals("0.0.0.0", cd.get("SSH Host")); Assert.assertEquals(0, cd.get("RMI Registry Port")); + Assert.assertEquals("0.0.0.0", cd.get("RMI Registry Host")); Assert.assertEquals(0, cd.get("RMI Server Port")); + Assert.assertEquals("0.0.0.0", cd.get("RMI Server Host")); Assert.assertEquals("Started", cd.get("State")); Assert.assertNull(cd.get("Location")); Assert.assertNull(cd.get("JavaOpts"));
