GSOC 2012/Student Application Samridh90/Bringing the Cloud to the Fedora Desktop

=Bringing the Cloud to the Fedora Desktop=

An overview of your proposal
The Aeolus-project is an umbrella project that provides the complete functionality required by a user to run and manage virtual machines on various cloud service providers such as Amazon EC2, Rackspace, Red Hat RHEV etc. Aeolus exposes an open source API that allows us to write tooling to deploy, monitor and manage a number of instances on various cloud providers. Currently, the Conductor web UI and some limited command line tools (Aeolus-Cli) are the only way to achieve this functionality. We require more tooling (GTK based GUI/command-line/additions to the web UI) that can help the user interface with the various Aeolus components in more novel ways and perform tasks that are currently not in the scope of Aeolus-Conductor or Aeolus-Cli. These tools would make intelligent decisions about which cloud provider to deploy an instance to based on various constraints such as the cheapest cloud provider or the one with the fastest response time and so on. We also want to be able monitor running instances through various visualizations such pie-charts, bar-graphs, etc. These will help the user manage and control cloud usage better.

The need you believe it fulfills
As of now, the Conductor web UI, although quite sophisticated, provides two basic options of Monitor and Administer. The former option allows the user to keep tabs on various instance pools, individual instances and deployments and lets the user monitor usage statistics and any alerts or warnings raised by the cloud provider. The latter option lets the user manage various aspects of the deployments and cloud-providers such as users and user groups, environment settings, content catalogs, setting up new providers and other general settings. Coming to the command line interface(Aeolus-Cli), it's functionality is limited to a subset of tasks that can be achieved through the Conductor web UI. It can perform the basic functionality of building an image using a template file, pushing an image onto a cloud provider, and cleaning up once the instance is no longer needed. As is evident, the web UI and the command line utility are quite limited in scope and there is so much more that can be done. The following needs will be fulfilled once the proposed project is complete:  Additional tools (command line/GTK cross platform GUI/existing web UI) that will allow the user to make intelligent and informed decisions about which cloud provider to use based on constraints such as which provider is cheaper or faster or provides more storage space and so on. Better usage monitoring through visualizations such as bar-graphs, line-charts, pie-charts etc. The user will be able to define templates, launch instances, manage instance pools, etc. through the command line which were previously not possible via command line Integrating the Snap project into Aeolus will enable the user to take instance snap-shots automatically and migrate them across cloud providers 

Any relevant experience you have
This project would require knowledge of Ruby -- for programming the command line utility and adding other services, Rails -- the Conductor is a Rails app, so Rails knowledge would be needed to augment additional functionality to it, Python -- the desktop UI tool will be implemented using PyGTK, and general knowledge about the Aeolus-project and how it is structured. The relevant experience I have is as follows:  Ruby and Rails:  I have undertaken the Software-as-a-Service(SaaS) course offered by the University of California, Berkeley at Coursera.org. The course introduces programming for SaaS using Ruby and Rails. So far, I have completed several tasks ranging from simple string manipulation to OOP &amp; metaprogramming and a sample Rails app called "Rotten Potatoes"(a CRUD application to rate movies and display ratings) I have successfully completed the Try Ruby and Rails for Zombies tutorials at CodeSchool.com. I also went through two other tutorials: Ruby in 20 minutes and Ruby User Guide, to get comfortable with programming in Ruby.</li> </ul> </li> Python:  I have been using Python2.x as my primary interpreted language for the past two years and am very comfortable with programming in it. PyGTK provides a very simple way to build cross platform GUIs written completely in python.</li> I have contributed to three academic projects which were built using Python and the Django web framework(written in Python). Django apps have an MVC (model-view-controller) architecture which is exactly the architecture used by Rails apps. This experience in building MVC apps would prove useful when adding more services to the Aeolus-Conductor (a Rails app as mentioned previously).</li> </ul> </li> Familiarity with architecture of Aeolus:  I have spent the past couple of weeks installing Aeolus on Fedora 15 and exploring it's existing capabilities. I have been using the Mock cloud provider which is supplied with the Aeolus-project to test it.</li> I have also checked out the source code for Aeolus-Conductor and Aeolus-Cli from the GitHub repositories and have been familiarizing myself with the architecture of these components. The features proposed in this project would be augmented to these components.</li> </ul> </li> </ul>

