+1 I would love to see a screencast of how this works, once it's put in its own branch (and you back from paternity leave…congratulations :) )
On Sep 25, 2013, at 5:25 PM, Chiradeep Vittal <chiradeep.vit...@citrix.com> wrote: > +1 to put this into a branch off of master. Can merge into master after > unit tests for the agent API. > > > On 9/24/13 12:37 PM, "Donal Lafferty" <donal.laffe...@citrix.com> wrote: > >> On paternity leave, so I don't get to these emails right away... >> >>> -----Original Message----- >>> From: Chiradeep Vittal [mailto:chiradeep.vit...@citrix.com] >>> Sent: 20 September 2013 06:40 >>> To: dev@cloudstack.apache.org >>> Subject: Re: [Merge] Minimal Hyper-V Plugin >>> >>> Thanks for the preliminary testing. >>> Questions: >>> 1. More for the community: should the C# code be in a separate repo? >>> According to the merge request, mono and maven can be used to build the >>> agent. >> >> Silence == acceptance? >> >>> 2. Packaging: how is the C# agent installed? >> >> The agent is implemented to as a self-contained Windows Service, which is >> the Microsoft Windows equivalent of a Linux daemon. >> >> To make the agent distributable, package the agent and an app.config >> consistent with your data center in an MSI. WiX is the preferred tool >> (http://en.wikipedia.org/wiki/WiX ). When executed, the MSI will add the >> agent to set of Windows Services. >> >> To distribute and run this MSI, use Active Directory's GPO (global policy >> object) service. In typical deployments machines running Hyper-V will be >> domain joined. Where machines are not domain joined, look at something >> like puppet. >> >>> 3. What does minimal mean? What works? What doesn't? Local storage? >>> Shared storage? Networking modes? Are the hypervisors supposed to be >>> clustered? >> >> Minimal = create / start / stop / destroy a local storage VM in a >> QuickCloud network offering and CIFS secondary storage. >> >> No clustering required. >> >>> 4. How does one extend the "minimal" plugin? >> >> Each CloudStack command has a corresponding an HTTP URI served by the >> agent. These are written in ASP.NET MVC4. Data received by the agent is >> kept in a JSON object graph. >> >> E.g. >> >> // POST api/HypervResource/ReadyCommand >> [HttpPost] >> [ActionName(CloudStackTypes.ReadyCommand)] >> public JContainer ReadyCommand([FromBody]dynamic cmd) >> { >> using (log4net.NDC.Push(Guid.NewGuid().ToString())) >> { >> logger.Info(CloudStackTypes.ReadyCommand + >> cmd.ToString()); >> object ansContent = new >> { >> result = true, >> details = (string)null >> }; >> return ReturnCloudStackTypedJArray(ansContent, >> CloudStackTypes.ReadyAnswer); >> } >> >> } >> >> Therefore, to extend the plugin, add new HTTP URIs corresponding to >> missing commands, or extend the capabilities of existing commands. >> >> I can follow up with an explanation in a blog entry. >> >>> 5. Can the unit tests (at least those that test the agent API) be run >>> in a non- >>> hyper-v environment? >> >> Unit tests start the agent in a local process. Provided Mono is >> installed on your system, the unit tests will run. However, they will >> complain of bad output. >> >>> 6. Is the RDP console you had earlier mentioned included in the merge? >> >> Yes, but it serves no purpose at the moment. >> >> If there is an IP clearance protocol to follow for this console, I would >> prefer to remove the console from the submission. >> >>> 7. Any known issues? >>> >> >> There seems to be a bug with local paths that include spaces. I've asked >> Rajesh to provide a bug report, but it's unclear where to put this. Can >> we use JIRA for code not merged, or should the bug appear in the comments. >> >> >>> On 9/11/13 8:00 AM, "Donal Lafferty" <donal.laffe...@citrix.com> wrote: >>> >>>> Hi Rajesh, >>>> >>>> Thanks for spotting this problem with the Hyper-V Agent. Sounds like >>>> it should first URL decode the field. >>>> >>>> Can you update the review with details of your testing? >>>> >>>> I would need to know the command and which incoming field is causing >>>> problems. Also, can you add a serialised example of the instruction >>>> that fails? There should be an example in the agent's log file. By >>>> default, the log file is in the same folder as the agent executable. I >>>> will use this to update the automated tests. >>>> >>>> If you want to go ahead and made the fixes from a git clone, send a >>>> Pull Request. As long as there is an appropriate automated test, I'll >>>> update the feature branch with your changes. >>>> >>>> >>>> DL >>>> >>>>> -----Original Message----- >>>>> From: Rajesh Battala [mailto:rajesh.batt...@citrix.com] >>>>> Sent: 11 September 2013 09:08 >>>>> To: dev@cloudstack.apache.org >>>>> Subject: RE: [Merge] Minimal Hyper-V Plugin >>>>> >>>>> Hi Donal, >>>>> I had figured out the issue why "+" is coming in the path value. >>>>> The root cause is while encoding the URI, we use >>>>> URLEncoder.encode(path) >>>>> >>>>> The encode method is converting/replace "space" with "+". >>>>> >>>>> API doc: >>>>> When encoding a String, the following rules apply: >>>>> >>>>> The alphanumeric characters "a" through "z", "A" through "Z" and "0" >>>>> through "9" remain the same. >>>>> The special characters ".", "-", "*", and "_" remain the same. >>>>> The space character " " is converted into a plus sign "+". >>>>> All other characters are unsafe and are first converted into one or >>>>> more bytes using some encoding scheme. Then each byte is represented >>>>> by the >>>>> 3- >>>>> character string "%xy", where xy is the two-digit hexadecimal >>>>> representation of the byte. The recommended encoding scheme to use is >>>>> UTF-8. However, for compatibility reasons, if an encoding is not >>>>> specified, then the default encoding of the platform is used. >>>>> >>>>> Thanks >>>>> Rajesh Battala >>>>> >>>>> >>>>> >>>>> >>>>> -----Original Message----- >>>>> From: Donal Lafferty [mailto:donal.laffe...@citrix.com] >>>>> Sent: Monday, September 2, 2013 3:03 PM >>>>> To: dev@cloudstack.apache.org >>>>> Subject: RE: [Merge] Minimal Hyper-V Plugin >>>>> >>>>> Hi Rajesh, >>>>> >>>>> I'll PM the scripts. >>>>> >>>>> WRT problem below, it looks like a CS persists paths with spaces as >>>>> URL encoded strings. Is it the Hyper-V code storing the path in the >>>>> wrong formant? I can fix that if it's an issue. >>>>> >>>>> I would be very reluctant to change the the format of columns in the >>>>> database. There will be other code reliant on URL encoding. >>>>> >>>>> DL >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Rajesh Battala [mailto:rajesh.batt...@citrix.com] >>>>>> Sent: 02 September 2013 08:37 >>>>>> To: dev@cloudstack.apache.org >>>>>> Subject: RE: [Merge] Minimal Hyper-V Plugin >>>>>> >>>>>> Hi Donal, >>>>>> One more issue is, currently local storage is discovered when host >>>>>> is >>>>> added. >>>>>> But when mgmt. server got restarted, there is an exception >>>>>> happening while add/discovering already existing local storage >>> pool. >>>>>> >>>>>> >>>>>> Root cause: >>>>>> ========== >>>>>> I had debugged and figured out the root cause, CS not able to find >>>>>> the storage pool and tries to created it but it fails to add to DB >>>>>> as the entry is already persisted. >>>>>> The reason why CS not able to get the existing localstorage is , >>>>>> when executing the query to get the storage pool, it's getting >>> empty set >>> . >>>>>> It's because of the storage path issue. >>>>>> In the db the local storage path is stored as >>>>>> "C:\Users\Public\Documents\Hyper-V\Virtual+Hard+Disks", ('+' >>>>>> symbol in place of space) In the db query its searching without "+" >>>>>> and with space which is causing the query to have empty set and >>>>>> hence the issue. >>>>>> >>>>>> I can fix the issue by removing the "+" when we are persisting the >>>>>> local storage pool from hyperv >>>>>> >>>>>> >>>>>> >>>>>> Exception: >>>>>> ========= >>>>>> WARN [c.c.r.ResourceManagerImpl] (AgentTaskPool-14:ctx-ddbbf089) >>>>>> Unable to connect due to >>>>>> com.cloud.exception.ConnectionException: Unable to setup the local >>>>>> storage pool for Host[-1-Routing] >>>>>> at >>>>>> >>>>> >>> com.cloud.storage.StorageManagerImpl.createLocalStorage(StorageManage >>>>>> rImpl.java:598) >>>>>> at >>>>>> >>>>> >>> com.cloud.utils.component.ComponentInstantiationPostProcessor$Interce >>>>> p >>>>>> >>> torDispatcher.intercept(ComponentInstantiationPostProcessor.java:125) >>>>>> at >>>>>> com.cloud.storage.LocalStoragePoolListener.processConnect(LocalStor >>>>>> age >>>>>> Po >>>>>> olListener.java:86) >>>>>> at >>>>>> >>>>> >>> com.cloud.agent.manager.AgentManagerImpl.notifyMonitorsOfConnection( >>>>>> AgentManagerImpl.java:519) >>>>>> at >>>>>> >>>>> >>> com.cloud.agent.manager.AgentManagerImpl.handleDirectConnectAgent(A >>>>>> gentManagerImpl.java:1414) >>>>>> at >>>>>> >>> com.cloud.resource.ResourceManagerImpl.createHostAndAgent(Resource >>>>>> ManagerImpl.java:1760) >>>>>> at >>>>>> >>> com.cloud.resource.ResourceManagerImpl.createHostAndAgent(Resource >>>>>> ManagerImpl.java:1922) >>>>>> at >>>>>> >>>>> >>> com.cloud.agent.manager.AgentManagerImpl$SimulateStartTask.run(Agent >>>>>> ManagerImpl.java:1063) >>>>>> at >>>>>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecuto >>>>>> r.j >>>>>> av >>>>>> a:1110) >>>>>> at >>>>>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. >>>>>> ja >>>>>> va:603) >>>>>> at java.lang.Thread.run(Thread.java:722) >>>>>> Caused by: com.cloud.utils.exception.CloudRuntimeException: >>>>>> duplicate >>>>>> uuid: 35aa91ba-c95b-3fc4-91df-9c95dc31b350-HypervResource >>>>>> at >>>>>> >>> org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper. >>>>>> cr >>>>>> eatePrimaryDataStore(PrimaryDataStoreHelper.java:66) >>>>>> at >>>>>> org.apache.cloudstack.storage.datastore.lifecycle.CloudStackPrimary >>>>>> Dat >>>>>> aSto >>>>>> >>>>> >>>>> reLifeCycleImpl.initialize(CloudStackPrimaryDataStoreLifeCycleImpl.jav >>>>> a:3 >>>>> 49) >>>>>> at >>>>>> >>>>> >>> com.cloud.storage.StorageManagerImpl.createLocalStorage(StorageManage >>>>>> rImpl.java:589) >>>>>> ... 14 more >>>>>> >>>>>> >>>>>> >>>>>> -----Original Message----- >>>>>> From: Donal Lafferty [mailto:donal.laffe...@citrix.com] >>>>>> Sent: Saturday, August 31, 2013 5:19 AM >>>>>> To: dev@cloudstack.apache.org >>>>>> Subject: [Merge] Minimal Hyper-V Plugin >>>>>> >>>>>> A plugin for Hyper-V control is available for CloudStack. The >>>>>> plugin implements basic VM control; however, its architecture >>>>>> allows additional functionality to be easily added. Incorporating >>>>>> the plugin in CloudStack will allow the community to participate in >>>>>> improving the features available with Hyper-V. >>>>>> >>>>>> The plugin uses a Director Connect Agent architecture described >>> here: >>>>>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Progress >>>>>> >>>>>> This links provides details of third party libraries used by the >>>>>> plugin including their licenses. No source for these libraries is >>>>>> used, and the binaries are downloaded from their distributors at >>>>> build time. >>>>>> >>>>>> No proprietary tools are required for the build. For instance, C# >>>>>> compiled with Mono has been tested. Therefore, the plugin has been >>>>>> added to the default build and the default deployment. >>>>>> >>>>>> The plugin includes unit and functional tests that can be triggered >>>>>> at build time. See the link above for details. >>>>>> >>>>>> The Apache header is applied to source and where feasible to build >>>>>> config files. >>>>>> >>>>>> The source is the >>>>>> https://github.com/lafferty/cloudstack/tree/hyperv_plugin >>>>>> >>>>>> Finally, the review request is at >>>>>> https://reviews.apache.org/r/13922/ >>>>>> >>>>>> Testing? >>>>>> >>>>>> Integration test: created zone with CIFS secondary storage, added >>>>>> Hyper-V host, registered templates, create/stop/start/destroy VM. >>>>>> Scripts for zone setup are available on request. >>>>>> >>>>>> Functional & unit tests: the Java versions are part of the build. >>>>>> The C# versions were run inside Visual Studio's Test Explorer. >> >