GSoC2014/Incubator/SharedLib

= Implement a re-usable shared library for vmware (oslo.vmware) to be consumed by various OpenStack projects =

The VMware API is consumed by OpenStack using the oslo.vmware library [1]. This library recently created specifically for OpenStack is shared by several projects such as Nova, Glance and Cinder. Internally, it is using SOAP calls to communicate with vCenter server and ESXi. Instead of consuming the API through SOAP calls, it would be possible to use PyVmomi which is a Python SDK for the VMware vSphere API [2]. This work will give the opportunity to redefine a clean and more performant API. It involves:


 * 1) Deep dive the current API and how it is consumed by the OpenStack services
 * 2) Deep dive in PyVmomi
 * 3) Define an API
 * 4) Provide an implementation for this API using PyVmomi
 * 5) Make sure existing tests are working or modify them accordingly

[1] https://github.com/openstack/oslo.vmware/

[2] https://github.com/vmware/pyvmomi

Assumed Knowledge

 * Python - basics, class/module management
 * Command Line - a little bit of git, code editing, navigation
 * Already played with virtual machines
 * Experience with API definition
 * Some basic knowledge of what VMware does would be a plus

Refer to Python, Openstack, and You if you'd like to get a head start. I will be able to help you!!

Project Goals

 * Provide a clean interface for the OpenStack VMware library
 * Provide an implementation for it using PyVmomi
 * Provide a test suite

Project Nice-to-Haves

 * Performance evaluation of PyVmomi compared to the current codebase
 * Provide some documentation for the API

Suggestions

 * vCenter and ESX:

vCenter server: http://www.vmware.com/products/vcenter-server

VMware ESX: http://en.wikipedia.org/wiki/VMware_ESX


 * How to write APIs:

https://ep2013.europython.eu/conference/talks/guidelines-to-writing-a-python-api


 * OpenStack:

Cinder: https://wiki.openstack.org/wiki/Cinder

Glance: http://docs.openstack.org/developer/glance/

Nova: http://docs.openstack.org/developer/nova/