SlideShare una empresa de Scribd logo
1 de 28
CloudStack Integration
UI and API Customization and Integration

CloudStack Developer On Ramp

May 3, 2012
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




2
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
• Q&A
Customizing the CloudStack
User Interface
Editing the CSS
Localization
Editing the Logo, Navigation, and Title backgrounds



#header div.logo {
  background: url("../images/logo.png")
  no-repeat scroll 0 center transparent;
  float: left;
  height: 47px;
                                           #navigation ul li {                              .dashboard.admin
  margin: 4px 0 0 19px;
                                             background: url("../images/bg-nav-item.png")   .dashboard-container .top {
  position: relative;
                                             repeat-x scroll 0 0                               background: url("../images/
  width: 170px;
                                             transparent;                                      bg-breadcrumb.png")
}
                                             cursor: pointer;                                  repeat-x scroll 0 -1px transparent;
                                             height: 50px;                                     border-radius: 7px 7px 0 0;
                                             text-shadow: 0 1px 1px #FFFFFF;                   color: #FFFFFF;
                                           }                                                   float: left;
                                                                                               margin: 0 0 9px;
                                                                                               padding: 4px 4px 8px;
                                                                                               width: 100%;
                                                                                            }
Editing the tables, status icons, and buttons


                                                                                                 div.button.add {
                                                                                                   background: url("../images/gradients.png")
table tbody td, table th, table tbody td {                                                         repeat scroll 0 -98px transparent;
                                             div.list-view td.state.on span {
  border-right: 1px solid #BFBFBF;                                                                 border-left: 1px solid #808080;
                                               background-image: url("../images/sprites.png");
  clear: none;                                                                                     border-radius: 4px 4px 4px 4px;
                                               background-position: 1px -460px;
  color: #495A76;                                                                                  border-right: 1px solid #808080;
                                               background-repeat: no-repeat;
  font-size: 12px;                                                                                 color: #4A5A6D;
                                               color: #008000;
  min-width: 88px;                                                                                 cursor: pointer;
                                             }
  overflow: hidden;                                                                                float: right;
  padding: 9px 5px 8px 0;                                                                          font-size: 11px;
  vertical-align: middle;                                                                          font-weight: bold;
  background-color: #f2f0f1                                                                        height: 12px;
}                                                                                                  left: 0;
                                                                                                   margin: 0 14px 0 0;
                                                                                                   padding: 5px 7px 5px 6px;
                                                                                                   position: relative;
                                                                                                   text-shadow: 0 1px 1px #DEE5EA;
                                                                                                   top: 5px;
                                                                                                 }
Adding navigation buttons and functionality
              1. Go to /ui/scripts/cloudStack.js   2. Find the sections array:
              3. Add a new section to the array:     sections: {
                                                       /**
              sections: {                               * Dashboard
                 /**                                    */
                  * Dashboard                          dashboard: {},
                  */                                   //'dashboard-user': {},
                 dashboard: {},                        instances: {},
                 //'dashboard-user': {},               storage: {},
                 instances: {},                        network: {},
                 storage: {},                          templates: {},
                 network: {},                          events: {},
                 templates: {},                        accounts: {},
                 events: {},                           domains: {},
                 accounts: {},                         system: {},
                 domains: {},                          projects: {},
                 system: {},                           'global-settings': {},
                 projects: {},                         configuration: {}
                'global-settings': {},               }
                 configuration: {},

                    // New section
                    testSection: {}
                }
Adding navigation buttons and functionality
              4. Open /ui/index.jsp. Create HTML         5. Enclose a function in 'testSection',
              somewhere in the 'template' div to         which returns a jQuery object
              contain your HTML content, which will be   containing your template code, and
              drawn in the browser pane:                 whatever other content you wish to
                                                         be shown:
                                                         sections: {
                <!-- Templates -->                         /**
                <div id="template">                         * Dashboard
                                                            */
                 <div class="testSection-tmpl">            dashboard: {},
                   <h1>Test section</h1>                   //'dashboard-user': {},
                                                           instances: {},
                 </div>                                    storage: {},
                </div>                                     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();
                                                                  }
                                                              }
                                                          }
