83
Developer Day 7/21/2012 Will Chan Director of Engineering

CloudStack-Developer-Day

Embed Size (px)

DESCRIPTION

This is the slide Will Chan used a

Citation preview

Page 1: CloudStack-Developer-Day

Developer Day – 7/21/2012

Will Chan – Director of Engineering

Page 2: CloudStack-Developer-Day

• Welcome and Introduction

• What is CloudStack? • CloudStack Basics

• Cloudstack Deployment Architecture

• Networking Deep Dive

• Software Architecture

• Current Architecture

• Future Architecture

• Q&A

• Lunch

Agenda

Page 3: CloudStack-Developer-Day

• 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

Agenda (cont.)

Page 4: CloudStack-Developer-Day

Welcome and Introduction

Page 5: CloudStack-Developer-Day

• 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

Welcome and Introduction

Page 6: CloudStack-Developer-Day

What is CloudStack?

Page 7: CloudStack-Developer-Day

• 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

Apache CloudStack

Build your cloud the way the world’s

most successful clouds are built

Page 8: CloudStack-Developer-Day

• Open Source

• Apache License

• Incubating in the Apache Software

Foundation since April 2012

• Open Source since May 2010

• In production since 2009

Apache CloudStack

Build your cloud the way the world’s

most successful clouds are built

Page 9: CloudStack-Developer-Day

• Flexibility and scale

• Hypervisor agnostic

• Flexible network topologies

• Multiple storage options

• Proven to scale to tens of thousands of

hypervisors

Apache CloudStack

Build your cloud the way the world’s

most successful clouds are built

Page 10: CloudStack-Developer-Day

Load

Balancers

FWs & VPNs

Dashboard Identity Mgmt. Image Mgmt.

Compute Storage Network

Metering API (EC2 & CS) Self-service Portal

CloudStack is Full-Service Orchestration Platform

Page 11: CloudStack-Developer-Day

146 Companies 238 Developers

100’s of Production Clouds

32,000 Community Members

Global User Groups

Service Providers

Enterprises Universities

Page 12: CloudStack-Developer-Day

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.

Page 13: CloudStack-Developer-Day

CloudStack Supports Multiple Cloud Strategies

Multi-tenant

Public Cloud

• Dedicated resources

• Security & total control

• Internal network

• Managed by

Enterprise or 3rd party

• Mix of shared and

dedicated resources

• Elastic scaling

• Pay as you go

• Public internet, VPN

access

Hosted

Enterprise Cloud

• Dedicated resources

• Security

• SLA bound

• 3rd party owned and

operated

Private Clouds Public Clouds

On-premise

Enterprise Cloud

Page 14: CloudStack-Developer-Day

Designing a zone for a traditional workload

vCenter/XenCenter

Hyperviso

r Cluster

Hyperviso

r Cluster

Hyperviso

r Cluster

Enterprise Networking (e.g., VLAN)

Enterprise Storage (e.g., SAN)

Hypervisor

Storage

SAN

Networking

L2 VLANs

Network Services

Load Balancing VPN

Multi-tier Apps

Multi-tier VLANs OVF

vSphere or XenServer Enterprise Traditional-Style Availability Zone

Page 15: CloudStack-Developer-Day

Designing a zone for an Amazon-style workload

Hypervisor

Storage

Local EBS

Networking

L3 SDN based L2 Elastic IP

Network Services

Security Groups ELB

Multi-tier Apps

3rd Party Tools (e.g.,

RightScale, enStratus)

XenServer

Advanced

Object store

GSLB

CloudFormation

Software Defined Networks

(e.g., Security Groups, EIP, ELB,...)

Amazon-Style Availability Zone

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Server

Racks

Elastic Block Storage

Page 16: CloudStack-Developer-Day

Deployment Cloud Architecture

Page 17: CloudStack-Developer-Day

Pod 1

….

Cluster N

L2 switch

Host 2

Cluster 1

Deployment Architecture

Host 1

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 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

One or more zones represent cloud

Primary

Storage

Zone 1

Firewall Load Balancer

….

L3 switch

Secondary

Storage

Pod N

Page 18: CloudStack-Developer-Day

Pod 1

Host 2

Cluster 1

Host 1

Primary

Storage

L3 switch

Secondary

Storage

L2 switch