How do you intend to implement your proposal
 The entry point for appending additional services (such as deploying to cheapest/fastest provider or taking instance snapshots) is the Conductor layer. Once the services proposed are added, we would then expose RESTful APIs to the services and these interfaces can then be used the web UI/command line/desktop GUI to carry out different tasks.</li> Ideally, all three user interaction points i.e, the web UI, the command line and the desktop GUI must be consistent in the services they provide. The command line interface, in its present form, provides only a subset of services provided by the web UI. The plan is to flush out the CLI by adding more commands. This can be done by adding additional functionality to Aeolus-Cli.</li> The desktop GUI would be implemented using PyGTK. Internally, the application logic would make RESTful calls to the Conductor to achieve the required behavior. The desktop GUI would have an MVC design to ensure easy extensibility and maintainability. It would sit at the same level as the web UI and the CLI in the Aeolus architecture.</li> To implement the different visualizations of data, we could use D3.js which is a simple javascript library that allows us to build very complex and sophisticated visualizations</li> </ul> A note on the architecture of Aeolus:  Aeolus-Conductor, which is the central orchestration component tying other components together, exposes a RESTful interface to services that implement the various functionalities. Underneath the Conductor is the Deltacloud layer which exposes the abstract cloud management API, the Imagefactory service that allows creation of images and various other layers. </li>  The Conductor web UI and the command line tools interface with the service layer of the Aeolus-Conductor which does the actual work. These services are invoked through REST calls by passing in the appropriate parameters. Therefore, the Conductor is a centralized service that controls various other components. </li> </ul> Figure depicting the architecture of Aeolus

Final deliverable of the proposal at the end of the period
The final deliverables of the proposed project are : <ul> <li>CLI flushed out with additional tools - '''High priority task. Will be completed as part of GSoC'''</li> <li>Additional functionality added to the service layer of Aeolus-Conductor and RESTful APIs exposed to those services. - '''High priority task. Will be completed as part of GSoC'''</li> <li>Web UI extended to include access to additional services. - '''Medium priority task. Will be completed as part of GSoC'''</li> <li>GTK desktop GUI that allows the user to access Aeolus from the desktop - Medium priority task</li> </ul> These additions to the Aeolus-project would definitely benefit the user and would allow them to exploit OS virtualization to its true potential.

A rough timeline for your progress
<ul> <li>April 23rd to May 21st (Community bonding period): Interact with the Fedora project community, learn about its processes, code of conduct, etc., and interact closely with the project mentor to get into the specific details of the project</li> <li>May 21st to May 27th (1 week): Set up all the required tools and code base. Investigate entry points in the Conductor where new services will be added.</li> <li>May 28th to June 10th (2 weeks): Start extending the CLI. Add additional required services to the Conductor parallelly.</li> <li>June 11th to June 24th (2 weeks): Continue extending the CLI. Expose RESTful APIs to the services added.</li> <li>June 25th to July 8th (2 weeks): Test the APIs as they are added to ensure consistent functionality. Extend web UI to add access points to newly added services.</li> <li>July 9th to July 15th (1 week): Complete all mid-term evaluation related formalities</li> <li>July 16th to July 29th (2 weeks): Continue extending web UI. Start working on models, views and controllers for the GTK desktop GUI. Investigate the different kinds of usage statistics generated by cloud providers and work on a plan to implement the visualizations for these data.</li> <li>July 30th to August 12th (2 weeks): Write and run test cases for all new features added to the Conductor. Also, test the newly added interfaces in the CLI and web UI. Document the newly added services in the appropriate wiki.</li> <li>August 13th to August 19th (1 week): Perform a general code clean up and prepare for final evaluation.</li> </ul> My plan is to continue contributing to the project post GSoC.

Any other details you feel we should consider
I contacted the mentor ( Mo Morsi) about a week before the Fedora project was even confirmed as a participating organization. I have constantly been in touch with him ever since. Whenever he has mentioned a technology or language that may be required for this project (for eg., Ruby, Familiarity with the Aeolus codebase), I have made the effort to immediately act upon it and have spent the past couple of weeks familiarizing myself with everything I may need to implement this project successfully.

Have you communicated with a potential mentor? If so, who?
I have been in touch with Mo Morsi for some time now. He is the mentor for this project and it has been proposed by him.