Invoke a command on a node in Karaf Cellar based on NodeID

140 views Asked by At

At the moment, I have a cellar setup with just two nodes (meant for testing); as seen in the dump below:

  | Id                | Alias          | Host Name    | Port 
--+-------------------+----------------+--------------+----- 
x | 192.168.99.1:5702 | localhost:8182 | 192.168.99.1 | 5702 
  | 192.168.99.1:5701 | localhost:8181 | 192.168.99.1 | 5701 

Edit 1 -- Additional Information about the setup (begin):

I have multiple cellar nodes. I am trying to make one node as a master, which is supposed to expose a management web panel via which I would like to fetch stats from all the other nodes. For this purpose, I have exposed my custom implementations of Mbeans involving my business logics. I understand that these mbeans can be invoked using Jolokia, and I am already doing that. So, that means, all these different nodes will have Jolokia installed, while the master node will have Hawtio installed (such that I can connect to slave nodes via Jolokia API through hawtio panel).

Right now, I am manually assigning the alias for every node (which refers to the web endpoint that it exposes via pax.web configuration). This is just a workaround to simplify my testing procedures.

Desired Process:

I have access to the ClusterManager service via service registry. Thus, I am able to invoke clusterManager.listNodes() and loop through the result in my MBean. While looping through this, all I get is the basic node info. But, if it is possible, I would like to parse the etc/org.ops4j.pax.web.cfg file from every node and get the port number (or the value of the property org.osgi.service.http.port).

While retrieving the list of nodes, I would like to get a response as:

{
    "Node 1": {
        "hostname": "192.168.0.100",
        "port": 5701,
        "webPort": "8181",
        "alias": "Data-Node-A"
        "id": "192.168.0.100:5701"
    },
    "Node 2": {
        "hostname": "192.168.0.100",
        "port": 5702,
        "webPort": "8182",
        "alias": "Data-Node-B",
        "id": "192.168.0.100:5702"
    }
}

Edit 1 (end):

I am trying to find a way to execute specific commands on a particular node. For example, I want to execute a command on Node *:5702 from *:5701 such that *:5702 returns the properties and values of a local configuration file.

My current method is not optimal, as I am setting the alias(the web endpoint for jolokia) of a node manually, and based on that I am retrieving my desired info via my custom mbean. I guess, this is not the best practice.

So far, I have:

Set<Node> nodes = clusterManager.listNodes();

thus, if I loop through this set of nodes, I would like to retrieve config settings from local configuration file from every node based on the node ID.

Do I need to implement something specific to dosgi here?

Or would it be something similar to the sample code of ping-pong (https://github.com/apache/karaf-cellar/tree/master/utils/src/main/java/org/apache/karaf/cellar/utils/ping) from apache-cellar project?

Any input on this would be very helpful.

P.S. I tried posting this in Karaf mailing list, but my posts are getting bounced.

Regards, Cooshal.

0

There are 0 answers