Deployment Architecture (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

Primary Storage

• Configured at Zone-level

• Stores all Templates, ISOs and Snapshots

• Zone can have one or more secondary storages

• NFS, OpenStack Swift

Secondary Storage

Page 19: CloudStack-Developer-Day

Deployment Architecture

Zone1

Data Center 1

Data Center 2

Zone 3

Zone 2

Data Center 3

Zone 4 CloudStack Clouds can have one or more Availability Zones.

Page 20: CloudStack-Developer-Day

Management Server Managing Multiple Zones

Zone1

Data Center 1

Cloud

Data Center 2

Zone 3

Zone 2

Data Center 2

Zone 3

Zone 2

Data Center 2

Zone 3

Zone 2

Data Center 2

Zone 3

Zone 2

Data Center 2

Zone 3

Zone 2

Data Center 3

Zone 4

Management

Server

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

Page 21: CloudStack-Developer-Day

Management Server Deployment Architecture

Citrix Confidential - Do Not Distribute

Management

Server MySQL

DB

Back Up

DB

Infrastructure

Resources

User API

Admin API

Load

Balancer

Management

Server

Management

Server MySQL

DB

Infrastructure

Resources

User API

Admin API

Single-node Deployment Multi-node Deployment

MS is stateless. MS can be deployed as physical server or VM

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

Replication

Page 22: CloudStack-Developer-Day

Management Server Interaction with Hypervisors

Management

Server

XenServer

ESX

vCenter

KVM

Agent

OVM

Agent

XAPI HTTP

• 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

• RHEL 6.0, 6.1, 6.2 (coming)

• Full Snapshots (not live)

• QCOW2

• NFS, iSCSI & FC

• Storage over-provisioning: NFS

• OVM 2.2

• No Snapshots

• RAW

• NFS & iSCSi

• No storage over-provisioning

Page 23: CloudStack-Developer-Day

Networking Deep Dive

Page 24: CloudStack-Developer-Day

Network Flexibility

Network Services

• L2 connectivity

• IPAM

• DNS

• Routing

• ACL

• Firewall

• NAT

• VPN

• LB

• IDS

• IPS

Network Isolation

• No isolation

• VLAN isolation

• Overlays

• L3 isolation

Service Providers

Virtual appliances

Hardware firewalls

LB appliances

SDN controllers

IDS /IPS appliances

VRF

Hypervisor

Page 25: CloudStack-Developer-Day

Layer-3 Guest Network

Public Network 65.11.0.0/16

65.11.1.2

Guest VM 1

Guest VM 2

Guest VM 3

Guest VM 4

Public Network/Internet

NetScaler

Load Blancer

Network Services Managed Externally Network Services Managed by CS

65.11.1.3

65.11.1.4

65.11.1.5

DHCP, DNS

CS

Virtual

Router

Security Group 1

Security Group 2

65.11.1.2

Guest VM 1

Guest VM 2

Guest VM 3

Guest VM 4

65.11.1.3

65.11.1.4

65.11.1.5

DHCP, DNS

CS

Virtual

Router

Security Group 1

Security Group 2

EIP, ELB

Page 26: CloudStack-Developer-Day

Layer-2 Guest Virtual Network

Public Network/Internet

Guest Virtual Network 10.0.0.0/8 VLAN 100

Gateway address 10.1.1.1

DHCP, DNS NAT Load Balancing VPN

Public IP 65.37.141.11

10.1.1.1

Guest VM 1

10.1.1.3

Guest VM 2

10.1.1.4

Guest VM 3

10.1.1.5

Guest VM 4

CS

Virtual Router

Public Network/Internet

Guest Virtual Network 10.0.0.0/8 VLAN 100

Private IP 10.1.1.112

DHCP, DNS

Public IP 65.37.141.112

10.1.1.1

Guest VM 1

10.1.1.3

Guest VM 2

10.1.1.4

Guest VM 3

10.1.1.5

Guest VM 4

NetScaler

Load Blancer

Private IP 10.1.1.111

Public IP 65.37.141.111

Juniper SRX

Firewall

CS Virtual Router provides Network Services External Devices provide Network Services

CS

Virtual

Router

Page 27: CloudStack-Developer-Day

• 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.

Network Offerings

Page 28: CloudStack-Developer-Day

Multi-tier virtual networking

Public Network/Internet

Guest Virtual Network 10.1.1.0/24 VLAN 100

Gateway address 10.1.1.1

DHCP, DNS NAT Load Balancing VPN

Public IP 65.37.141.11

10.1.2.2

App VM 1

10.1.1.3

Web VM 3

10.1.1.4

Web VM 4

CS

Virtual Router

10.1.1.2

Web VM 1

10.1.2.3

App VM 2

10.1.2.4

App VM 3

10.1.3.2

DB VM 1

10.1.3.3

DB VM 2

Gateway address 10.1.2.1

Gateway address 10.1.3.1

Guest Virtual Network 10.1.2.0/24 VLAN 101

Guest Virtual Network 10.1.3.0/24 VLAN 102

Page 29: CloudStack-Developer-Day

Current Software Architecture

Page 30: CloudStack-Developer-Day

Management Server

Orchestration Engine - Drives long running VM operations

- Syncs between resources managed and DB

- Generates events

Resource

Management

Cluster

Management

Job

Management

DB

UI Cloud Portal CLI Other Clients

Deployment Planning

Network Gurus

Network Elements

Hypervisor Gurus

Database

Access

Alert & Event

Management

Plu

gin

AP

I Resource API

Hypervisor

Resources

Network

Resources

Storage

Resources

Image

Resources

Snapshot

Resources

REST API

OAM&P API End User API EC2 API Pluggable Service API Engine Other APIs

Security Adapters

Account Management Connectors

ACL & Authentication

- Accounts, Domains, and Projects

- ACL, limits checking

Services API

Serv

ices A

PI

Console Proxy

Management

Template Access

HA

Usage Calculations

Additional Services

Event Bus

Message Bus Usage Server

Page 31: CloudStack-Developer-Day

• 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

Orchestration Engine

Page 32: CloudStack-Developer-Day

• 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

Plugins

Page 33: CloudStack-Developer-Day

Anatomy of a Plugin

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

Rest API - Optional. Required only if needs to expose

configuration API to admin.

Plu

gin

AP

I

Data Access Layer

Implementation

• 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

Page 34: CloudStack-Developer-Day

• 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

Plugin Interfaces Available

Page 35: CloudStack-Developer-Day

Future CloudStack Architecture (by Sheng)

Page 36: CloudStack-Developer-Day

CloudStack Integration

Page 37: CloudStack-Developer-Day

• 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

Page 38: CloudStack-Developer-Day

• Working with the API • Session Based Auth vs API Key Auth

• How to sign a request with apiKey/secretKey

• Asynchronous commands

• Response Format

• Pagination

What you will learn

Page 39: CloudStack-Developer-Day

Demo

Page 40: CloudStack-Developer-Day

Customizing User Interface

Page 41: CloudStack-Developer-Day

• 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

CloudStack UI

Page 42: CloudStack-Developer-Day
Page 43: CloudStack-Developer-Day
Page 44: CloudStack-Developer-Day

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;

margin: 4px 0 0 19px;

position: relative;

width: 170px;

}

