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
>
>
>

Reply via email to