Hi all, I just sent a patch (ACE-277 ) with functionality to configure cloud nodes from the UI before starting them. This was only possible from a configuration file before with the limitation that you could only launch one type of node (the same hardware, image, bootscript etc.). To support this some refactoring in the NodeLauncher and AmazonNodeLauncher were required which I would like to discuss here.
The NodeLauncher interface should be independent of the type of nodes being used (e.g. cloud nodes, embedded devices etc.). The UI however should contain configuration options specific for the type of nodes being launched. Configuring cloud nodes using jclouds for example should support setting a hardware type, private key file, image id etc. Those properties are not relevant for launching other types of nodes/devices. A new interface NodeLauncherConfig is introduced. This interface is empty because as described above it's impossible to come up with a list of configuration properties that all our potential target types support. This way the NodeLauncher interface is still abstract, while it supports the concept of configuration. A NodeLauncher implementation should provide an implementation of NodeLauncher with specific properties for that kind of nodes it can launch. The AmazonNodeLauncher for example should provide an implementation with properties reflecting the jclouds API. The NodeLauncher implementation should cast the NodeLauncher interface to it's specific implementation to do anything useful with it. The UI is also specifically built for a type of node. The current implementation is specifically built for cloud nodes for example. A NodePanel should therefore also cast the NodeLauncherConfig to the specific implementation. This doesn't brake abstractions, because the UI is designed for specific implementation. A new type of node launcher should also provide a new UI. Another thing to improve is changing the AmazonNodeLauncher to a more general JcloudsNodeLauncher so that it can launch nodes on different clouds. I made some preparations for that in this patch, and can finalize that work after this patch is applied. Cheers, Paul Bakker