SlideShare a Scribd company logo
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

More Related Content

What's hot

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
ThemePartner
 
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
 
Sass&compass
Sass&compassSass&compass
Sass&compass
Min Jun Kim
 
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 programing
Bozhidar Batsov
 

What's hot (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
 

Viewers also liked

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-Day
Kimihiko 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 Authentication
John Burwell
 
Cloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to CoudstackCloudstack 101 - an introduction to Coudstack
Cloudstack 101 - an introduction to Coudstack
ShapeBlue
 
Introduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networkingIntroduction to cloudstack 4.2 networking
Introduction to cloudstack 4.2 networking
ShapeBlue
 
CloudStack Overview
CloudStack OverviewCloudStack Overview
CloudStack Overview
sedukull
 
Integrating CloudStack & Ceph
Integrating CloudStack & CephIntegrating CloudStack & Ceph
Integrating CloudStack & Ceph
ShapeBlue
 
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
ShapeBlue
 
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 Bazaar
Donal 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.3
Tim 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 workshop
Remi 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] 칸반을 활용한 업무 프로세스 혁신 실천법
철민 신
 
Intro to CloudStack API
Intro to CloudStack APIIntro to CloudStack API
Intro to CloudStack API
Sebastien Goasguen
 
Sk planet 이야기
Sk planet 이야기Sk planet 이야기
Sk planet 이야기
종범 고
 
성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기성공하는 애자일을 위한 짧은 이야기
성공하는 애자일을 위한 짧은 이야기
종범 고
 
스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요스크럼, 이걸 왜 하나요
스크럼, 이걸 왜 하나요
Insub Lee
 

Viewers also liked (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 to Cloudstack UI Customization

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
philipnelson29183
 
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
 
This is a test
This is a testThis is a test
This is a test
cmailhotos4
 
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 StartFragment0000
tidwellerin392
 
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, sa
MargenePurnell14
 
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
faithxdunce63732
 
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
stella6copeland43
 
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
gilpinleeanna
 
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 techniques
Lo 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_.docx
dickonsondorris
 
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.pdf
aroraenterprisesmbd
 
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
robertad6
 
Geektop
GeektopGeektop
Geektop
ajay laqui
 
autotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docxautotraderbackground115433.jpgautotraderbackgroundaction.docx
autotraderbackground115433.jpgautotraderbackgroundaction.docx
ikirkton
 

Similar to Cloudstack UI Customization (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
 

More from CloudStack - Open Source Cloud Computing Project

Apache CloudStack from API to UI
Apache CloudStack from API to UIApache CloudStack from API to UI
Apache CloudStack from API to UI
CloudStack - Open Source Cloud Computing Project
 
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 - Open Source Cloud Computing Project
 
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 - Open Source Cloud Computing Project
 
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 - Open Source Cloud Computing Project
 
CloudStack technical overview
CloudStack technical overviewCloudStack 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...
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 
vBACD July 2012 - Xen Cloud Platform
vBACD July 2012 - Xen Cloud PlatformvBACD July 2012 - Xen Cloud Platform
vBACD July 2012 - Xen Cloud Platform
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 
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 - Open Source Cloud Computing Project
 
CloudStack Scalability
CloudStack ScalabilityCloudStack Scalability
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...
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 
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
CloudStack - Open Source Cloud Computing Project
 

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

Recently uploaded

JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 

Recently uploaded (20)

JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 

Cloudstack UI Customization

  • 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