Adding navigation buttons and functionality
              6. 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", "domain
              s", "events", "system", "global-settings", "configuration", "projects"];
                  },

                sectionPreFilter: function(args) {
                  if(isAdmin()) {
                    return
              ["dashboard", "instances", "storage", "network", "templates", "accounts", "domain
              s", "events", "system", "global-settings", "configuration", "projects",

                   // New section
                   "testSection"];
                 },

                 ...
Adding navigation buttons and functionality
              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&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?
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
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 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
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 FORMAT
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.

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
Q&A

Más contenido relacionado

La actualidad más candente

Learn to love CSS3 | Joomla! Day Deutschland
Learn to love CSS3 | Joomla! Day DeutschlandLearn to love CSS3 | Joomla! Day Deutschland
Learn to love CSS3 | Joomla! Day DeutschlandThemePartner
 
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]Source Code Halaman Web Radio Stremaing [RAMEN RADIO]
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]Rizki Ogawa
 
前端开发理论热点面对面:从怎么看,到怎么做?
前端开发理论热点面对面:从怎么看,到怎么做?前端开发理论热点面对面:从怎么看,到怎么做?
前端开发理论热点面对面:从怎么看,到怎么做?Kejun Zhang
 
Corilennyg gmail-com-rsp2
Corilennyg gmail-com-rsp2Corilennyg gmail-com-rsp2
Corilennyg gmail-com-rsp2cori0506
 
Bloggdesign #2 - hawaa.blogg.no
Bloggdesign #2 - hawaa.blogg.noBloggdesign #2 - hawaa.blogg.no
Bloggdesign #2 - hawaa.blogg.noHannee92
 
Stylesheets of the future with Sass and Compass
Stylesheets of the future with Sass and CompassStylesheets of the future with Sass and Compass
Stylesheets of the future with Sass and CompassDave Ross
 
Ruby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingRuby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingBozhidar Batsov
 

La actualidad más candente (13)

Learn to love CSS3 | Joomla! Day Deutschland
Learn to love CSS3 | Joomla! Day DeutschlandLearn to love CSS3 | Joomla! Day Deutschland
Learn to love CSS3 | Joomla! Day Deutschland
 
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]Source Code Halaman Web Radio Stremaing [RAMEN RADIO]
Source Code Halaman Web Radio Stremaing [RAMEN RADIO]
 
前端开发理论热点面对面:从怎么看,到怎么做?
前端开发理论热点面对面:从怎么看,到怎么做?前端开发理论热点面对面:从怎么看,到怎么做?
前端开发理论热点面对面:从怎么看,到怎么做?
 
Sass&compass
Sass&compassSass&compass
Sass&compass
 
Css
CssCss
Css
 
Css 2
Css 2Css 2
Css 2
 
Corilennyg gmail-com-rsp2
Corilennyg gmail-com-rsp2Corilennyg gmail-com-rsp2
Corilennyg gmail-com-rsp2
 
Css 3
Css 3Css 3
Css 3
 
Bloggdesign #2 - hawaa.blogg.no
Bloggdesign #2 - hawaa.blogg.noBloggdesign #2 - hawaa.blogg.no
Bloggdesign #2 - hawaa.blogg.no
 
Stylesheets of the future with Sass and Compass
Stylesheets of the future with Sass and CompassStylesheets of the future with Sass and Compass
Stylesheets of the future with Sass and Compass
 
Theme04
Theme04Theme04
Theme04
 
Everest
EverestEverest
Everest
 
Ruby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programingRuby on Rails 3.1: Let's bring the fun back into web programing
Ruby on Rails 3.1: Let's bring the fun back into web programing
 

Destacado

