Developer Day 7/21/2012 Will Chan Director of Engineering
Agenda
Welcome and Introduction
What is CloudStack?
CloudStack Basics Cloudstack Deployment Architecture Networking Deep Dive Software Architecture Current Architecture Future Architecture Q&A
Lunch
Agenda (cont.)
CloudStack Integration
UI Customization API Deep Dive Future UI Plugin Framework
Q&A/Break
Apache Community
Why Apache and the Apache Server Foundation (ASF)? How to contribute to CloudStack
Closing Remarks
Welcome and Introduction
Welcome and Introduction
Will Chan
Founding Engineer/Director of Engineering @ Cloud.com since 2008 Director of Engineering @ Citrix Systems since 2011 PPMC member @ ASF CloudStack since 2012 Committer @ ASF CloudStack since 2012
Sheng Liang
Cloud Visionary and Founder of Cloud.com CTO, CloudPlatforms Group at Citrix Systems
What is CloudStack?
Apache CloudStack
Secure, multi-tenant cloud orchestration platform
Turnkey platform for delivering IaaS clouds Over 100 commercial deployments: private and public Full featured GUI, end-user API and admin API
Build your cloud the way the worlds most successful clouds are built
Apache CloudStack
Open Source
Apache License Incubating in the Apache Software Foundation since April 2012 Open Source since May 2010
Build your cloud the way the worlds most successful clouds are built
In production since 2009
Apache CloudStack
Flexibility and scale
Hypervisor agnostic Flexible network topologies
Multiple storage options
Build your cloud the way the worlds most successful clouds are built
Proven to scale to tens of thousands of hypervisors
CloudStack is Full-Service Orchestration Platform
API (EC2 & CS) Self-service Portal Metering
Image Mgmt.
Dashboard
Identity Mgmt.
Load Balancers
FWs & VPNs
Storage
Compute
Network
146 Companies
238 Developers
Global User Groups
Service Providers
100s of Production Clouds
32,000 Community Members
Enterprises Universities
Server Virtualization++
Cloud
Built for traditional enterprise apps & client-server compute
Enterprise arch for 100s of hosts Scale-up (server clusters) Apps assume reliability VLAN (or no) isolation Bonding, multi-link, multi-path, redundant networks, STP Proprietary vendor stack
Designed around big data, massive scale & next-gen apps
Cloud architecture for 1000s of hosts Scale-out (multi-site server farms) Apps assume failure L3 isolation or overlays Generally do not support multicast or broadcast Open, value-added stack
Think: vCloud Director
Think: AWS, RAX, zCloud, eBay, etc.
CloudStack Supports Multiple Cloud Strategies
Private Clouds
On-premise Enterprise Cloud Hosted Enterprise Cloud
Public Clouds
Multi-tenant Public Cloud
Dedicated resources Security & total control Internal network Managed by Enterprise or 3rd party
Dedicated resources Security SLA bound 3rd party owned and operated
Mix of shared and dedicated resources Elastic scaling Pay as you go Public internet, VPN access
Designing a zone for a traditional workload
Traditional-Style Availability Zone
vCenter/XenCenter Hypervisor
vSphere or XenServer Enterprise
Storage
SAN
Enterprise Networking (e.g., VLAN)
Networking Hyperviso r Cluster Hyperviso r Cluster Hyperviso r Cluster
L2 VLANs
Network Services Enterprise Storage (e.g., SAN)
Load Balancing VPN
Multi-tier Apps
Multi-tier VLANs OVF
Designing a zone for an Amazon-style workload
Amazon-Style Availability Zone
Software Defined Networks (e.g., Security Groups, EIP, ELB,...) Server Racks Server Racks Server Racks Server Racks Server Racks Server Racks Server Racks Server Racks
Hypervisor XenServer Advanced Storage Local EBS Object store
Networking L3 SDN based L2 Elastic IP
Server Racks
Server Racks
Server Racks
Server Racks
Network Services Security Groups
ELB GSLB
Elastic Block Storage
Multi-tier Apps 3rd Party Tools (e.g., RightScale, enStratus)
CloudFormation
Deployment Cloud Architecture
Deployment Architecture
Zone 1
Load Balancer Firewall
Host is the basic unit of scale. Runs a hypervisor or is bare metal Cluster consists of one ore more hosts of same hypervisor All hosts in cluster have access to shared (primary) storage
Pod N
Secondary Storage
L3 switch
Pod 1
L2 switch
.
Cluster N
Pod is one or more clusters, usually with a L2 switch. Represents a rack Availability Zone has one or more pods, has access to secondary storage. Firewall and Load balancers separate public and private networks
.
Cluster 1
Host 1
Host 2
Primary Storage
One or more zones represent cloud
Deployment Architecture (Storage)
Primary Storage
Configured at Cluster-level. Close to hosts for better performance
Stores all disk volumes for VMs in a cluster Cluster can have one or more primary storages Local disk, iSCSI, FC or NFS Pod 1 Cluster 1 Host 1 L3 switch
L2 switch
Secondary Storage
Secondary Storage
Host 2
Primary Storage
Configured at Zone-level
Stores all Templates, ISOs and Snapshots Zone can have one or more secondary storages
NFS, OpenStack Swift
Deployment Architecture
Data Center 1 Data Center 3
Zone1 Zone 4
CloudStack Clouds can have one or more Availability Zones.
Data Center 2
Zone 2
Zone 3
Management Server Managing Multiple Zones
Cloud
Data Center 1
Management Server
Data Center 2 Data Center 2 Data Center 3
Single Management Server can manage multiple zones
Zones can be geographically distributed but low latency links are expected for better performance Single MS node can manage up to 10K hosts. Multiple MS nodes can be deployed as cluster for scale or redundancy
Zone 2 Zone 2 Zone 3 Zone Zone 4 3
Zone1
Data Center 2 Data Center 2 Data Center 2
Zone 2 Zone 2 Zone 2 Zone 3 Zone 3 Zone 3
Management Server Deployment Architecture
Single-node Deployment Multi-node Deployment
User API
Management Server
MySQL DB
User API
Load Balancer
Management Server
Admin API
Admin API
Management Server
MySQL DB
Back Up DB Replication
MS is stateless. MS can be deployed as physical server or VM
Infrastructure Resources
Single MS node can manage up to 5K hosts. Multiple nodes can be deployed for scale or redundancy
Commercial: RHEL 5.4+; FOSS: Ubuntu 10.0.4, Fedora 16
Infrastructure Resources
Citrix Confidential - Do Not Distribute
Management Server Interaction with Hypervisors
Management Server
XAPI
HTTP
vCenter
XenServer ESX
XS 5.6, 5.6FP1, 5.6 SP2, 6.0 Incremental Snapshots VHD NFS, iSCSI, FC & Local disk Storage over-provisioning: NFS ESX 4.1, 5.0 (coming) Full Snapshots VMDK NFS, iSCSI, FC & Local disk Storage over-provisioning: NFS, iSCSI
Agent
Agent
KVM
RHEL 6.0, 6.1, 6.2 (coming) Full Snapshots (not live) QCOW2 NFS, iSCSI & FC Storage over-provisioning: NFS OVM 2.2
OVM
No Snapshots RAW NFS & iSCSi No storage over-provisioning
Networking Deep Dive
Network Flexibility
Network Services
L2 connectivity IPAM
Service Providers Network Isolation
Virtual appliances Hardware firewalls LB appliances SDN controllers IDS /IPS appliances VRF Hypervisor No isolation
DNS
Routing
VLAN isolation
Overlays L3 isolation
ACL
Firewall
NAT
VPN LB IDS IPS
Layer-3 Guest Network
Network Services Managed Externally
Public Network 65.11.0.0/16
Network Services Managed by CS
Security Group 1
65.11.1.2 Guest VM 1
Security Group 1 Public Network/Internet 65.11.1.2
Guest VM 1
65.11.1.3
Guest VM 2
NetScaler Load Blancer
65.11.1.3
Guest VM 2
EIP, ELB
65.11.1.4 Guest VM 3 65.11.1.5 65.11.1.5 65.11.1.4 Guest VM 3
Guest VM 4
CS Virtual Router
Guest VM 4
CS Virtual Router
DHCP, DNS
Security Group 2
DHCP, DNS
Security Group 2
Layer-2 Guest Virtual Network
CS Virtual Router provides Network Services External Devices provide Network Services
Guest Virtual Network 10.0.0.0/8 VLAN 100 Public Network/Internet 10.1.1.1 Public IP 65.37.141.11
CS Virtual Router
Guest Virtual Network 10.0.0.0/8 VLAN 100 Public Network/Internet
Guest VM 1
Gateway address 10.1.1.1 10.1.1.3 Guest VM 2
Public IP 65.37.141.11 1
Juniper SRX Firewall
Private IP 10.1.1.111
10.1.1.1
Guest VM 1
10.1.1.3 Public IP 65.37.141.11 2
NetScaler Load Blancer
Guest VM 2
DHCP, DNS NAT Load Balancing VPN
Private IP 10.1.1.112 10.1.1.4 Guest VM 3
10.1.1.4
Guest VM 3
10.1.1.5
Guest VM 4
CS Virtual Router
10.1.1.5
Guest VM 4
DHCP, DNS
Network Offerings
Same concept with disk and service offerings
What can you control?
Name Enable Redundant Router Control Network Rate Specify Network Services (Firewall, Loadbalancer, etc) Specify Network Provider (VR, SRX, Netscaler, F5, etc) Specify access (All, Domain, Account)
Allow upgrade and downgrade across offerings.
Multi-tier virtual networking
Guest Virtual Network 10.1.1.0/24 VLAN 100 Public Network/Internet Gateway address 10.1.1.1
CS Virtual Router
Guest Virtual Network 10.1.2.0/24 VLAN 101
Guest Virtual Network 10.1.3.0/24 VLAN 102
10.1.1.2
Web VM 1 Gateway address 10.1.2.1
10.1.2.2
App VM 1
10.1.3.2 Gateway address 10.1.3.1
DB VM 1
Public IP 65.37.141.11
DHCP, DNS NAT Load Balancing VPN
10.1.1.3
Web VM 3
10.1.2.3
App VM 2
10.1.3.3
DB VM 2
10.1.1.4
Web VM 4
10.1.2.4
App VM 3
Current Software Architecture
UI
Cloud Portal
CLI
Other Clients
Management Server
REST API
OAM&P API
Console Proxy Management
End User API
EC2 API
Other APIs
Pluggable Service API Engine Security Adapters
ACL & Authentication Accounts, Domains, and Projects ACL, limits checking Services API Plugin API
Account Management Connectors
Deployment Planning Network Gurus Network Elements
Template Access
DB
Services API
HA
Usage Calculations Additional Services
Orchestration Engine
Drives long running VM operations Syncs between resources managed and DB Generates events
Hypervisor Gurus Cluster Management Resource Management Job Management
Alert & Event Management
Database Access
Event Bus Message Bus
Usage Server
Image Resources Snapshot Resources
Resource API
Hypervisor Resources Network Resources Storage Resources
Orchestration Engine
Understands how to orchestrate long running processes (i.e. VM starts, Snapshot copies, Template propagation) Well defined process steps Calls Plugin API to execute functionalities that it needs
Plugins
Various ways to add more capability to CloudStack
Implements clearly defined interfaces All calls are at transaction boundaries Compiles only against the Plugin API module
Anatomy of a Plugin
Can be two jars: server component to be deployed on management server and an optional ServerResource component to be deployed co-located with the resource Server component can implement multiple Plugin APIs to add its feature Can expose its own API through Pluggable Service so administrators can configure the plugin As an example, OVS plugin actually implements both NetworkGuru and NetworkElement
Rest API
Optional. Required only if needs to expose configuration API to admin.
Plugin API
Implementation
Data Access Layer
ServerResource
Optional. Required if Plugin needs to be co-located with the resource Implements translation layer to talk to resource Communicates with server component via JSON
Plugin Interfaces Available
NetworkGuru Implements various network isolation and ip address technologies NetworkElement Facilitate network services on network elements to support a VM (i.e. DNS, DHCP, LB, VPN, Port Forwarding, etc) DeploymentPlanner Different algorithms to place a VM and volumes. Investigator Ways to find out if a host is down or VM is down. Fencer Ways to fence off a VM if the state is unknown UserAuthenticator Methods of authenticating a user SecurityChecker ACL access HostAllocator Provides different ways to allocate host StoragePoolAllocator Provides different ways to allocate volumes
Future CloudStack Architecture (by Sheng)
CloudStack Integration
What you will learn
How to customize the CloudStack 3.0.x user interface
Showcase changes specific in the CSS to alter the look and feel of CloudStack Showcase an example of how to add your own side navigation Dealing with Cross Site Request Forgery (CSRF) Simple Single Signon Localization
What you will learn
Working with the API
Session Based Auth vs API Key Auth How to sign a request with apiKey/secretKey Asynchronous commands Response Format Pagination
Demo
Customizing User Interface
CloudStack UI
Reference implementation of the CloudStack API
Built on HTML 4.0, CSS, and jQuery Uses Java Server Pages for localization only Three types of customizations
Minor customizations logo changes, minor CSS changes Major customizations Changing tabs, adding additional links Complete rewrite user UI is completely offloaded to a portal
Editing the Logo, Navigation, and Title Background
#header div.logo { background: url("../images/logo.png") no-repeat scroll 0 center transparent; float: left; height: 47px; #navigation ul li { margin: 4px 0 0 19px; background: url("../images/bg-navposition: relative; item.png") width: 170px; repeat-x scroll 0 0 } transparent; cursor: pointer; height: 50px; text-shadow: 0 1px 1px #FFFFFF; }
.dashboard.admin .dashboard-container .top { background: url("../images/ bg-breadcrumb.png") repeat-x scroll 0 -1px transparent; border-radius: 7px 7px 0 0; color: #FFFFFF; float: left; margin: 0 0 9px; padding: 4px 4px 8px; width: 100%; }
Adding navigation buttons
1. Go to /ui/scripts/cloudStack.js
2. Add a new section to the array: sections: { dashboard: {}, instances: {}, storage: {}, network: {}, templates: {}, events: {}, accounts: {}, domains: {}, system: {}, projects: {}, 'global-settings': {}, configuration: {}, // New section testSection: {}
Adding navigation buttons (cont.)
3. Open /ui/index.jsp. Create HTML somewhere in the 'template' div to contain your HTML content, which will be drawn in the browser pane: <!-- Templates --> <div id="template"> <div class="testSection-tmpl"> <h1>Test section</h1> </div> </div> 4. Enclose a function in 'testSection', which returns a jQuery object containing your template code, and whatever other content you wish to be shown:
sections: { dashboard: {}, instances: {}, storage: {}, network: {}, templates: {}, events: {}, accounts: {}, domains: {}, system: {}, projects: {}, 'global-settings': {}, configuration: {}, // New section testSection: { title: 'Title for section', show: function(args) { return $('#template .testSectiontmpl').clone(); } } }
Adding navigation buttons (cont.)
5. Add the section to the pre-filter, so that it isn't filtered out for the admin account: --
sectionPreFilter: function(args) { if(isAdmin()) { return ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects"]; },
sectionPreFilter: function(args) { if(isAdmin()) { return ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects", // New section "testSection"]; }, ...
Adding navigation buttons (cont.)
7. (optional) Add an icon for your new section in the CSS, either at the bottom of /ui/css/cloudstack3.css or in your own CSS file under /ui/css folder. Make sure the size of the icon is ~32x32 pixels:
#navigation ul li.testSection span.icon { background: url('../images/testSection-icon.png') no-repeat 0px 0px; }
Cross Site Request Forgery (CSRF)
Type of malicious exploit of a website whereby unauthorized commands are transmitted from a user that the website trusts. Unlike cross-site scripting (XSS), which exploits the trust a user has for a particular site, CSRF exploits the trust that a site has in a user's browse What does CS do to prevent this?
After execution of the login command you will get two session variables JSESSIONID default cookie SESSIONKEY random token that is passed along every API request
http://<API URL>?sessionkey=<SESSIONKEY>&
Simple Single Signon
http://<api_url>?command=login&username=XXX&domainid =NNN×tamp=YYY&signature=<secure-hash> You do not need to pass in the API Key The four parameters that must be passed in for the login command are domainId, username, timestamp, and signature
security.singlesignon.key
security.singlesignon.tolerance.millis SAML?
Localization
Support for Japanese and Simplified Chinese Takes advantage of the Java ResourceBundle to do localization Simply create a /WEB-INF/classes/resources/messages_<language code>.properties Server side vs Client side processing
Working with the API
Session-based Auth vs API Key Auth
CloudStack supports two ways of authenticating via the API.
Session-based Auth
Uses default Java Servlet cookie based sessions Use the login API to get a JSESSIONID cookie and a SESSIONKEY token All API commands require both cookie and token to authenticate Has a timeout as configured within Tomcat
API Key Auth
Works similarly to AWS API Requires a bit more coding to generate the signature All API commands require a signature hash
SIGNING REQUEST WITH API KEY / SECRET KEY
Step 1: commandString = command name + parameters + api key
URL encode each field-value pair within the commandstring
Step 2: Lower case the entire commandString and sort it alphabetically via the field for each field-value pair. sortedCommandString : apiKey=vmwijj&command=createvolume&diskofferingid=1&name=smallvolume=zoneid=1 Step 3: Take the sortedCommandString and run it through the HMAC SHA-1 hashing algorithm (most programming languages offer a utility method to do this) with the users Secret Key. Base64 encode the resulting byte array in UTF-8 so that it can be safely transmitted via HTTP. The final string produced after Base64 encoding should be SyjAz5bggPk08I1DE34lnH9x%2f4%3D
Asynchronous Commands
Starting with 3.0, in your standard CRUD (Create, Read, Update, Delete) of any first class objects in CloudStack, CUD are automatically asynchronous. R is synchronous. Rather than returning a response object, it will return a job ID. If it is a Create command, it will also return the object ID. With the job ID, you can query the async job status via the queryAsyncJobResult command. The queryAsyncJobResult response will return the following possible job status code: 0 - Job is still in progress. Continue to periodically poll for any status changes. 1 - Job has successfully completed. The job will return any successful response values associated with
command that was originally executed. 2 - Job has failed to complete. Please check the <jobresultcode> tag for failure reason code and <jobresult> for the failure reason.
Response Formats
CloudStack supports two formats as the response to an API call. The default response is XML. If you would like the response to be in JSON, add &response=json to the Command String.
Response Formats (cont.)
Sample XML Response:
<listipaddressesresponse> <allocatedipaddress> <ipaddress>192.168.10.141</ipaddress> <allocated>2009-09-18T13:16:10-0700</allocated> <zoneid>4</zoneid> <zonename>WC</zonename> <issourcenat>true</issourcenat> </allocatedipaddress> </listipaddressesresponse>
Sample JSON Response:
{ "listipaddressesresponse" : { "allocatedipaddress" : [ { "ipaddress" : "192.168.10.141", "allocated" : "2009-09-18T13:16:10-0700", "zoneid" : "4", "zonename" : "WC", "issourcenat" : "true" } ]
Pagination
Using the page and pagesize parameter
page defines the current cursor to the list pagesize defines the number of items per request Pagesize is limited by the administrator Sample: listVirtualMachines&page=1&pagesize=500 listVirtualMachines&page=2&pagesize=500
UI Plugin Framework
Problems today?
Any major customizations require modification of CloudStack UI code. Modifications require deep knowledge of CloudStack UI code. Versioning becomes difficult.
Future Plugin Framework
Creating UI widgets that are re-usable A JS configuration file that will allow partners/developers to specify how to include their UI into the CloudStack UI without having to modify core CloudStack UI code. Example could be left navigation link or possibly new actions. These are TBD.
Apache Community
Why Apache License?
Ecosystem above
Vendors within User adoption
Why Apache Software Foundation?
Best governance
15+ years, 100+ projects 2500+ Developers
The Road to an Apache Top Level Project
April: convert source code to Apache License
April: announce intent to donate
April: proposal for donation; get accepted to Incubator May: donation, mailing lists, enter Incubation
Sept : Apache CloudStack 4.0 release 2012: work in the Apache Way
Graduate to Top Level Project, contingent on: Community involvement Follow legal requirements and Apache standards
Implications for Partners and Customers
CloudStack awareness increased
CloudStack on path to be #1 orchestration software
Apache license provides more options for enhancements More direct influence possible
Better visibility into CloudStack development
Citrix CloudPlatform
Citrix released CloudPlatform 3.0.3 mid June.
Citrix plans to contribute 100% of development back into CloudStack
Monetization remains the same before and after Apache. We expect Apache CloudStack to be 3 months ahead of CloudPlatform
Citrix CloudPlatform will have a release schedule separate from CloudStack and will be determined by business needs.
How to Contribute
Apache Roles
User
A user is someone that uses our software. They contribute to the Apache projects by providing feedback to developers in the form of bug reports and feature suggestions. Users participate in the Apache community by helping other users on mailing lists and user support forums.
Developer
A developer is a user who contributes to a project in the form of code or documentation. They take extra steps to participate in a project, are active on the developer mailing list, participate in discussions, provide patches, documentation, suggestions, and criticism. Developers are also known ascontributors .
Apache Roles (cont.)
Committer
A committer is a developer that was given write access to the code repository and has a signed Contributor License Agreement (CLA) on file. They have an apache.org mail address. Not needing to depend on other people for the patches, they are actually making short-term decisions for the projectDeveloper
PMC Member
A PMC member is a developer or a committer that was elected due to merit for the evolution of the project and demonstration of commitment. They have write access to the code repository, an apache.org mail address, the right to vote for the community-related decisions and the right to propose an active user for committership. The PMC as a whole is the entity that controls the project, nobody else.
Development Environment
Development Machine
Apache Tomcat, version 6.0.33. Set environment variable CATALINA_HOME to point to your apache install directory. Mysql, version 5.1.58 Git, the latest version Java, the latest version Ant, the latest version
Development Environment (cont.)
To setup a Windows environment:
http://wiki.cloudstack.org/display/dev/Setting+up+Cloudstack+dev+environment +on+Windows
To setup a Mac OS environment:
http://wiki.cloudstack.org/display/dev/Setting+up+a+CloudStack+development+ environment+on+Mac+OSX
Development Environment (cont.)
To get the CloudStack source code
git clone https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git git checkout master
To build CloudStack
ant clean-all build-all deploy-server deploydb
To start the Management Server
ant debug
Demo
CloudStack Developer Mailing List
This is where all CloudStack development discussion are mostly held. All new features should be discussed on this mailing list. If you want to contribute to CloudStack, you are highly encouraged to subscribe to the cloudstack-dev list if you havent done so.
To subscribe, email to cloudstack-dev-subscribe@incubator.apache.org You can also subscribe to the users list (cloudstack-userssubscribe@incubator.apache.org) And to the commit list (cloudstack-commits-subscribe@incubator.apache.org)
How to Contribute
Clone ASF cloudstack repo:
git clone https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git
Checkout master branch:
git checkout master
Write code, make sure it's properly unit-tested. Unit-tests have to be submitted as a part of the patch
Create the patch for review:
git format-patch -o <dir of patch> --signoff master^
How to Contribute (cont.)
Create Jira ticket (or use existing ticket) and attach the patch:
http://bugs.cloudstack.org/secure/Dashboard.jspa
Submit the patch for review on Reviewboard for repository "cloudstack-git":
https://reviews.apache.org/r/new/
How to Contribute (cont.)
Post on developer mailing list for review. Either the patch will be directly merged into the master branch or a topic branch will be created if its a large feature. If you contribute a lot of good patches to CloudStack, a PMC member may decide to initiate a vote on your behalf to become a full-time committer.
Resources
CloudStack docs and knowledge base:
http://docs.cloudstack.org/ http://wiki.cloudstack.org/
CloudStack architecture review:
http://wiki.cloudstack.org/display/dev/CloudStack+Presentations
CloudStack packages and dependencies:
http://wiki.cloudstack.org/display/dev/CloudStack+Packages+and+Dependencie s
Resources (Cont.)
Exceptions handling in CloudStack:
http://wiki.cloudstack.org/display/dev/Cloudstack+Error+Codes+and+Exception +handling
DB upgrade development for CloudStack:
http://wiki.cloudstack.org/display/dev/DB+upgrade+in+CloudStack
Git workflow and coding standards in CloudStack:
http://wiki.cloudstack.org/display/dev/Git+workflow+in+the+brave+new+world#G itworkflowinthebravenewworld-Creatingpatches
devCloud
What is devCloud?
DevCloud is a VirtualBox image, on which CloudStack management server + Xen hypervisor are installed. CloudStack management server is running on Ubuntu 12.04 dom0, can also add dom0 itself as a Xen hypervisor host and create Linux virtual machines on it. As a developer, you can push your modified CloudStack code into DevCloud, then deploy and run the CloudStack management server in DevCloud. As an user, you can access CloudStack management server running inside DevCloud through web UI, large part of functionality of CloudStack are supported in DevCloud, such as creating VM, taking snapshot, creating template, console proxy, etc. http://wiki.cloudstack.org/display/COMM/DevCloud