It's easy to usr jclouds and whirr inside an OSGi container - just add the feature url. Bonus: you can also use jclouds shell interface (part of jclouds cli).
Another option is to upgrade the CloudStack API to use the new version. On Sep 18, 2013 5:14 AM, "Han,Meng" <meng...@ufl.edu> wrote: > Dear all, > > I am adding an API to CloudStack which utilizes Whirr to launch various > clusters on CloudStack. Now I am facing a dependency conflicting issue. > > Whirr 0.8.2 requires gson 2.2.2 while CloudStack API requires gson 1.7.1. > If I use gson 1.7.1 for Whirr, the following error will happen: > > com.google.common.util.**concurrent.ExecutionError: > java.lang.**NoClassDefFoundError: > com/google/gson/TypeAdapter > > This TypeAdapter class can be found inside gson-2.2.2.jar. However if I > modify CloudStack to use gson 2.2.2 CloudStack will not build successfully > due to the following test error. > > [INFO] Building Apache CloudStack Core 4.1.1 > [INFO] ------------------------------**------------------------------** > ------------ > [INFO] > [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ cloud-core --- > [INFO] Deleting /home/meng/cloudstack/core/**target > [INFO] > [INFO] --- maven-remote-resources-plugin:**1.3:process (default) @ > cloud-core --- > [INFO] > [INFO] --- maven-resources-plugin:2.5:**resources (default-resources) @ > cloud-core --- > [debug] execute contextualize > [INFO] Using 'UTF-8' encoding to copy filtered resources. > [INFO] skip non existing resourceDirectory /home/meng/cloudstack/core/** > src/main/resources > [INFO] Copying 3 resources > [INFO] > [INFO] --- maven-compiler-plugin:2.5.1:**compile (default-compile) @ > cloud-core --- > [INFO] Compiling 156 source files to /home/meng/cloudstack/core/** > target/classes > [INFO] > [INFO] --- maven-resources-plugin:2.5:**testResources > (default-testResources) @ cloud-core --- > [debug] execute contextualize > [INFO] Using 'UTF-8' encoding to copy filtered resources. > [INFO] skip non existing resourceDirectory /home/meng/cloudstack/core/** > src/test/resources > [INFO] Copying 3 resources > [INFO] > [INFO] --- maven-compiler-plugin:2.5.1:**testCompile > (default-testCompile) @ cloud-core --- > [INFO] Compiling 1 source file to /home/meng/cloudstack/core/** > target/test-classes > [INFO] > [INFO] --- maven-surefire-plugin:2.12:**test (default-test) @ cloud-core > --- > [INFO] Surefire report directory: /home/meng/cloudstack/core/** > target/surefire-reports > > ------------------------------**------------------------- > T E S T S > ------------------------------**------------------------- > Running com.cloud.agent.transport.**RequestTest > log4j:WARN No appenders could be found for logger > (com.cloud.agent.transport.**RequestTest). > log4j:WARN Please initialize the log4j system properly. > log4j:WARN See > http://logging.apache.org/**log4j/1.2/faq.html#noconfig<http://logging.apache.org/log4j/1.2/faq.html#noconfig>for > more info. > Tests run: 4, Failures: 1, Errors: 1, Skipped: 0, Time elapsed: 3.054 sec > <<< FAILURE! > > Results : > > Failed tests: testSerDeser(com.cloud.agent.**transport.RequestTest) > > Tests in error: > testLogging(com.cloud.agent.**transport.RequestTest) > > Tests run: 4, Failures: 1, Errors: 1, Skipped: 0 > > > I ran "mvn -P developer clean install -DskipTests" , the CloudStack > building process went through. But when I issued an API --launchCluster to > CloudStack, the following error related to gson popped up on CloudStack > Management Server: > > ERROR [agent.transport.Request] (AgentManager-Handler-2:) Caught problem > with [{"StartupRoutingCommand":{"**cpus":2,"speed":3000,"memory":** > 3844370432,"dom0MinMemory":**384437043,"poolSync":false,"** > vms":{"v-2-VM":{"state":"**Running"},"s-1-VM":{"state":"** > Running"},"r-4-VM":{"state":"**Running"}},"caps":"hvm,** > snapshot","pool":"/root","**hypervisorType":"KVM","** > hostDetails":{"com.cloud.**network.Networks.**RouterPrivateIpStrategy":"** > HostLocal","Host.OS":"CentOS",**"Host.OS.Kernel.Version":"2.6.** > 32-358.el6.x86_64","Host.OS.**Version":"6.4"},"type":"** > Routing","dataCenter":"1","**pod":"1","cluster":"1","guid":** > "a7320748-6346-3c9a-975e-**90ac4ae4a986-**LibvirtComputingResource","** > name":"meng.acis.ufl.edu","id"**:2,"version":"4.1.1","** > publicIpAddress":"10.244.18.**55","publicNetmask":"255.0.0.** > 0","publicMacAddress":"00:23:**ae:94:f7:22","** > privateIpAddress":"10.244.18.**55","privateMacAddress":"00:** > 23:ae:94:f7:22","**privateNetmask":"255.0.0.0","** > storageIpAddress":"10.244.18.**55","storageNetmask":"255.0.0.** > 0","storageMacAddress":"00:23:**ae:94:f7:22","resourceName":"** > LibvirtComputingResource","**gatewayIpAddress":"! > 10.244.18 > .1","contextMap":{},"wait":0}}**,{"StartupStorageCommand":{"** > totalSize":0,"poolInfo":{"**uuid":"9447c0b1-cc3f-439f-** > 85f6-13d35539a9ed","host":"10.**244.18.55","localPath":"/var/** > lib/libvirt/images/","**hostPath":"/var/lib/libvirt/** > images/","poolType":"**Filesystem","capacityBytes":** > 52844687360,"availableBytes":**41535332352},"resourceType":"** > STORAGE_POOL","hostDetails":{}**,"type":"Storage","dataCenter"** > :"1","pod":"1","guid":"**a7320748-6346-3c9a-975e-**90ac4ae4a986-** > LibvirtComputingResource","**name":"meng.acis.ufl.edu","id"** > :2,"version":"4.1.1","**resourceName":"**LibvirtComputingResource","** > contextMap":{},"wait":0}}] > java.lang.ClassCastException: > com.google.gson.internal.$**Gson$Types$**GenericArrayTypeImpl > cannot be cast to java.lang.Class > at com.cloud.agent.transport.**ArrayTypeAdaptor.deserialize(** > ArrayTypeAdaptor.java:84) > at com.cloud.agent.transport.**ArrayTypeAdaptor.deserialize(** > ArrayTypeAdaptor.java:37) > at com.google.gson.**TreeTypeAdapter.read(** > TreeTypeAdapter.java:58) > at com.google.gson.Gson.fromJson(**Gson.java:795) > at com.cloud.agent.transport.**Request.getCommands(Request.** > java:235) > at com.cloud.agent.manager.**AgentManagerImpl$AgentHandler.** > processRequest(**AgentManagerImpl.java:1221) > at com.cloud.agent.manager.**AgentManagerImpl$AgentHandler.** > doTask(AgentManagerImpl.java:**1374) > at com.cloud.agent.manager.**ClusteredAgentManagerImpl$** > ClusteredAgentHandler.doTask(**ClusteredAgentManagerImpl.**java:659) > at com.cloud.utils.nio.Task.run(**Task.java:83) > at java.util.concurrent.**ThreadPoolExecutor.runWorker(** > ThreadPoolExecutor.java:1110) > at java.util.concurrent.**ThreadPoolExecutor$Worker.run(** > ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.**java:722) > WARN [utils.nio.Task] (AgentManager-Handler-2:) Caught the following > exception but pushing on > > On the CS Managment console I can see the cluster was started then quickly > died. > Running on provider cloudstack using identity > h3DKHC9AVlhKnUhpyThMuLhC119QfN**QQ8xhyjbf_**rnu5ZL1QeOWdw7aZRGXVO1VApG6q0a > **K-A-tQRQsZFwnOXQ > INFO [whirr.actions.**BootstrapClusterAction] (729061754@qtp-385354117-0:) > Bootstrapping cluster > INFO [whirr.compute.**BootstrapTemplate] (729061754@qtp-385354117-0:) > Configuring template for bootstrap-hadoop-datanode_**hadoop-tasktracker > INFO [whirr.compute.**BootstrapTemplate] (729061754@qtp-385354117-0:) > Configuring template for bootstrap-hadoop-namenode_**hadoop-jobtracker > INFO [whirr.compute.NodeStarter] (pool-4-thread-2:) Starting 1 node(s) > with roles [hadoop-datanode, hadoop-tasktracker] > INFO [whirr.compute.NodeStarter] (pool-4-thread-4:) Starting 1 node(s) > with roles [hadoop-namenode, hadoop-jobtracker] > ... > INFO [whirr.actions.**DestroyClusterAction] (729061754@qtp-385354117-0:) > Cluster hadoop destroyed > > I attached the debuging log to this email. > > The launchCluster API is simple, it calls the LaunchClusterCommand in > Whirr to launch a cluster. > > LaunchClusterResponse response = new LaunchClusterResponse(); > response.setObjectName("**launchCluster"); > LaunchClusterCommand command = null; > try { > command = new LaunchClusterCommand(); > } catch (Exception ex) { > > Logger.getLogger(**LaunchClusterCmd.class.**getName()).log(Level.SEVERE, > null, ex); > } > String[] args = new String[2]; > args[0] = "--config"; > args[1] = config; > > try { > command.run(System.in, System.out, System.err, > Arrays.asList(args)); > } catch (Exception ex) { > > Logger.getLogger(**LaunchClusterCmd.class.**getName()).log(Level.SEVERE, > null, ex); > } > response.setResponseName(**getCommandName()); > output = "successfully launched the cluster."; > response.setOutPut(output); > response.setAsync(Boolean.**FALSE); > this.setResponseObject(**response); > > Could someone help me out here? What would be a proper gson version for > CloudStack and Whirr to run at the same time? > > Thanks loads. > > Best Regards, > Meng > > >