Problem

There are many ISVs, SaaS/PaaS vendors providing value-added products and services on IaaS clouds. Unlike public cloud hosting providers such as Amazon and Rackspace, CloudStack is not deployed by a single entity. There are multiple deployments of CloudStack by service providers, enterprises and individuals. It becomes a challenge for ISVs, SaaS/PaaS vendors to make their products visible and easily consumable by various CloudStack-based clouds. It also becomes a challenge for anyone who deploys CloudStack to know whose products and services work with CloudStack and how to get a hold of them.

Proposal

This proposal is to introduce a new component called CloudStack Marketplace. It enables ISVs and SaaS/PaaS vendors to list their product and service offerings which can be viewed and easily consumed by any CloudStack deployments. The functionalities are broken down into two parts: version 1.0 (minimum viable product) and future enhancements.

Version 1.0

The goal is to release version 1.0 with the subsequent release of CloudStack following v4.0. Below are core components of version 1.0:

  1. Source code for the Marketplace client. Marketplace client is installed along with CloudStack management server and provides the Marketplace UI to the admins and users. The Marketplace client points to various listing repositories specified by the admin.
  2. Listing repositories contain product listings. An Apache listing repository contains listings contributed by the vendors to Apache CloudStack. Any third party can set up its own private or public listing repositories. 

Use Cases

Version 1.0 will support vendor products and services distributed in the forms of image templates, bootable ISOs, non-bootable ISOs, and SaaS/PaaS offerings.

Vendors Make Listing Contribution

The listing repository contains a config.js file and vendor product folders. The config.js file contains an index of the listings, which will be read by the Marketplace UI to build the Marketplace Homepage. The Listing folders contain metadata and supporting files for each product listing, which will be read by the Marketplace UI to build the Details page for each listing.

For image templates and ISOs, vendors can contribute a product listing following these steps:

  1. Create a listing folder for its product in the listing repository.
  2. Create a listing.js file and place it in the folder. The listing.js file includes metadata for the listing:
    1. Product name
    2. Vendor name
    3. A brief description
    4. Location of the graphics
    5. Metadata for associated templates and ISOs. Templates and ISO metadata should include location of where the actual image template and ISO data file. Multiple template and ISO metadata can be included in the same product listing to cover multiple hypervisor support and multiple product versions. 
    6. Tags (TBD)
  3. (Optional) Place any supporting files such as graphics and image template/ISO data files into the listing folder. Note that these files can be located in other places. In the case of the Apache Listing Repository, image template/ISO data files should be located outside of the listing repository and hosted by the vendor itself or third party.
  4. Add an entry to the config.js file for the listing.

For PaaS/SaaS, vendors can contribute a service listing following these steps:

  1. Create a listing folder for its service in the listing repository.
  2. Create a listing.js file and place it in the folder. The listing.js file includes metadata for the listing:
    1. Service name
    2. Vendor name
    3. A brief description
    4. Location of the graphics
    5. (Optional) Admin instruction. Admin instruction are steps that admin needs to follow in order to set up services for users. It can be left blank if no initial set up is required.
    6. "use service" action. Vendor needs to specify what happens when user clicks on the action button "use service". It can lead to a URL or scripts that can be invoked by the web browser. 
    7. Tags (TBD)
  3. (Optional) Place any supporting files such as graphics and scripts into the listing folder. Note that these files can be located in other places. 
  4. (Optional) Place plugin in the CloudStack source code repository plugin folder. If a plugin is required for the CloudStack, you can place it in the CloudStack plugin folder in the source code tree. Or you can store it externally and instruct admins how to download and install the plugin as part of the admin instruction.
  5. Add an entry to the config.js file for the listing.
Admins Install and Configure CloudStack Marketplace

CloudStack Marketplace client is installed along with CloudStack management server. After installation, admins can see all listings in the listing repository specified. Admins can configure the following global settings for the Marketplace client:

For listings require admin intervention, admins can follow the instructions provided by vendors in the listing files to set up the services. Admins will then make these listings available to their users. For templates and ISOs, admins can import them into CloudStack so that when users create VMs from them, launch time is shorter.

Users Consume Products and Services

For listings containing templates and ISOs only, users should be able to select the template or ISO, and create instance directly from the listing (or attach ISO to an existing VM). If the template or ISO is not yet imported by either the admins or the user, it will be imported first.

For SaaS and PaaS listings, the listing page should provide instructions or workflow for user to follow to use the service. Instruction/workflow could be in the form of text, URL or browser-compatible code.

Future Enhancement

The following are potential future enhancements:

Sample UI

User and admin access Marketplace - A link to the Marketplace UI from left navigation

User and admin access Marketplace - Directly from the Marketplace URL http://cloudstackmanagementserverIP/marketplace

A listing for image template (user view)

A listing for image template (admin view)

A listing for SaaS/PaaS application (user view)

A listing for SaaS/PaaS application (admin view)

Discussion Topics

  1. Component name - I am calling it “Marketplace” tentatively in search for a final name. There is no intention for this component to handle transaction or billing. Some other names I found online are: app store, app library, app catalog. The name will likely be reflected in the UI. Ideally, the name should be most suitable for version 1.0 and is future proof. Any other ideas? What’s your preference and why?