SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

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

En vedette

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
 

En vedette (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
 
스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요
 

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

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

Plus de CloudStack - Open Source Cloud Computing Project

Plus 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
 

Dernier

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 

Dernier (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 

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