New Features for Ceph with Cinder and Beyond
New Features for Ceph with Cinder and BeyondNew Features for Ceph with Cinder and Beyond
New Features for Ceph with Cinder and BeyondOpenStack Foundation
 
CloudStack-Developer-Day
CloudStack-Developer-DayCloudStack-Developer-Day
CloudStack-Developer-DayKimihiko Kitase
 
Who the heck are you? Integrating CloudStack Authentication
Who the heck are you? Integrating CloudStack AuthenticationWho the heck are you? Integrating CloudStack Authentication
Who the heck are you? Integrating CloudStack AuthenticationJohn Burwell
 
Cloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to CoudstackCloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to CoudstackShapeBlue
 
Introduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networkingIntroduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networkingShapeBlue
 
CloudStack Overview
CloudStack OverviewCloudStack Overview
CloudStack Overviewsedukull
 
Integrating CloudStack & Ceph
Integrating CloudStack & CephIntegrating CloudStack & Ceph
Integrating CloudStack & CephShapeBlue
 
Building Clouds with Apache CloudStack - the business use-cases
Building Clouds with Apache CloudStack - the business use-casesBuilding Clouds with Apache CloudStack - the business use-cases
Building Clouds with Apache CloudStack - the business use-casesShapeBlue
 
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...IT Arena
 
Apache CloudStack's Plugin Model: Balancing the Cathedral with a Bazaar
Apache CloudStack's Plugin Model:Balancing the Cathedral with a BazaarApache CloudStack's Plugin Model:Balancing the Cathedral with a Bazaar
Apache CloudStack's Plugin Model: Balancing the Cathedral with a BazaarDonal Lafferty
 
Hypervisor Capabilities in Apache CloudStack 4.3
Hypervisor Capabilities in Apache CloudStack 4.3Hypervisor Capabilities in Apache CloudStack 4.3
Hypervisor Capabilities in Apache CloudStack 4.3Tim Mackey
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてSatoshi Shimazaki
 
DevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopDevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopRemi Bergsma
 
Operating CloudStack: the easy way (automation!)
Operating CloudStack: the easy way (automation!)Operating CloudStack: the easy way (automation!)
Operating CloudStack: the easy way (automation!)Remi Bergsma
 
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법철민 신
 
Sk planet 이야기
Sk planet 이야기Sk planet 이야기
Sk planet 이야기종범 고
 
성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기종범 고
 
스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요Insub Lee
 

Destacado (20)

New Features for Ceph with Cinder and Beyond
New Features for Ceph with Cinder and BeyondNew Features for Ceph with Cinder and Beyond
New Features for Ceph with Cinder and Beyond
 
CloudStack-Developer-Day
CloudStack-Developer-DayCloudStack-Developer-Day
CloudStack-Developer-Day
 
Who the heck are you? Integrating CloudStack Authentication
Who the heck are you? Integrating CloudStack AuthenticationWho the heck are you? Integrating CloudStack Authentication
Who the heck are you? Integrating CloudStack Authentication
 
Cloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to CoudstackCloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to Coudstack
 
Introduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networkingIntroduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networking
 
CloudStack Overview
CloudStack OverviewCloudStack Overview
CloudStack Overview
 
Integrating CloudStack & Ceph
Integrating CloudStack & CephIntegrating CloudStack & Ceph
Integrating CloudStack & Ceph
 