#navigation ul li {

background: url("../images/bg-nav-

item.png")

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%;

}

Page 45: CloudStack-Developer-Day
Page 46: CloudStack-Developer-Day
Page 47: CloudStack-Developer-Day

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: {}

}

Page 48: CloudStack-Developer-Day

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 .testSection-

tmpl').clone();

}

}

}

Page 49: CloudStack-Developer-Day

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"];

},

...

Page 50: CloudStack-Developer-Day

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;

}

Page 51: CloudStack-Developer-Day
Page 52: CloudStack-Developer-Day
Page 53: CloudStack-Developer-Day

• 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>&…

Cross Site Request Forgery (CSRF)

Page 54: CloudStack-Developer-Day

•http://<api_url>?command=login&username=XXX&domainid=NNN&timestamp=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?

Simple Single Signon

Page 55: CloudStack-Developer-Day

• 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

Localization

Page 56: CloudStack-Developer-Day

Working with the API

Page 57: CloudStack-Developer-Day

• 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

Session-based Auth vs API Key Auth

Page 58: CloudStack-Developer-Day

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 user’s 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

Page 59: CloudStack-Developer-Day

• 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.

Asynchronous Commands

Page 60: CloudStack-Developer-Day

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.

Page 61: CloudStack-Developer-Day

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" } ]

Response Formats (cont.)

Page 62: CloudStack-Developer-Day

• 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

Pagination

Page 63: CloudStack-Developer-Day

• 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.

UI Plugin Framework

Page 64: CloudStack-Developer-Day

Apache Community

Page 65: CloudStack-Developer-Day

Why Apache License?

• Ecosystem above

• Vendors within

• User adoption

Page 66: CloudStack-Developer-Day

Why Apache Software Foundation?

• Best governance

• 15+ years, 100+ projects

• 2500+ Developers

Page 67: CloudStack-Developer-Day

• 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

The Road to an Apache “Top Level Project”

Page 68: CloudStack-Developer-Day

• 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

Implications for Partners and Customers

Page 69: CloudStack-Developer-Day

• 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.

Citrix CloudPlatform

Page 70: CloudStack-Developer-Day

How to Contribute

Page 71: CloudStack-Developer-Day

• 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

Page 72: CloudStack-Developer-Day

• 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.

Apache Roles (cont.)

Page 73: CloudStack-Developer-Day

• 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

Page 75: CloudStack-Developer-Day

• 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

Development Environment (cont.)

Page 76: CloudStack-Developer-Day

Demo

Page 77: CloudStack-Developer-Day

• 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 haven’t done so. • To subscribe, email to [email protected]

• You can also subscribe to the users list ([email protected])

• And to the commit list ([email protected])

CloudStack Developer Mailing List

Page 78: CloudStack-Developer-Day

• 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

Page 79: CloudStack-Developer-Day

• 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.)

Page 80: CloudStack-Developer-Day

• 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 it’s 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.

How to Contribute (cont.)

Page 81: CloudStack-Developer-Day

• 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

Page 82: CloudStack-Developer-Day

• 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

Resources (Cont.)

Page 83: CloudStack-Developer-Day

• 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

devCloud