GSoC2014/Student/Masaru

=Massa's Proposal=

Abstract
Software components are properly divided into modules so that it is easy for developers to maintain and reuse them without unnecessary cost. Currently, some OpenStack modules utilizing VMware API have some sort of duplicates and have not made use of a shared library. In this project, I would like to update a current shared library, called oslo.vmware, so that this library will be used and shared by modules in OpenStack.

What is your e-mail address and IRC nick?
Email: massa.nomura@gmail.com

IRC : massa [freenode]

What is your web page, blog, or microblog?
I do not have my web page currently.

What is your academic background?
I major in M.Sc Computing (Distributed Systems) at Imperial College London, UK.

In this academic year I have been studying the following modules :
 * Advanced Computer Architecture
 * Advanced Database
 * Network Security
 * Distributed Systems
 * Distributed Algorithm
 * Pervasive Computing
 * Prolog
 * Operations Research
 * Individual Project : Models of Concurrency with pi-calculus
 * Final Thesis : Hypergraph partition with MPI in C++

Who is a possible mentor for the project you are proposing?

 * Mentor : Mr. Arnaud Legendre (arnaud)
 * Email  : alegendre@vmware.com

What is the ultimate goal of your proposal?
The main goal of the project is divided into three parts:
 * Implement missing features in oslo.vmware[*1]
 * Re-implement existing features using pyvmomi[*2]
 * Create unit tests for methods added to a shared library

[*1]oslo.vmware: library built in the context of OpenStack and designed to be a building block of other OpenStack projects consuming VMware. At the moment, some of the features in oslo.vmware overlap with what is already provided in pyvmomi.

[*2]pyvmomi: open source and generic library to consume the vCenter/ESX API on the outside of the context of OpenStack.

What components/modules will the proposed work modify or create?
oslo.vmware (possibly Glance, Cinder and Nova to make them consume the new features in the API)

What benefits does your proposed work have for OpenStack and its community?
There are two benefits brought by this project :
 * By introducing a proper shared library, we can remove duplicate codes from modules such as Glance, Cinder and Nova which are the consumers of the API.
 * By providing a shared library using pyvmomi, we can help developers a lot as they only have to maintain the shared API library to handle the coming updates.

Why are you the right person to work on this project?
There are two reasons why I think I am the right person to undertake the project. Firstly, as an open-source developer, people need to have not only technical skills but also communication skills within the community so that we can make things better. I would say I am the one who can take this part in the community based on the fact that I have done a bit of non-technical stuff throughout this preparation period for GSoC 2014. Secondly, I have already had basic knowledge of OS and virtualization applications, which helps me proceed with this project and collaborate with Arnaud easily. Therefore, I think I am the right person to work on this project.

How do you plan to achieve completion of your project?
The aim of our project is to improve a shared library of VMware API based on oslo.vmware and provide it to each of the modules. As a consequence, we would like to reduce the maintenance cost and increase the adaptability for the coming updates of the VMware. To achieve this, I will :


 * Implement missing features in oslo.vmware
 * In OpenStack, there already exists a shared library, oslo.vmware, implemented with a functionality of VMware API which enables us to communicate with vCenter. However, oslo.vmware has not been equipped with every feature necessary. In the project, I would like to implement functions that take responsibility for virtual machine disk (vmdk) and open virtualization format (ovf) to the existing library. For instance, we need to add a functionality of validation that confirms checksum, size, the number of disks and so on. To do this, I would like to start from introspection of vmdk and ovf. Also I am planning to implement port existing features in Nova to oslo.vmware.


 * Re-implement existing features using pyvmomi
 * To make the module easy to maintain and solid, we can utilize pyvmomi, which prevents us from reinventing the wheel, and replace some existing features implemented in oslo.vmware. For example, vim.py in oslo.vmware, which assumes responsibility for creating SOAP calls, can be replaced with some API defined in pyvmomi.


 * Create unite tests for the new features in a shared library
 * This will be done depending on the advancement of two tasks mentioned above. The purpose of this is to:
 * Make sure that existing implementation in oslo.vmware is usable with the new library.
 * Make sure that the new features added to the shared library is safely used by each module.

Please provide a schedule with dates and important milestones/deliverables (preferably in two week increments).
I am planning to proceed with the project as follows:

May 19th to June 1st (2 weeks)
 * Introspection of ovf
 * Introspection of vmdk
 * Check the latest pyvmomi features again

June 2nd to June 22nd (3 weeks)
 * Impement ovf and vmdk validation (checksum, size, number of disks and so on)
 * Create unit tests for this functionality

June 23rd to July 13th (3 weeks)
 * Implement port existing features in Nova to oslo.vmware
 * Create unit tests for this functionality

July 14th to Aug 10th (4 weeks)
 * Start to re-implement existing features using pyvmomi
 * Create unit tests for the replacement

Aug 11th- Aug 18th (1 week)
 * Finalize the project checking every module we will have developed

The milestone of the project would be to provide the missing features in oslo.vmware. Thus I will take time to implement the new features so that they will not bring about negative effects to a shared library later. After completing the missing pieces, I will replace existing codes using pyvmomi. Even though I have stated that I will do this later, I could do this task in parallel if I have time left in each period.

What will be showable two months into the project?

 * The set of features added to oslo.vmware
 * The new implementation using pyvmomi
 * The test suite consuming these two

What are your past experiences with the open source world as a user and as a contributor

 * As a user, most of the time I enjoy playing around applications, such as a programming language and virtualization software, to test my understanding that I learn from a lecture.
 * As a contributor, I contributed to Ruby reference manual (a.k.a Rurema – るりま) as my intern program last summer at Clear Code, a company whose products are based on open-source development. I added and modified some reference manuals with the help of one of the maintainers in the community.

Please include a link to the reviews for the bugs/features your proposal is related to.
・Add unittest method "test_download_flat_image" https://review.openstack.org/#/c/81263/

If available, please include links to any other code you wrote for OpenStack or other open source projects.
(Not available now...)

What other relevant projects have you worked on previously and what knowledge you gained from working on them?
I have not done any projects related to this project.

What other time commitments, such as school work, another job, planned vacation, etc., will you have between May 19 and August 18?
I will do my thesis and I must finish this by 5th September. I cannot spend a whole day coding or planning a new API design. But I am quite sure that I can spend at least 3 to 4 hours per day or 20 to 30 hours per week. Based on this, I assume that I will take 75 hours on average each stage.

Please add links to your project and individual details page on OpenStack GSoC wiki
https://wiki.openstack.org/wiki/GSoC2014/Incubator/SharedLib https://wiki.openstack.org/wiki/GSoC2014/Student/Masaru
 * Project page
 * Individual page