From Fedora Project Wiki

Bringing the Cloud to the Fedora Desktop

Contact Information

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:

  1. 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.
  2. I have worked with languages like Python, Ruby, C++, Java, etc., and open source web frameworks like Django and Rails.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Proposal Description

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 & 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.
  • 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.
    • 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

  • 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 to 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.
  • 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

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

Aeolus architecture.png

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 :

  • CLI flushed out with additional tools - High priority task. Will be completed as part of GSoC
  • 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
  • Web UI extended to include access to additional services. - Medium priority task. Will be completed as part of GSoC
  • GTK desktop GUI that allows the user to access Aeolus from the desktop - Medium priority task

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

  • 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. Investigate entry points in the Conductor where new services will be added.
  • May 28th to June 10th (2 weeks): Start extending the CLI. Add additional required services to the Conductor parallelly.
  • June 11th to June 24th (2 weeks): Continue extending the CLI. Expose RESTful APIs to the services added.
  • 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.
  • July 9th to July 15th (1 week): Complete all mid-term evaluation related formalities
  • 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.
  • 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.
  • August 13th to August 19th (1 week): Perform a general code clean up and prepare for final evaluation.

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.