There is a java library called JClouds that supports connecting to different cloud providers like Amazon EC2 etc and starting/stopping cloud machines on that cloud provider.
I want you to use the existing code syntax/interfaces used by the JClouds library--> and add support for the clouds listed at this page-->
[url removed, login to view]
Also add support for the following clouds-->
NetApp Cloud ([url removed, login to view])
netMagic Cloud ([url removed, login to view])
Cisco Cloud ([url removed, login to view])
Go Grid ([url removed, login to view])
Cloud One by Peer1 ([url removed, login to view])
Glesys ([url removed, login to view] [url removed, login to view])
Some of them are already supported by jclouds-- you have to add support for those clouds that are not already supported by jclouds.
Also, even for those providers that are already supported by jclouds--> add support for Load balancers for those providers too (Jclouds has little or no support for load balancers).
I will create separate projects/repositories for each of the above clouds and you can commit your code to respective repositores as and when work is complete for one cloud provider at a time.
Note-- Specifically support for creating/terminating/running/performing operations on --> virtual machines/ block store/ blob store (like Amazon S3 and others)-- basically everything that is supported by the cloud softwares listed at the page above, in their respective APIs, should be made available in your code. You clearly have to code taking the version number of each cloud software into account--> so that in future if a newer version of one cloud software changes something in its API, then that can be added as a newer version later. (which will use the changed API)
Just stick to conventions/interfaces as defined by jclouds-- define something new only when necessary(ie when that functionality is not already covered by jclouds).
For each of the cloud providers, I also want you to create a High Level Design Document explaining each library's functionality. And one document that explains how the common functionalities of the various cloud providers are organised together (ie for eg load balancers for any cloud will have a common interface/package/conventions--> so explain how the load balancers are defined/coded in your libraries for the various cloud providers). In this way, separate sections for cloud machines, load balancers, DNS operations, blob storage are required.
NOTE-- I dont think any DNS operation is supported by jclouds--> so you have to add support for DNS functionality for all the providers listed above, as well as for the providers that are currently supported by jclouds. And DNS operations can be for a cloud machine and also for blob storage(eg when a blob storage folder is to be made accessible over web, and so on) You may have to define your own coding conventions/standards/interfaces for the DNS section.
This work is lengthy because many APIs are involved but basically its quite simple since you have to call respective cloud providers' APIs in your code, using existing conventions/interfaces that are already there in jclouds.
Also add support for initialising/starting/stopping/terminating databases at the following providers--
SQL Azure, Amazon RDS, Couchbase, Rackspace Database hosting, MongoLab, MongoDB.
Finally, also add support for the following additional cloud providers--
Symphony Virtual Private Data Center, Oracle Cloud, AT and T Cloud, Google App Engine, Egnyte Cloud File Server, SalesForce Cloud, Savvis Public Cloud, VCE (the joint VMware, Cisco, EMC venture) Vblock-based CloudCompute IaaS offering. CloudCompute comes in three flavors: public, multitenant hosted at a CSC site; private, single tenant in a CSC data center; and private, single tenant located at the customer's site-- all versions of VCE should be supported, Bluelock Virtual Data Center.
Please upgrade/edit your bids taking the above update into account.
Code for the following functionalities is esp. required for all of the above cloud providers--
1. Starting/stopping/restarting cloud machines.
2. Loading images into cloud machines
3. Saving images from cloud machines
4. Connecting Block storage to cloud machines
5. Connecting Network Attached Storage (ie common storage) to a number of cloud machines
6. DNS operations to link any cloud machine/database machine/blob store with any URL/ IP address.
7. Starting/initialising/updating load balancers, connecting load balancers with some machines (including cases where load balancer is on one cloud but the servers it is balancing are on the same or any other clouds).
8. Taking backups/snapshots of cloud machines/blobstores/databases.
9. Starting/stopping/restarting databases including all operations that are supported by the APIs of different Cloud Providers.
NOTE-- All functionalities in all of the above APIs have to be included in libraries. There are libraries corresp. to each provider for which I have already created code repositories.
Some more cloud providers--