GSOC 2012/Student Application Samridh90/Bringing the Cloud to the Fedora Desktop
Bringing the Cloud to the Fedora Desktop
- Name: Samridh Srinath
- Email Address: email@example.com
- Telephone: +919945817784
- Blog URL: Started a blog at http://samridh90.tumblr.com. That's where I'll be blogging my progress through the summer if approved
- Linkedin Profile: http://www.linkedin.com/pub/samridh-srinath/36/239/a0b
- Freenode IRC Nick: samy241190 on freenode. You can find me on #fedora-devel or #aeolus but you can also send me a message privately.
Why do you want to work with the Fedora Project?
Fedora 11 was the first linux distro I ever used and even though since then I've used many other distros, I always find myself coming back to Fedora again and again.
I'm using Fedora 15 currently (for me, the GNOME 3 desktop was a big attraction), but that's the part that I want to change. I've always been a user but never a contributor. It's time that I gave back to the FOSS community after so many years of taking from it.
Moreover, the Fedora project is very large and diverse. The experience that I will gain from contributing to Fedora is not something every organization can provide. I definitely have the interest and curiosity to become a part of the Fedora project.
Do you have any past involvement with the Fedora project or with any another open source project as a contributor (if possible please add some references as well)?
I have not had any experience contributing to the Fedora project or in fact, any other open source project in the past. But it's never too late to start is it? :)
As I mentioned above, this time around I want to contribute to the Fedora project, and what better way for a college student to start than through GSoC.
Did you participate with the past GSoC programs, if so which years, which organizations?
I have not participated in past GSoC programs.
Will you continue contributing/ supporting the Fedora project after the GSoC 2012 program, if yes, which team(s)/area(s), you are interested with?
I would definitely be willing to continue contributing to the Fedora project on a more permanent basis in the future. I am graduating from college June of 2012 and will be more than excited to invest more time to support some part of a project as large as Fedora.
I have not really explored all the teams that come under Fedora, but I would like to contribute to the Aeolus-project and the Ruby SIG. The former because the cloud is something that's always caught my attention and OS virtualization is something I would want to contribute to. I chose the Ruby SIG because I learnt Ruby recently and I love what it's capable off. In fact I have already subscribed to the rubySIG mailing list and added myself to the list of people interested in it, if that's any measure of my interest in the area :).
Also, I'm definitely open to being assigned to a particular project depending on the match between the need and my skills.
Why should we choose you over the other applicants?
In my opinion, the Fedora project should choose me for the following reasons:
- I am a college senior with a major in Computer Science and have a very strong foundation in basic CS fundamentals. I have a very good academic record to back up my claims (CGPA of 9.59/10.0 accumulated over the past 4 years). I have really good communication skills and a passion for learning new things.
- I have worked with languages like Python, Ruby, C++, Java, etc., and open source web frameworks like Django and Rails.
- I have had internships with two very reputed companies namely Microsoft India R & D(India Development Center) and National Instruments India R & D, which has given me a lot of industry exposure and taught me volumes about the software development life-cycle and how development actually takes place in the real world.
- I always take up the initiative to try and solve any issues that may come up during projects. I am a team player tend to gel very well with my team-mates. Most of my academic projects have involved working in a team of 2 or 3.
- I pick up new languages/technologies really fast and know how to use documentations effectively. I need a very minimal ramp-up time before I can get started with a project.
- I effectively use the mailing-lists and irc communication channels to resolve any queries or issues I may have. I am also very comfortable using source repository and version control tools like svn, git and hg.
If given a chance to work with the Fedora project, I would definitely ensure that I give enough time to the project and see it through to successful completion. I would be available the whole of the summer to work on the project.
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. Currently, it achieves it's functionality through the following components:
- Aeolus-Conductor: Provides a way to bring cloud resources to the user, manage a user's access to those resources, manage the use of those resources and control the user's instances in clouds. All this functionality is achieved through a superior web interface that is very easy to use. Every task from launching an instance to the cloud to tracking it through it's life-cycle and cleaning up once it's no longer needed can be easily achieved using the Conductor
- Aeolus-Composer: Allows a user to build OS images that are cloud-specific from a generic template described in simple XML. This enables a user to migrate from one cloud to another with much ease. Users can build images for multiple OSes just by changing some values in the template file.
- Aeolus-Orchestrator: Lets the user define groups of images that may be launched and configure together. The user can configure individual instances through simple configuration parameters.
- Aeolus HA (High Availability) Manager: Provides ways to make an instance or groups of instances in the cloud highly available. Users can specify a policy for maintaining or relaunching services in a HA infrastructure
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
- Integrate the Snap project into Aeolus 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 & 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.
- 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.
- 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).
- 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.
- 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.
How do you intend to implement your proposal
- 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.
- 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.
- 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.
- 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 flush out the CLI by adding more commands. This can be done by adding additional functionality to Aeolus-Cli.
- 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.
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:
- Additional functionality added to the service layer of Aeolus-Conductor and RESTful APIs exposed to those services.
- Web UI and CLI flushed out with additional tools.
- GTK desktop GUI that allows the user to use Aeolus from the desktop
- Snap project integrated into Aeolus allowing the user to automatically take a snapshot of an existing instance and migrate it across cloud providers
These additions to the Aeolus-project would definitely benefit the user allowing the user to exploit OS virtualization to its true potential.
A rough timeline for your progress
- 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
- May 21st to May 27th (1 week): Set up all the required tools and code base. Start adding services to the Conductor
- May 28th to June 10th (2 weeks): Add all the required services to the Conductor and expose RESTful APIs to those services. Test the APIs to ensure consistentfunctionality
- June 11th to June 24th (2 weeks): Flush out the command line interface with additional tools. Add access points to the new services in the web UI
- June 25th to July 8th (2 weeks): Implement different visualizations for the cloud provider data. Start working on models for GTK based desktop GUI
- July 9th to July 15th (1 week): Complete all mid-term evaluation related formalities
- July 16th to July 29th (2 weeks): Complete the GTK based desktop GUI (Views and Controllers). It will have all the basic functionality that is provided by the web GUI.
- 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. Work on a test plan for the GTK desktop GUI.
- August 13th to August 19th: Perform a general code clean up and prepare for final evaluation.