Building Clouds with Apache CloudStack - the business use-cases
Building Clouds with Apache CloudStack - the business use-casesBuilding Clouds with Apache CloudStack - the business use-cases
Building Clouds with Apache CloudStack - the business use-cases
 
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...
Bringing New Experience with Openstack and Fuel (Ihor Dvoretskyi, Oleksandr M...
 
Apache CloudStack's Plugin Model: Balancing the Cathedral with a Bazaar
Apache CloudStack's Plugin Model:Balancing the Cathedral with a BazaarApache CloudStack's Plugin Model:Balancing the Cathedral with a Bazaar
Apache CloudStack's Plugin Model: Balancing the Cathedral with a Bazaar
 
Hypervisor Capabilities in Apache CloudStack 4.3
Hypervisor Capabilities in Apache CloudStack 4.3Hypervisor Capabilities in Apache CloudStack 4.3
Hypervisor Capabilities in Apache CloudStack 4.3
 
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
 
DevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshopDevOpsDays Amsterdam Cosmic workshop
DevOpsDays Amsterdam Cosmic workshop
 
Operating CloudStack: the easy way (automation!)
Operating CloudStack: the easy way (automation!)Operating CloudStack: the easy way (automation!)
Operating CloudStack: the easy way (automation!)
 
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법
[AUG] 칸반을 활용한 업무 프로세스 혁신 실천법
 
Intro to CloudStack API
Intro to CloudStack APIIntro to CloudStack API
Intro to CloudStack API
 
Sk planet 이야기
Sk planet 이야기Sk planet 이야기
Sk planet 이야기
 
성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기
 
CloudStack Architecture
CloudStack ArchitectureCloudStack Architecture
CloudStack Architecture
 
스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요
 

Similar a CloudStack Integration

Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docx
Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docxWeek ThreeExpress Holidayscssstyle.csshtml{ height 100.docx
Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docxphilipnelson29183
 
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)Adam Darowski
 
Css A Triedna Spolocnost
Css A Triedna SpolocnostCss A Triedna Spolocnost
Css A Triedna Spolocnostguest49de219
 
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000tidwellerin392
 
Demystifying CSS & WordPress
Demystifying CSS & WordPressDemystifying CSS & WordPress
Demystifying CSS & WordPressJustin Carmony
 
Drupal Omega and Responsive Build out
Drupal Omega and Responsive Build outDrupal Omega and Responsive Build out
Drupal Omega and Responsive Build outTim Whelan
 
cssstyle.cssbody { font-family Montserrat, Arial, sa
cssstyle.cssbody {    font-family Montserrat, Arial, sacssstyle.cssbody {    font-family Montserrat, Arial, sa
cssstyle.cssbody { font-family Montserrat, Arial, saMargenePurnell14
 
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docx
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docxcssblocks.css.b_page{ width 930px; margin 0 auto; position.docx
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docxfaithxdunce63732
 
JDRF: Improving Lives. Curing Type 1 Diabetes
JDRF: Improving Lives. Curing Type 1 DiabetesJDRF: Improving Lives. Curing Type 1 Diabetes
JDRF: Improving Lives. Curing Type 1 Diabetesstella6copeland43
 
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docx
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docxMy discussion Student A A8 - Cross-Site Request Forgery (CSR.docx
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docxgilpinleeanna
 
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsMobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsKaelig Deloumeau-Prigent
 
Attention-catching techniques
Attention-catching techniquesAttention-catching techniques
Attention-catching techniquesLo Mat
 
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docx
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docxuntitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docx
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docxdickonsondorris
 
eBusiness Engineering Responsive Web Design Part 2
eBusiness Engineering Responsive Web Design Part 2eBusiness Engineering Responsive Web Design Part 2
eBusiness Engineering Responsive Web Design Part 2pawelskowronek
 
Css code for a awoko newspaper html website which provides busines.pdf
Css code for a awoko newspaper html website which provides busines.pdfCss code for a awoko newspaper html website which provides busines.pdf
Css code for a awoko newspaper html website which provides busines.pdfaroraenterprisesmbd
 
Chapter 6 TemplateWeek 6csshomework.css html {.docx
Chapter 6 TemplateWeek 6csshomework.css  html {.docxChapter 6 TemplateWeek 6csshomework.css  html {.docx
Chapter 6 TemplateWeek 6csshomework.css html {.docxrobertad6
 
autotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docxautotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docxikirkton
 

Similar a CloudStack Integration (20)

Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docx
Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docxWeek ThreeExpress Holidayscssstyle.csshtml{ height 100.docx
Week ThreeExpress Holidayscssstyle.csshtml{ height 100.docx
 
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
Sassive Aggressive: Using Sass to Make Your Life Easier (NSWG Version)
 
This is a test
This is a testThis is a test
This is a test
 
Css A Triedna Spolocnost
Css A Triedna SpolocnostCss A Triedna Spolocnost
Css A Triedna Spolocnost
 
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000
Version1.0 StartHTML000000217 EndHTML000067516 StartFragment0000
 
Demystifying CSS & WordPress
Demystifying CSS & WordPressDemystifying CSS & WordPress
Demystifying CSS & WordPress
 
Drupal Omega and Responsive Build out
Drupal Omega and Responsive Build outDrupal Omega and Responsive Build out
Drupal Omega and Responsive Build out
 
cssstyle.cssbody { font-family Montserrat, Arial, sa
cssstyle.cssbody {    font-family Montserrat, Arial, sacssstyle.cssbody {    font-family Montserrat, Arial, sa
cssstyle.cssbody { font-family Montserrat, Arial, sa
 
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docx
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docxcssblocks.css.b_page{ width 930px; margin 0 auto; position.docx
cssblocks.css.b_page{ width 930px; margin 0 auto; position.docx
 
JDRF: Improving Lives. Curing Type 1 Diabetes
JDRF: Improving Lives. Curing Type 1 DiabetesJDRF: Improving Lives. Curing Type 1 Diabetes
JDRF: Improving Lives. Curing Type 1 Diabetes
 
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docx
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docxMy discussion Student A A8 - Cross-Site Request Forgery (CSR.docx
My discussion Student A A8 - Cross-Site Request Forgery (CSR.docx
 
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsMobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
 
Attention-catching techniques
Attention-catching techniquesAttention-catching techniques
Attention-catching techniques
 
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docx
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docxuntitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docx
untitled folder 6.DS_Store__MACOSXuntitled folder 6._.DS_.docx
 
FCIP SASS Talk
FCIP SASS TalkFCIP SASS Talk
FCIP SASS Talk
 
eBusiness Engineering Responsive Web Design Part 2
eBusiness Engineering Responsive Web Design Part 2eBusiness Engineering Responsive Web Design Part 2
eBusiness Engineering Responsive Web Design Part 2
 
Css code for a awoko newspaper html website which provides busines.pdf
Css code for a awoko newspaper html website which provides busines.pdfCss code for a awoko newspaper html website which provides busines.pdf
Css code for a awoko newspaper html website which provides busines.pdf
 
Chapter 6 TemplateWeek 6csshomework.css html {.docx
Chapter 6 TemplateWeek 6csshomework.css  html {.docxChapter 6 TemplateWeek 6csshomework.css  html {.docx
Chapter 6 TemplateWeek 6csshomework.css html {.docx
 
Geektop
GeektopGeektop
Geektop
 
autotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docxautotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docx
 

Más de CloudStack - Open Source Cloud Computing Project

Más de CloudStack - Open Source Cloud Computing Project (20)

Apache CloudStack from API to UI
Apache CloudStack from API to UIApache CloudStack from API to UI
Apache CloudStack from API to UI
 
CloudStack Hyderabad Meetup: How the Apache community works
CloudStack Hyderabad Meetup: How the Apache community worksCloudStack Hyderabad Meetup: How the Apache community works
CloudStack Hyderabad Meetup: How the Apache community works
 
CloudStack Hyderabad Meetup: Migrating applications to IaaS clouds
CloudStack Hyderabad Meetup: Migrating applications to IaaS cloudsCloudStack Hyderabad Meetup: Migrating applications to IaaS clouds
CloudStack Hyderabad Meetup: Migrating applications to IaaS clouds
 
CloudStack Hyderabad Meetup: Using CloudStack to build IaaS clouds
CloudStack Hyderabad Meetup: Using CloudStack to build IaaS cloudsCloudStack Hyderabad Meetup: Using CloudStack to build IaaS clouds
CloudStack Hyderabad Meetup: Using CloudStack to build IaaS clouds
 
CloudStack technical overview
CloudStack technical overviewCloudStack technical overview
CloudStack technical overview
 
Introduction to CloudStack: How to Deploy and Manage Infrastructure-as-a-Serv...
Introduction to CloudStack: How to Deploy and Manage Infrastructure-as-a-Serv...Introduction to CloudStack: How to Deploy and Manage Infrastructure-as-a-Serv...
Introduction to CloudStack: How to Deploy and Manage Infrastructure-as-a-Serv...
 
vBACD July 2012 - Apache Hadoop, Now and Beyond
vBACD July 2012 - Apache Hadoop, Now and BeyondvBACD July 2012 - Apache Hadoop, Now and Beyond
vBACD July 2012 - Apache Hadoop, Now and Beyond
 
vBACD July 2012 - Scaling Storage with Ceph
vBACD July 2012 - Scaling Storage with CephvBACD July 2012 - Scaling Storage with Ceph
vBACD July 2012 - Scaling Storage with Ceph
 
vBACD July 2012 - Deploying Private PaaS with ActiveState Stackato
vBACD July 2012 - Deploying Private PaaS with ActiveState StackatovBACD July 2012 - Deploying Private PaaS with ActiveState Stackato
vBACD July 2012 - Deploying Private PaaS with ActiveState Stackato
 
vBACD July 2012 - Xen Cloud Platform
vBACD July 2012 - Xen Cloud PlatformvBACD July 2012 - Xen Cloud Platform
vBACD July 2012 - Xen Cloud Platform
 
vBACD- July 2012 - Crash Course in Open Source Cloud Computing
vBACD- July 2012 - Crash Course in Open Source Cloud ComputingvBACD- July 2012 - Crash Course in Open Source Cloud Computing
vBACD- July 2012 - Crash Course in Open Source Cloud Computing
 
Virtualization in the cloud
Virtualization in the cloudVirtualization in the cloud
Virtualization in the cloud
 
Build a Cloud Day San Francisco - Ubuntu Cloud
Build a Cloud Day San Francisco - Ubuntu CloudBuild a Cloud Day San Francisco - Ubuntu Cloud
Build a Cloud Day San Francisco - Ubuntu Cloud
 
CloudStack Scalability
CloudStack ScalabilityCloudStack Scalability
CloudStack Scalability
 
CloudStack Networking
CloudStack NetworkingCloudStack Networking
CloudStack Networking
 
Management server internals
Management server internalsManagement server internals
Management server internals
 
Introduction to CloudStack
Introduction to CloudStack Introduction to CloudStack
Introduction to CloudStack
 
vBACD - Introduction to Puppet, Configuration Management and IT Automation So...
vBACD - Introduction to Puppet, Configuration Management and IT Automation So...vBACD - Introduction to Puppet, Configuration Management and IT Automation So...
vBACD - Introduction to Puppet, Configuration Management and IT Automation So...
 
vBACD - Distributed Petabyte-Scale Cloud Storage with GlusterFS - 2/28
vBACD - Distributed Petabyte-Scale Cloud Storage with GlusterFS - 2/28vBACD - Distributed Petabyte-Scale Cloud Storage with GlusterFS - 2/28
vBACD - Distributed Petabyte-Scale Cloud Storage with GlusterFS - 2/28
 
vBACD - Crash Course in Open Source Cloud Computing - 2/28
vBACD - Crash Course in Open Source Cloud Computing - 2/28vBACD - Crash Course in Open Source Cloud Computing - 2/28
vBACD - Crash Course in Open Source Cloud Computing - 2/28
 

Último

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 

Último (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

CloudStack Integration

  • 1. CloudStack Integration UI and API Customization and Integration CloudStack Developer On Ramp May 3, 2012
  • 2. 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 2
  • 3. 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 • Q&A
  • 4. Customizing the CloudStack User Interface Editing the CSS Localization
  • 5.
  • 6.
  • 7. Editing the Logo, Navigation, and Title backgrounds #header div.logo { background: url("../images/logo.png") no-repeat scroll 0 center transparent; float: left; height: 47px; #navigation ul li { .dashboard.admin margin: 4px 0 0 19px; background: url("../images/bg-nav-item.png") .dashboard-container .top { position: relative; repeat-x scroll 0 0 background: url("../images/ width: 170px; transparent; bg-breadcrumb.png") } cursor: pointer; repeat-x scroll 0 -1px transparent; height: 50px; border-radius: 7px 7px 0 0; text-shadow: 0 1px 1px #FFFFFF; color: #FFFFFF; } float: left; margin: 0 0 9px; padding: 4px 4px 8px; width: 100%; }
  • 8.
  • 9.
  • 10. Editing the tables, status icons, and buttons div.button.add { background: url("../images/gradients.png") table tbody td, table th, table tbody td { repeat scroll 0 -98px transparent; div.list-view td.state.on span { border-right: 1px solid #BFBFBF; border-left: 1px solid #808080; background-image: url("../images/sprites.png"); clear: none; border-radius: 4px 4px 4px 4px; background-position: 1px -460px; color: #495A76; border-right: 1px solid #808080; background-repeat: no-repeat; font-size: 12px; color: #4A5A6D; color: #008000; min-width: 88px; cursor: pointer; } overflow: hidden; float: right; padding: 9px 5px 8px 0; font-size: 11px; vertical-align: middle; font-weight: bold; background-color: #f2f0f1 height: 12px; } left: 0; margin: 0 14px 0 0; padding: 5px 7px 5px 6px; position: relative; text-shadow: 0 1px 1px #DEE5EA; top: 5px; }
  • 11.
  • 12.
  • 13. Adding navigation buttons and functionality 1. Go to /ui/scripts/cloudStack.js 2. Find the sections array: 3. Add a new section to the array: sections: { /** sections: { * Dashboard /** */ * Dashboard dashboard: {}, */ //'dashboard-user': {}, dashboard: {}, instances: {}, //'dashboard-user': {}, storage: {}, instances: {}, network: {}, storage: {}, templates: {}, network: {}, events: {}, templates: {}, accounts: {}, events: {}, domains: {}, accounts: {}, system: {}, domains: {}, projects: {}, system: {}, 'global-settings': {}, projects: {}, configuration: {} 'global-settings': {}, } configuration: {}, // New section testSection: {} }
  • 14. Adding navigation buttons and functionality 4. Open /ui/index.jsp. Create HTML 5. Enclose a function in 'testSection', somewhere in the 'template' div to which returns a jQuery object contain your HTML content, which will be containing your template code, and drawn in the browser pane: whatever other content you wish to be shown: sections: { <!-- Templates --> /** <div id="template"> * Dashboard */ <div class="testSection-tmpl"> dashboard: {}, <h1>Test section</h1> //'dashboard-user': {}, instances: {}, </div> storage: {}, </div> 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(); } } }
  • 15. Adding navigation buttons and functionality 6. 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", "domain s", "events", "system", "global-settings", "configuration", "projects"]; }, sectionPreFilter: function(args) { if(isAdmin()) { return ["dashboard", "instances", "storage", "network", "templates", "accounts", "domain s", "events", "system", "global-settings", "configuration", "projects", // New section "testSection"]; }, ...
  • 16. Adding navigation buttons and functionality 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; }
  • 17.
  • 18.
  • 19. 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>&…
  • 20. Simple Single Signon 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?
  • 21. 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
  • 22. API
  • 23. 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
  • 24. 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
  • 25. 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.
  • 26. RESPONSE FORMAT 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. 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" } ]
  • 27. 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
  • 28. Q&A