SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
OpenStack API Extensions

        Jorge L. Williams




Thursday, April 28, 2011
2




        Agenda

        •   The Problem
        •   Extensions
        •   Extensions in REST
        •   Promoting Extensions to new Features
        •   Challenges
        •   Summary
        •   Questions?




Thursday, April 28, 2011
3




                           The Problem




Thursday, April 28, 2011
4




        Standardization vs Innovation and Differentiation
        • We want our APIs to be Open Standards...                                There are a number of
             – Defining Standard APIs good for OpenStack, and our Customers       problem that we’re trying
             – We want to encourage others to implement our APIs                  to solve: One is there
                                                                                  always seems to be a
             – Standards need to be stable                                        conflict bet ween
                 • Hard to develop against something that’s in constant flux
             – Standards need to be general
                 • May be impossible for someone to adopt our standards if they contain niche
                   functionality.
             – The more general and stable the API, the more likely others will adopt it.
        • We want to innovate
             – Quickly add features that differentiate one implementation from other implementations
                 • Without breaking our clients
                 • Without going through an approval process
             – We want to allow others to also make changes to the API
                 • More likely to adopt OpenStack APIs if they can be modified
                 • We may all benefit from these changes
             – Developers should feel free to experiment and develop new features without worrying about
               the implications to the API as a standard.


                             One goal is to create this ubiquitous cloud
                             technology


Thursday, April 28, 2011
5




        Pluggability
        • OpenStack services should be pluggable.
             – One OpenStack Service...Many Backends:
        • Backends contain a set of shared capabilities, widely applicable to all
          deployments
        • However, each backend may contain special features and niche
          functionality
        • How do we provide access to special features, while still abstracting away
          the details of the backend?
                                                                  hypervisors	
  in	
  compute,	
  
                                                                  network	
  switches	
  in	
  NaaS,
                                                                  etc.	
  	
  
                                               LBaaS
                                                                  Implemented	
  via	
  drivers




                                   Zeus         Pound   HAProxy


Thursday, April 28, 2011
6




        Open Source
        • Open source presents another interesting challenge: Others can make
          changes to the code.
             – OpenStack stock Compute API vs.
                  • Rackspace Version vs.
                  • Other Modified versions.
             – What does OpenStack Compute API 1.1 mean if we have different implementations all with
               different capabilities?
             – How do we ensure compatibility among the different versions?




Thursday, April 28, 2011
7




                           Extensions




Thursday, April 28, 2011
8




        Case Study: OpenGL

        • The problem we’re facing is not new.
          OpenGL faced a similar problem in the 90’s
             – How do you define an open graphics library that:
                 • Is considered a standard specification
                 • Allows vendors to differentiate their products by adding special features
                 • And yet is a governed spec
                           – An architecture review board (ARB):
                               » Proposes and approves specification changes
                               » Makes new releases
                               » Ensures conformance testing
             – The solution was to allow extensions in the specification
                 • Vendors can define special features as extensions
             – A very successful strategy
                 • The core OpenGL API is general and uncluttered and an accepted standard.
                 • Over 500 extensions have been defined over OpenGL’s lifetime
                           –   Best become standard features; others abandoned
                           –   Different extensions for the same feature? Let the best one win.
                           –   Many innovations came via the extension process: vertex and fragment shaders, etc.
                           –   Extensions have been defined by many different vendors: NVidia, ATI, Apple, IBM, Intel, …




Thursday, April 28, 2011
9



                                                              So what are extensions...
        Extensions

        • Extensions add capability to the API beyond those of the specification
        • An API specification must be written to allow for extensibility
             – We need flexibility in the contract to allow for new data elements, actions, states, headers,
               parameters, and resource types.
             – The core API specification defines the extension mechanism, but extensions themselves
               are not part of the core.
        • Implementors are only required to implement the core API
             – But they must implement the core API completely, this way clients can expect a minimum
               level of functionality.
        • Extensions can be promoted
             – Extensions follow a promotion path, at the end of which an extension may become part of
               the next version of the core API.
             – Niche extensions, may never be promoted to the core.
                                                                              If 90% of calls return
                                                                              unimplemented then what’s the
                                                                              point of having a core API?




Thursday, April 28, 2011
10




        Extensions vs. Versions
           Versions                                         Extensions
           Centralized: Versions are maintained by the Decentralized: Extensions are maintained by
           entity that controls the API Spec: The           third parties: Rackspace, OpenStack developers,
           OpenStack Architecture Board. Only the ARB       etc. Anyone can create an Extension.
           can create a new version, only the ARB defines
           what OpenStack Compute 1.1 means.




Thursday, April 28, 2011
11




        Extensions vs. Versions
           Versions                                         Extensions
           Centralized: Versions are maintained by the Decentralized: Extensions are maintained by
           entity that controls the API Spec: The           third parties: Rackspace, OpenStack developers,
           OpenStack Architecture Board. Only the ARB       etc. Anyone can create an Extension.
           can create a new version, only the ARB defines
           what OpenStack Compute 1.1 means.

           Deal with Core Functionality                     Deal with Specialized/Niche
                                                            Functionality




                           Can be applicable to a
                           wide degree of
                           backends...many
                           hypervisors...many load
                           balancers...etc.




Thursday, April 28, 2011
12




        Extensions vs. Versions
           Versions                                         Extensions
           Centralized: Versions are maintained by the Decentralized: Extensions are maintained by
           entity that controls the API Spec: The           third parties: Rackspace, OpenStack developers,
           OpenStack Architecture Board. Only the ARB       etc. Anyone can create an Extension.
           can create a new version, only the ARB defines
           what OpenStack Compute 1.1 means.

           Deal with Core Functionality                     Deal with Specialized/Niche
                                                            Functionality



           Appear infrequently: Versions provide a          Appear frequently: Extensions bring new
           stable platform on which to develop.             features to the market quickly, and in a compatible
                                                            manner.




Thursday, April 28, 2011
13




        Extensions vs. Versions
           Versions                                          Extensions
           Centralized: Versions are maintained by the Decentralized: Extensions are maintained by
           entity that controls the API Spec: The            third parties: Rackspace, OpenStack developers,
           OpenStack Architecture Board. Only the ARB        etc. Anyone can create an Extension.
           can create a new version, only the ARB defines
           what OpenStack Compute 1.1 means.

           Deal with Core Functionality                      Deal with Specialized/Niche
                                                             Functionality



           Appear infrequently: Versions provide a           Appear frequently: Extensions bring new
           stable platform on which to develop.              features to the market quickly, and in a compatible
                                                             manner.



           Are Queryable: You can programmatically           Are Queryable: You can programmatically tell
           tell what versions are available by doing a GET   what extensions are available by doing a GET on
           on the base URL (/) of the API endpoint.          the extensions resource (/v1.1/extensions).




Thursday, April 28, 2011
14




        Extensions vs. Versions

        • Our APIs should be both Extensible and Versionable




Thursday, April 28, 2011
15




        Extensions and Plug-ability go Hand in Hand



                                      Core API   Extensions

    Each driver may expose
    functionality that a                  LBaaS
    client may access via an
    extension.




                               Zeus        Pound      HAProxy




Thursday, April 28, 2011
16




                           Extensions in REST




Thursday, April 28, 2011
17




        What can be extended

        • Extensions may define:
             –   New elements/attributes
             –   New actions
             –   New headers
             –   New parameters
             –   New states
             –   New resources
             –   New mime-types (support for Atom representation or plist representation)
             –   New capabilities (the ability to edit an otherwise un-editable attribute)




Thursday, April 28, 2011
18




        Extensions are queryable

        • You should be able to tell what extensions are available by making a single
          call.
        • If you use extensions as a client this is the first call you’ll probably make




Thursday, April 28, 2011
19




        Sample Extension Query

   • Extensions are queryable via /extensions
        <extensions xmlns="http://docs.openstack.org/api-specs/v1.0"
                    xmlns:atom="http://www.w3.org/2005/Atom"
                    >
            <extension name="Public Image Extension"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                       alias="RAX-PIE"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/>
                <description>
                    Adds the capability to share an image with other users.
                </description>
            </extension>
            <extension name="Cloud Block Storage"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
                       alias="RAX-CBS"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/>
                <description>
                    Allows mounting cloud block storage volumes.
                </description>
            </extension>
        </extensions>




Thursday, April 28, 2011
20




        Sample Extension Query

   • Human Readable Name and Description
        <extensions xmlns="http://docs.openstack.org/api-specs/v1.0"
                    xmlns:atom="http://www.w3.org/2005/Atom"
                    >
            <extension name="Public Image Extension"
                       name="Public Image Extension"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                       alias="RS-PIE"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/>
                <description>
                    Adds the capability to share an image with other users.
                </description>
            </extension>
            <extension name="Cloud Block Storage"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
                       alias="RS-CBS"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/>
                <description>
                    Allows mounting cloud block storage volumes.
                </description>
            </extension>
        </extensions>




Thursday, April 28, 2011
21




        Sample Extension Query

   • Links to Documentation (in different formats)
        <extensions xmlns="http://docs.openstack.org/api-specs/v1.0"
                    xmlns:atom="http://www.w3.org/2005/Atom"
                    >
            <extension name="Public Image Extension"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                       alias="RS-PIE"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/>
                <description>
                    Adds the capability to share an image with other users.
                </description>
            </extension>
            <extension name="Cloud Block Storage"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
                       alias="RS-CBS"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/>
                <description>
                    Allows mounting cloud block storage volumes.
                </description>
            </extension>
        </extensions>




Thursday, April 28, 2011
22




        Sample Extension Query

   • Unique Extension IDs
        <extensions xmlns="http://docs.openstack.org/api-specs/v1.0"
                    xmlns:atom="http://www.w3.org/2005/Atom"
                    >
            <extension name="Public Image Extension"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                       alias="RAX-PIE"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/>
                <description>
                    Adds the capability to share an image with other users.
                </description>
            </extension>
            <extension name="Cloud Block Storage"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
                       alias="RAX-CBS"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/>
                <description>
                    Allows mounting cloud block storage volumes.
                </description>
            </extension>
        </extensions>




Thursday, April 28, 2011
23




        Sample Extension Query

   • Vendor Identifiers
        <extensions xmlns="http://docs.openstack.org/api-specs/v1.0"
                    xmlns:atom="http://www.w3.org/2005/Atom"
                    >
            <extension name="Public Image Extension"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                                         docs.rackspacecloud.com
                       alias="RAX-PIE"
                              RAX
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/>
                <description>
                    Adds the capability to share an image with other users.
                </description>
            </extension>
            <extension name="Cloud Block Storage"
                       namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
                       alias="RAX-CBS"
                       >
                <atom:link rel="describedby" type="application/pdf"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/>
                <atom:link rel="describedby" type="application/vnd.sun.wadl+xml"
                           href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/>
                <description>
                    Allows mounting cloud block storage volumes.
                </description>
            </extension>
        </extensions>




Thursday, April 28, 2011
24




        Vendor Identifiers

        • An extension alias always contains a prefix that identifies the vendor.

                 <extension name="Public Image Extension"
                                namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                                alias="RAX-PIE">



                                         Prefix    Vendor
                                         OS        OpenStack
                                         MLTI      Multi-Vendor
                                         ARB       ARB Approved
                                         RAX       Rackspace
                                         NASA      Nasa
                                         CTX       Citrix
                                         ...       ...




Thursday, April 28, 2011
25




        Vendor Identifiers

        • Namespaces also help ID the vendor

                     Namespace                               Vendor
                     http://docs.openstack.com/ext/OS/...    OpenStack
                     http://docs.openstack.com/ext/ARB/...   ARB Approved
                     http://docs.rackspacecloud.com/...      Rackspace
                     http://docs.nasa.org/...                Nasa
                     http://docs.citrix.com/....             Citrix
                     ...                                     ...




Thursday, April 28, 2011
26




        Vendor Identifiers

        • The idea is to help prevent clashes between extensions.
             – RAX-PIE
                 • NonXML media types (JSON), headers, parameters
             – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0
                 • XML based media types

        • Extensions are likely to be implemented by middleware, clashes are likely
          unless we standardize on an approach


                                                       Extension 2, add “shared”
                                                               attribute
                           Two extensions add a
                           “shared” attribute one will
                           override the other.         Extension 1, add “shared”
                                                               attribute



                                                                 API




Thursday, April 28, 2011
27




        Vendor Identifiers

        • The idea is to help prevent clashes between extensions.
             – RAX-PIE
                 • NonXML media types (JSON), headers, parameters
             – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0
                 • XML based media types

        • Extensions are likely to be implemented by middleware, clashes are likely
          unless we standardize on an approach


                                                           Extension 2, read “filter”   We need some way to
                                                                 parameter
                           Two extensions read a                                        make sure extensions
                           “filter” parameter, both will                                don’t clash with each
                           be activated.                   Extension 1, read “filter”   other and can co-exist
                                                                 parameter



                                                                     API




Thursday, April 28, 2011
28




        Vendor ID Registry

        • OpenStack should maintain a registry of Vendor IDs (prefix and
          namespaces).
        • Anyone should be able to register a Vendor ID.




                                   There shouldn’t be a process by which you get
                                   approved or anything.

                                   Anyone should be able to register a vendor id.




Thursday, April 28, 2011
29




        Data Extensions
        • Add additional Data.
             – In XML, attribute may be added to elements so long as they are in the extension
               namespace
             – In XML, Elements added after last element assuming “Unique Particle Attribution” is not
               violated
             – In JSON, use alias followed by a colon “:”

            <image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0"
                   xmlns:RAX-PIE="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                   id="1" name="CentOS 5.2"
                   serverId="12"
                   updated="2010-10-10T12:00:00Z"
                   created="2010-08-10T12:00:00Z"
                   status="ACTIVE"
                   RAX-PIE:shared="true"
                   />

            {
                 "image" : {
                     "id" : 1,
                     "name" : "CentOS 5.2",
                     "serverId" : 12,
                     "updated" : "2010-10-10T12:00:00Z",
                     "created" : "2010-08-10T12:00:00Z",
                     "status" : "ACTIVE",
                     "RAX-PIE:shared" : true
                 }
            }




Thursday, April 28, 2011
30




        New Actions

        • In XML, actions are defined in the extension namespace
        • In JSON, use alias followed by a colon “:” for the action name

          <mount_volume xmlns="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0"
              CBSID="123"/>


          {
               "RAX-CBS:mount_volume" : {
                   "CBSID" : "123"
               }
          }




Thursday, April 28, 2011
31




        New Headers and States

        • With headers, append name with an X- followed by the alias
             – X-RAX-CBS-Header1: Value
             – X-RAX-CBS-Header2: Value
        • With states, use alias followed by a “:”
            <image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0"
                   xmlns:RS-PIE="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0"
                   id="1" name="CentOS 5.2"
                   serverId="12"
                   updated="2010-10-10T12:00:00Z"
                   created="2010-08-10T12:00:00Z"
                   status="RAX-PIE:PrepareShare" progress="80"
                   RS-PIE:shared="true"
                   />

            {
                 "image" : {
                     "id" : 1,
                     "name" : "CentOS 5.2",
                     "serverId" : 12,
                     "updated" : "2010-10-10T12:00:00Z",
                     "created" : "2010-08-10T12:00:00Z",
                     "status" : "RAX-PIE:PrepareShare",
                     "progress" : 80,
                     "RS-PIE:shared" : true
                 }
            }



Thursday, April 28, 2011
32




        New Resources

        • Extensions are always defined at
          /path/to/resource/ext/ext-alias/newResource
          All major resources can reference a /ext




Thursday, April 28, 2011
33




                           Promoting Extensions




Thursday, April 28, 2011
34




        Specification Governance

        • In order to be successful extensions need to be governed
        • The architecture review board (ARB) is responsible for this.
           It...
             –   Proposes and approves specification changes
             –   Decides which extensions are promoted to the core API
             –   Ensures that each core API provides a minimal set of widely applicable capabilities
             –   Ensures conformance testing
        • Who’s in the ARB?
             – The exact makeup still needs to be determined
             – However, short term, probably OpenStack governance team in collaboration with the project
               team lead (PTL) of each team.
        • How does the ARB got about promoting extensions?
                                                                                       Governance doesn’t
                                                                                       necessarily need to be a
                           The governance team                                         heavy weight process...
                           concerned with
                           consistency bet ween                                        +1 in an e-mail
                           APIs..

                           ..team leads concern
                           with functionality of
                           their own service
Thursday, April 28, 2011
35




        ARB Approved Extensions

        • The ARB “blesses” an extension by making it an ARB-approved extension.
        • ARB-approved extensions use ARB as the vendor prefix.
        • An ARB-approved extension denotes
             – That the extension is being considered for the next revision of the specification OR
             – That extension is a niche extension that is very useful; it may not make it as a standard
               feature, but implementors are encouraged to implement it nonetheless, clients can rely on it
               being there in most cases.




Thursday, April 28, 2011
36




        Promotion Path

        • Extensions may follow a promotion path
             – Vendor Specific → ARB Approved → Core Feature
        • Some extensions may be developed by multiple vendors; these are known
          as Multi-Vendor extension, the prefix is MLTI.
             – Multi-Vendor (MLTI) → ARB Approved → Core Feature
        • An extension may start as a vendor specific extension and become a multi-
          vendor extension.
             – Vendor Specific → Multi-Vendor (MLTI) → ARB Approved → Core Feature




Thursday, April 28, 2011
37




        New Features Should Start as Extensions

        • This gives us the ability to try things out before a feature enters the
          standard.
        • Allows competing extensions to co-exist
        • That means that our API specs are written bottom-up rather than top-down
             – Implementations determine new features
             – The API is not designed in a vacuum




Thursday, April 28, 2011
38




        Promotion Path

        • Not all extensions should be promoted to core features
             – Extensions may implement niche functionality that doesn’t make sense in the core API.
             – Or they may implement functionality that can’t make it to core because it would prevent a
               particular backend from implementing the full set of core features.
        • Example: The ability to dynamically change the port number for a load
          balancer.
             – Most Load Balancers support this, but not all -- can’t be in the core
             – We can add that capability as an extension
             – This will be a pretty standard extension that will probably start off as an ARB-approved
               extension...




Thursday, April 28, 2011
39




                           Challenges




Thursday, April 28, 2011
40




        Language Bindings

        • Extensions should be supported at the language binding layer
             – A simple approach may be to allow the language bindings themselves to be extensible, so
               that extensions may be simply added to an existing binding.




Thursday, April 28, 2011
41




        JSON and Collections

        • How do you extend the collection of public addresses below?
             – Where do you put additional attributes?




                            {
                                "networks" : {
                                  "public" : [
                                     "67.23.10.132",
                                     "67.23.10.131"
                                  ],
                                  "private" : [
                                     "10.176.42.16"
                                  ]
                                }
                            }




Thursday, April 28, 2011
42




        JSON and Collections

        • Obviously, you’d need to wrap the array into an object


                           {
                               "networks" : {
                                 "public" : {
                                    "EXT-H: hello" : "hi",
                                    "addresses": [
                                      "67.23.10.132",
                                      "67.23.10.131"
                                    ]
                                 },
                                 "private" : {
                                    "addresses" : [
                                      "10.176.42.16"
                                    ]
                                 }
                               }
                           }




Thursday, April 28, 2011
43




        JSON and Collections

        • Work’s great but what do you call a collection of servers?




                           {
                               "servers" : [....]
                           }




Thursday, April 28, 2011
44




        JSON and Collections

        • Servers?




                           {
                               "servers" : {
                                 “servers” : [
                                   ...
                                 ]
                               }
                           }




Thursday, April 28, 2011
45




        JSON and Collections

        • I’d prefer having a single name for the array
             – It’s more generalizable...it always works...
             – Limits the introduction of entities not found in other representations



                             {
                                 "servers" : {
                                   “values” : [
                                     ...
                                   ]
                                 }
                             }


               A common pattern for
               collections...others call
               the array “memebers”




Thursday, April 28, 2011
46




        JSON and Collections
        • There are other approach we can take ranging from generalizable “values”
          to ad hock.
        • Each approach has it’s advantages and disadvantages
        • It may be that there is no approach that’s truly JSONic when dealing with
          collections.
        • We want extensibility in JSON, but we want to avoid BadgerFish:
            {
                "alice" : {
                   "bob" : {
                      "$" : "david" ,                                    Using alias prefixes get
                      "@xmlns" : {                                       gives us a lot
                         "charlie" : "http://some-other-namespace" ,
                         "$" : "http://some-namespace"
                      }
                   },
                   "charlie:edgar" : {
                      "$" : "frank" ,
                      "@xmlns" : {
                         "charlie": "http://some-other-namespace",
                         "$" : "http://some-namespace"
                      }
                   },
                   "@xmlns" : {
                      "charlie" : "http://some-other-namespace",
                      "$" : "http://some-namespace"
                   }
                }
            }




Thursday, April 28, 2011
47




                           Summary




Thursday, April 28, 2011
48




        Why Extensions?

        • Stable Core with Support for Innovation
        • New features can come quickly without and in a backward compatible
          manner
        • Pluggability - allow supporting the capabilities of different backends
        • Ensure compatibility between different kinds of OpenStack deployments
        • Allow vendors to differentiate their products with niche features
        • Allow new features to be tested before they become part of the core




Thursday, April 28, 2011
49




        How Extensions?

        • Extensions are queryable via a GET to /extensions
        • An individual extension via GET to /extensions/{EXT-ALIAS}
        • To help prevent clashes between extensions, use aliases and
          namespaces:
             – RAX-PIE
                 • NonXML media types (JSON), headers, parameters
             – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0
                 • XML based media types

        • Extensions can be promoted
             – Vendor Specific → ARB Approved → Core Feature
             – ARB Approved extensions likely part of the core distribution, likely to be implemented




Thursday, April 28, 2011
50




                           Questions?




Thursday, April 28, 2011

Más contenido relacionado

La actualidad más candente

Oracle Solaris Application-Centric Lifecycle and DevOps
Oracle Solaris Application-Centric Lifecycle and DevOpsOracle Solaris Application-Centric Lifecycle and DevOps
Oracle Solaris Application-Centric Lifecycle and DevOpsOTN Systems Hub
 
BP-5 Application Lifecycle Management
BP-5 Application Lifecycle ManagementBP-5 Application Lifecycle Management
BP-5 Application Lifecycle ManagementAlfresco Software
 
Your own kubernetes castle
Your own kubernetes castleYour own kubernetes castle
Your own kubernetes castleLibbySchulze
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsAlfresco Software
 
How to Contribute to Ansible
How to Contribute to AnsibleHow to Contribute to Ansible
How to Contribute to AnsibleCisco DevNet
 
Cucumber jvm best practices v3
Cucumber jvm best practices v3Cucumber jvm best practices v3
Cucumber jvm best practices v3Ahmed Misbah
 
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and Roma...
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and  Roma...Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and  Roma...
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and Roma...mfrancis
 
Multicore 101: Migrating Embedded Apps to Multicore with Linux
Multicore 101: Migrating Embedded Apps to Multicore with LinuxMulticore 101: Migrating Embedded Apps to Multicore with Linux
Multicore 101: Migrating Embedded Apps to Multicore with LinuxBrad Dixon
 
Integrating Splunk into your Spring Applications
Integrating Splunk into your Spring ApplicationsIntegrating Splunk into your Spring Applications
Integrating Splunk into your Spring ApplicationsDamien Dallimore
 
Java APIs - the missing manual
Java APIs - the missing manualJava APIs - the missing manual
Java APIs - the missing manualHendrik Ebbers
 
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CloudBees
 
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & Hybrid
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & HybridAWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & Hybrid
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & HybridAmazon Web Services
 
Enterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryEnterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryChris Riley ☁
 
CDO Ignite
CDO IgniteCDO Ignite
CDO IgniteHolmes70
 

La actualidad más candente (15)

Oracle Solaris Application-Centric Lifecycle and DevOps
Oracle Solaris Application-Centric Lifecycle and DevOpsOracle Solaris Application-Centric Lifecycle and DevOps
Oracle Solaris Application-Centric Lifecycle and DevOps
 
BP-5 Application Lifecycle Management
BP-5 Application Lifecycle ManagementBP-5 Application Lifecycle Management
BP-5 Application Lifecycle Management
 
Your own kubernetes castle
Your own kubernetes castleYour own kubernetes castle
Your own kubernetes castle
 
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment ToolsBP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
BP-10 Keeping Your Sanity – Rapid Development & Deployment Tools
 
Open Source Recife
Open Source RecifeOpen Source Recife
Open Source Recife
 
How to Contribute to Ansible
How to Contribute to AnsibleHow to Contribute to Ansible
How to Contribute to Ansible
 
Cucumber jvm best practices v3
Cucumber jvm best practices v3Cucumber jvm best practices v3
Cucumber jvm best practices v3
 
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and Roma...
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and  Roma...Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and  Roma...
Transactions in Eclipse Based SOA - Pavlin Dobrev, Dimitar Valtchev and Roma...
 
Multicore 101: Migrating Embedded Apps to Multicore with Linux
Multicore 101: Migrating Embedded Apps to Multicore with LinuxMulticore 101: Migrating Embedded Apps to Multicore with Linux
Multicore 101: Migrating Embedded Apps to Multicore with Linux
 
Integrating Splunk into your Spring Applications
Integrating Splunk into your Spring ApplicationsIntegrating Splunk into your Spring Applications
Integrating Splunk into your Spring Applications
 
Java APIs - the missing manual
Java APIs - the missing manualJava APIs - the missing manual
Java APIs - the missing manual
 
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
 
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & Hybrid
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & HybridAWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & Hybrid
AWS Summit Tel Aviv - Enterprise Track - Enterprise Apps & Hybrid
 
Enterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private RegistryEnterprise Docker Requires a Private Registry
Enterprise Docker Requires a Private Registry
 
CDO Ignite
CDO IgniteCDO Ignite
CDO Ignite
 

Similar a OpenStack Extensions

OpenStack at EBSCO
OpenStack at EBSCOOpenStack at EBSCO
OpenStack at EBSCOTesora
 
Interoperability: The Elephants in the Room & What We're Doing About Them
Interoperability: The Elephants in the Room & What We're Doing About ThemInteroperability: The Elephants in the Room & What We're Doing About Them
Interoperability: The Elephants in the Room & What We're Doing About ThemMark Voelker
 
InteropWG Intro & Vertical Programs (May. 2017)
InteropWG Intro & Vertical Programs (May. 2017)InteropWG Intro & Vertical Programs (May. 2017)
InteropWG Intro & Vertical Programs (May. 2017)Mark Voelker
 
2011 Essex Summit: Openstack/Hyper-V clouds
2011 Essex Summit: Openstack/Hyper-V clouds2011 Essex Summit: Openstack/Hyper-V clouds
2011 Essex Summit: Openstack/Hyper-V cloudsppouliot
 
The Future of API Specifications -- Aidan Cunniffe 2021
The Future of API Specifications -- Aidan Cunniffe 2021The Future of API Specifications -- Aidan Cunniffe 2021
The Future of API Specifications -- Aidan Cunniffe 2021Aidan Cunniffe
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedJeroen Niesen
 
Simplify Your Way To Expert Kubernetes Management
Simplify Your Way To Expert Kubernetes ManagementSimplify Your Way To Expert Kubernetes Management
Simplify Your Way To Expert Kubernetes ManagementDevOps.com
 
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...VMworld
 
Top 10 dev ops tools (1)
Top 10 dev ops tools (1)Top 10 dev ops tools (1)
Top 10 dev ops tools (1)yalini97
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experienceIgor Anishchenko
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experienceAlex Tumanoff
 
DefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackDefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackMark Voelker
 
MuleSoft London Community November 2019 - MuleSoft and CICD
MuleSoft London Community November 2019 - MuleSoft and CICDMuleSoft London Community November 2019 - MuleSoft and CICD
MuleSoft London Community November 2019 - MuleSoft and CICDPace Integration
 
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em All
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em AllSkipping OpenStack Releases: (You Don't) Gotta Catch 'Em All
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em AllMark Voelker
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOpsCisco DevNet
 
Onos summit roadmap dec 9
Onos summit  roadmap dec 9Onos summit  roadmap dec 9
Onos summit roadmap dec 9ONOS Project
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
OPNFV CI and Challenges: How we solved them - if we solved them at all!
OPNFV CI and Challenges: How we solved them - if we solved them at all!OPNFV CI and Challenges: How we solved them - if we solved them at all!
OPNFV CI and Challenges: How we solved them - if we solved them at all!Fatih Degirmenci
 

Similar a OpenStack Extensions (20)

OpenStack at EBSCO
OpenStack at EBSCOOpenStack at EBSCO
OpenStack at EBSCO
 
Interoperability: The Elephants in the Room & What We're Doing About Them
Interoperability: The Elephants in the Room & What We're Doing About ThemInteroperability: The Elephants in the Room & What We're Doing About Them
Interoperability: The Elephants in the Room & What We're Doing About Them
 
InteropWG Intro & Vertical Programs (May. 2017)
InteropWG Intro & Vertical Programs (May. 2017)InteropWG Intro & Vertical Programs (May. 2017)
InteropWG Intro & Vertical Programs (May. 2017)
 
2011 Essex Summit: Openstack/Hyper-V clouds
2011 Essex Summit: Openstack/Hyper-V clouds2011 Essex Summit: Openstack/Hyper-V clouds
2011 Essex Summit: Openstack/Hyper-V clouds
 
The Future of API Specifications -- Aidan Cunniffe 2021
The Future of API Specifications -- Aidan Cunniffe 2021The Future of API Specifications -- Aidan Cunniffe 2021
The Future of API Specifications -- Aidan Cunniffe 2021
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
 
Simplify Your Way To Expert Kubernetes Management
Simplify Your Way To Expert Kubernetes ManagementSimplify Your Way To Expert Kubernetes Management
Simplify Your Way To Expert Kubernetes Management
 
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...
VMworld 2013: Deploying vSphere with OpenStack: What It Means to Your Cloud E...
 
Top 10 dev ops tools (1)
Top 10 dev ops tools (1)Top 10 dev ops tools (1)
Top 10 dev ops tools (1)
 
OpenStack Kilo - April 2015
OpenStack Kilo - April 2015OpenStack Kilo - April 2015
OpenStack Kilo - April 2015
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experience
 
Overview of PaaS: Java experience
Overview of PaaS: Java experienceOverview of PaaS: Java experience
Overview of PaaS: Java experience
 
DefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackDefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStack
 
Was liberty
Was libertyWas liberty
Was liberty
 
MuleSoft London Community November 2019 - MuleSoft and CICD
MuleSoft London Community November 2019 - MuleSoft and CICDMuleSoft London Community November 2019 - MuleSoft and CICD
MuleSoft London Community November 2019 - MuleSoft and CICD
 
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em All
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em AllSkipping OpenStack Releases: (You Don't) Gotta Catch 'Em All
Skipping OpenStack Releases: (You Don't) Gotta Catch 'Em All
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOps
 
Onos summit roadmap dec 9
Onos summit  roadmap dec 9Onos summit  roadmap dec 9
Onos summit roadmap dec 9
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
OPNFV CI and Challenges: How we solved them - if we solved them at all!
OPNFV CI and Challenges: How we solved them - if we solved them at all!OPNFV CI and Challenges: How we solved them - if we solved them at all!
OPNFV CI and Challenges: How we solved them - if we solved them at all!
 

Último

Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 

Último (20)

Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

OpenStack Extensions

  • 1. OpenStack API Extensions Jorge L. Williams Thursday, April 28, 2011
  • 2. 2 Agenda • The Problem • Extensions • Extensions in REST • Promoting Extensions to new Features • Challenges • Summary • Questions? Thursday, April 28, 2011
  • 3. 3 The Problem Thursday, April 28, 2011
  • 4. 4 Standardization vs Innovation and Differentiation • We want our APIs to be Open Standards... There are a number of – Defining Standard APIs good for OpenStack, and our Customers problem that we’re trying – We want to encourage others to implement our APIs to solve: One is there always seems to be a – Standards need to be stable conflict bet ween • Hard to develop against something that’s in constant flux – Standards need to be general • May be impossible for someone to adopt our standards if they contain niche functionality. – The more general and stable the API, the more likely others will adopt it. • We want to innovate – Quickly add features that differentiate one implementation from other implementations • Without breaking our clients • Without going through an approval process – We want to allow others to also make changes to the API • More likely to adopt OpenStack APIs if they can be modified • We may all benefit from these changes – Developers should feel free to experiment and develop new features without worrying about the implications to the API as a standard. One goal is to create this ubiquitous cloud technology Thursday, April 28, 2011
  • 5. 5 Pluggability • OpenStack services should be pluggable. – One OpenStack Service...Many Backends: • Backends contain a set of shared capabilities, widely applicable to all deployments • However, each backend may contain special features and niche functionality • How do we provide access to special features, while still abstracting away the details of the backend? hypervisors  in  compute,   network  switches  in  NaaS, etc.     LBaaS Implemented  via  drivers Zeus Pound HAProxy Thursday, April 28, 2011
  • 6. 6 Open Source • Open source presents another interesting challenge: Others can make changes to the code. – OpenStack stock Compute API vs. • Rackspace Version vs. • Other Modified versions. – What does OpenStack Compute API 1.1 mean if we have different implementations all with different capabilities? – How do we ensure compatibility among the different versions? Thursday, April 28, 2011
  • 7. 7 Extensions Thursday, April 28, 2011
  • 8. 8 Case Study: OpenGL • The problem we’re facing is not new. OpenGL faced a similar problem in the 90’s – How do you define an open graphics library that: • Is considered a standard specification • Allows vendors to differentiate their products by adding special features • And yet is a governed spec – An architecture review board (ARB): » Proposes and approves specification changes » Makes new releases » Ensures conformance testing – The solution was to allow extensions in the specification • Vendors can define special features as extensions – A very successful strategy • The core OpenGL API is general and uncluttered and an accepted standard. • Over 500 extensions have been defined over OpenGL’s lifetime – Best become standard features; others abandoned – Different extensions for the same feature? Let the best one win. – Many innovations came via the extension process: vertex and fragment shaders, etc. – Extensions have been defined by many different vendors: NVidia, ATI, Apple, IBM, Intel, … Thursday, April 28, 2011
  • 9. 9 So what are extensions... Extensions • Extensions add capability to the API beyond those of the specification • An API specification must be written to allow for extensibility – We need flexibility in the contract to allow for new data elements, actions, states, headers, parameters, and resource types. – The core API specification defines the extension mechanism, but extensions themselves are not part of the core. • Implementors are only required to implement the core API – But they must implement the core API completely, this way clients can expect a minimum level of functionality. • Extensions can be promoted – Extensions follow a promotion path, at the end of which an extension may become part of the next version of the core API. – Niche extensions, may never be promoted to the core. If 90% of calls return unimplemented then what’s the point of having a core API? Thursday, April 28, 2011
  • 10. 10 Extensions vs. Versions Versions Extensions Centralized: Versions are maintained by the Decentralized: Extensions are maintained by entity that controls the API Spec: The third parties: Rackspace, OpenStack developers, OpenStack Architecture Board. Only the ARB etc. Anyone can create an Extension. can create a new version, only the ARB defines what OpenStack Compute 1.1 means. Thursday, April 28, 2011
  • 11. 11 Extensions vs. Versions Versions Extensions Centralized: Versions are maintained by the Decentralized: Extensions are maintained by entity that controls the API Spec: The third parties: Rackspace, OpenStack developers, OpenStack Architecture Board. Only the ARB etc. Anyone can create an Extension. can create a new version, only the ARB defines what OpenStack Compute 1.1 means. Deal with Core Functionality Deal with Specialized/Niche Functionality Can be applicable to a wide degree of backends...many hypervisors...many load balancers...etc. Thursday, April 28, 2011
  • 12. 12 Extensions vs. Versions Versions Extensions Centralized: Versions are maintained by the Decentralized: Extensions are maintained by entity that controls the API Spec: The third parties: Rackspace, OpenStack developers, OpenStack Architecture Board. Only the ARB etc. Anyone can create an Extension. can create a new version, only the ARB defines what OpenStack Compute 1.1 means. Deal with Core Functionality Deal with Specialized/Niche Functionality Appear infrequently: Versions provide a Appear frequently: Extensions bring new stable platform on which to develop. features to the market quickly, and in a compatible manner. Thursday, April 28, 2011
  • 13. 13 Extensions vs. Versions Versions Extensions Centralized: Versions are maintained by the Decentralized: Extensions are maintained by entity that controls the API Spec: The third parties: Rackspace, OpenStack developers, OpenStack Architecture Board. Only the ARB etc. Anyone can create an Extension. can create a new version, only the ARB defines what OpenStack Compute 1.1 means. Deal with Core Functionality Deal with Specialized/Niche Functionality Appear infrequently: Versions provide a Appear frequently: Extensions bring new stable platform on which to develop. features to the market quickly, and in a compatible manner. Are Queryable: You can programmatically Are Queryable: You can programmatically tell tell what versions are available by doing a GET what extensions are available by doing a GET on on the base URL (/) of the API endpoint. the extensions resource (/v1.1/extensions). Thursday, April 28, 2011
  • 14. 14 Extensions vs. Versions • Our APIs should be both Extensible and Versionable Thursday, April 28, 2011
  • 15. 15 Extensions and Plug-ability go Hand in Hand Core API Extensions Each driver may expose functionality that a LBaaS client may access via an extension. Zeus Pound HAProxy Thursday, April 28, 2011
  • 16. 16 Extensions in REST Thursday, April 28, 2011
  • 17. 17 What can be extended • Extensions may define: – New elements/attributes – New actions – New headers – New parameters – New states – New resources – New mime-types (support for Atom representation or plist representation) – New capabilities (the ability to edit an otherwise un-editable attribute) Thursday, April 28, 2011
  • 18. 18 Extensions are queryable • You should be able to tell what extensions are available by making a single call. • If you use extensions as a client this is the first call you’ll probably make Thursday, April 28, 2011
  • 19. 19 Sample Extension Query • Extensions are queryable via /extensions <extensions xmlns="http://docs.openstack.org/api-specs/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" > <extension name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" alias="RAX-PIE" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/> <description> Adds the capability to share an image with other users. </description> </extension> <extension name="Cloud Block Storage" namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" alias="RAX-CBS" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/> <description> Allows mounting cloud block storage volumes. </description> </extension> </extensions> Thursday, April 28, 2011
  • 20. 20 Sample Extension Query • Human Readable Name and Description <extensions xmlns="http://docs.openstack.org/api-specs/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" > <extension name="Public Image Extension" name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" alias="RS-PIE" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/> <description> Adds the capability to share an image with other users. </description> </extension> <extension name="Cloud Block Storage" namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" alias="RS-CBS" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/> <description> Allows mounting cloud block storage volumes. </description> </extension> </extensions> Thursday, April 28, 2011
  • 21. 21 Sample Extension Query • Links to Documentation (in different formats) <extensions xmlns="http://docs.openstack.org/api-specs/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" > <extension name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" alias="RS-PIE" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/> <description> Adds the capability to share an image with other users. </description> </extension> <extension name="Cloud Block Storage" namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" alias="RS-CBS" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/> <description> Allows mounting cloud block storage volumes. </description> </extension> </extensions> Thursday, April 28, 2011
  • 22. 22 Sample Extension Query • Unique Extension IDs <extensions xmlns="http://docs.openstack.org/api-specs/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" > <extension name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" alias="RAX-PIE" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/> <description> Adds the capability to share an image with other users. </description> </extension> <extension name="Cloud Block Storage" namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" alias="RAX-CBS" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/> <description> Allows mounting cloud block storage volumes. </description> </extension> </extensions> Thursday, April 28, 2011
  • 23. 23 Sample Extension Query • Vendor Identifiers <extensions xmlns="http://docs.openstack.org/api-specs/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" > <extension name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" docs.rackspacecloud.com alias="RAX-PIE" RAX > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-pie.wadl"/> <description> Adds the capability to share an image with other users. </description> </extension> <extension name="Cloud Block Storage" namespace="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" alias="RAX-CBS" > <atom:link rel="describedby" type="application/pdf" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" href="http://docs.rackspacecloud.com/servers/api/ext/cs-cbs.wadl"/> <description> Allows mounting cloud block storage volumes. </description> </extension> </extensions> Thursday, April 28, 2011
  • 24. 24 Vendor Identifiers • An extension alias always contains a prefix that identifies the vendor. <extension name="Public Image Extension" namespace="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" alias="RAX-PIE"> Prefix Vendor OS OpenStack MLTI Multi-Vendor ARB ARB Approved RAX Rackspace NASA Nasa CTX Citrix ... ... Thursday, April 28, 2011
  • 25. 25 Vendor Identifiers • Namespaces also help ID the vendor Namespace Vendor http://docs.openstack.com/ext/OS/... OpenStack http://docs.openstack.com/ext/ARB/... ARB Approved http://docs.rackspacecloud.com/... Rackspace http://docs.nasa.org/... Nasa http://docs.citrix.com/.... Citrix ... ... Thursday, April 28, 2011
  • 26. 26 Vendor Identifiers • The idea is to help prevent clashes between extensions. – RAX-PIE • NonXML media types (JSON), headers, parameters – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0 • XML based media types • Extensions are likely to be implemented by middleware, clashes are likely unless we standardize on an approach Extension 2, add “shared” attribute Two extensions add a “shared” attribute one will override the other. Extension 1, add “shared” attribute API Thursday, April 28, 2011
  • 27. 27 Vendor Identifiers • The idea is to help prevent clashes between extensions. – RAX-PIE • NonXML media types (JSON), headers, parameters – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0 • XML based media types • Extensions are likely to be implemented by middleware, clashes are likely unless we standardize on an approach Extension 2, read “filter” We need some way to parameter Two extensions read a make sure extensions “filter” parameter, both will don’t clash with each be activated. Extension 1, read “filter” other and can co-exist parameter API Thursday, April 28, 2011
  • 28. 28 Vendor ID Registry • OpenStack should maintain a registry of Vendor IDs (prefix and namespaces). • Anyone should be able to register a Vendor ID. There shouldn’t be a process by which you get approved or anything. Anyone should be able to register a vendor id. Thursday, April 28, 2011
  • 29. 29 Data Extensions • Add additional Data. – In XML, attribute may be added to elements so long as they are in the extension namespace – In XML, Elements added after last element assuming “Unique Particle Attribution” is not violated – In JSON, use alias followed by a colon “:” <image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" xmlns:RAX-PIE="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" id="1" name="CentOS 5.2" serverId="12" updated="2010-10-10T12:00:00Z" created="2010-08-10T12:00:00Z" status="ACTIVE" RAX-PIE:shared="true" /> { "image" : { "id" : 1, "name" : "CentOS 5.2", "serverId" : 12, "updated" : "2010-10-10T12:00:00Z", "created" : "2010-08-10T12:00:00Z", "status" : "ACTIVE", "RAX-PIE:shared" : true } } Thursday, April 28, 2011
  • 30. 30 New Actions • In XML, actions are defined in the extension namespace • In JSON, use alias followed by a colon “:” for the action name <mount_volume xmlns="http://docs.rackspacecloud.com/servers/api/ext/cbs/v1.0" CBSID="123"/> { "RAX-CBS:mount_volume" : { "CBSID" : "123" } } Thursday, April 28, 2011
  • 31. 31 New Headers and States • With headers, append name with an X- followed by the alias – X-RAX-CBS-Header1: Value – X-RAX-CBS-Header2: Value • With states, use alias followed by a “:” <image xmlns="http://docs.rackspacecloud.com/servers/api/v1.0" xmlns:RS-PIE="http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0" id="1" name="CentOS 5.2" serverId="12" updated="2010-10-10T12:00:00Z" created="2010-08-10T12:00:00Z" status="RAX-PIE:PrepareShare" progress="80" RS-PIE:shared="true" /> { "image" : { "id" : 1, "name" : "CentOS 5.2", "serverId" : 12, "updated" : "2010-10-10T12:00:00Z", "created" : "2010-08-10T12:00:00Z", "status" : "RAX-PIE:PrepareShare", "progress" : 80, "RS-PIE:shared" : true } } Thursday, April 28, 2011
  • 32. 32 New Resources • Extensions are always defined at /path/to/resource/ext/ext-alias/newResource All major resources can reference a /ext Thursday, April 28, 2011
  • 33. 33 Promoting Extensions Thursday, April 28, 2011
  • 34. 34 Specification Governance • In order to be successful extensions need to be governed • The architecture review board (ARB) is responsible for this. It... – Proposes and approves specification changes – Decides which extensions are promoted to the core API – Ensures that each core API provides a minimal set of widely applicable capabilities – Ensures conformance testing • Who’s in the ARB? – The exact makeup still needs to be determined – However, short term, probably OpenStack governance team in collaboration with the project team lead (PTL) of each team. • How does the ARB got about promoting extensions? Governance doesn’t necessarily need to be a The governance team heavy weight process... concerned with consistency bet ween +1 in an e-mail APIs.. ..team leads concern with functionality of their own service Thursday, April 28, 2011
  • 35. 35 ARB Approved Extensions • The ARB “blesses” an extension by making it an ARB-approved extension. • ARB-approved extensions use ARB as the vendor prefix. • An ARB-approved extension denotes – That the extension is being considered for the next revision of the specification OR – That extension is a niche extension that is very useful; it may not make it as a standard feature, but implementors are encouraged to implement it nonetheless, clients can rely on it being there in most cases. Thursday, April 28, 2011
  • 36. 36 Promotion Path • Extensions may follow a promotion path – Vendor Specific → ARB Approved → Core Feature • Some extensions may be developed by multiple vendors; these are known as Multi-Vendor extension, the prefix is MLTI. – Multi-Vendor (MLTI) → ARB Approved → Core Feature • An extension may start as a vendor specific extension and become a multi- vendor extension. – Vendor Specific → Multi-Vendor (MLTI) → ARB Approved → Core Feature Thursday, April 28, 2011
  • 37. 37 New Features Should Start as Extensions • This gives us the ability to try things out before a feature enters the standard. • Allows competing extensions to co-exist • That means that our API specs are written bottom-up rather than top-down – Implementations determine new features – The API is not designed in a vacuum Thursday, April 28, 2011
  • 38. 38 Promotion Path • Not all extensions should be promoted to core features – Extensions may implement niche functionality that doesn’t make sense in the core API. – Or they may implement functionality that can’t make it to core because it would prevent a particular backend from implementing the full set of core features. • Example: The ability to dynamically change the port number for a load balancer. – Most Load Balancers support this, but not all -- can’t be in the core – We can add that capability as an extension – This will be a pretty standard extension that will probably start off as an ARB-approved extension... Thursday, April 28, 2011
  • 39. 39 Challenges Thursday, April 28, 2011
  • 40. 40 Language Bindings • Extensions should be supported at the language binding layer – A simple approach may be to allow the language bindings themselves to be extensible, so that extensions may be simply added to an existing binding. Thursday, April 28, 2011
  • 41. 41 JSON and Collections • How do you extend the collection of public addresses below? – Where do you put additional attributes? { "networks" : { "public" : [ "67.23.10.132", "67.23.10.131" ], "private" : [ "10.176.42.16" ] } } Thursday, April 28, 2011
  • 42. 42 JSON and Collections • Obviously, you’d need to wrap the array into an object { "networks" : { "public" : { "EXT-H: hello" : "hi", "addresses": [ "67.23.10.132", "67.23.10.131" ] }, "private" : { "addresses" : [ "10.176.42.16" ] } } } Thursday, April 28, 2011
  • 43. 43 JSON and Collections • Work’s great but what do you call a collection of servers? { "servers" : [....] } Thursday, April 28, 2011
  • 44. 44 JSON and Collections • Servers? { "servers" : { “servers” : [ ... ] } } Thursday, April 28, 2011
  • 45. 45 JSON and Collections • I’d prefer having a single name for the array – It’s more generalizable...it always works... – Limits the introduction of entities not found in other representations { "servers" : { “values” : [ ... ] } } A common pattern for collections...others call the array “memebers” Thursday, April 28, 2011
  • 46. 46 JSON and Collections • There are other approach we can take ranging from generalizable “values” to ad hock. • Each approach has it’s advantages and disadvantages • It may be that there is no approach that’s truly JSONic when dealing with collections. • We want extensibility in JSON, but we want to avoid BadgerFish: { "alice" : { "bob" : { "$" : "david" , Using alias prefixes get "@xmlns" : { gives us a lot "charlie" : "http://some-other-namespace" , "$" : "http://some-namespace" } }, "charlie:edgar" : { "$" : "frank" , "@xmlns" : { "charlie": "http://some-other-namespace", "$" : "http://some-namespace" } }, "@xmlns" : { "charlie" : "http://some-other-namespace", "$" : "http://some-namespace" } } } Thursday, April 28, 2011
  • 47. 47 Summary Thursday, April 28, 2011
  • 48. 48 Why Extensions? • Stable Core with Support for Innovation • New features can come quickly without and in a backward compatible manner • Pluggability - allow supporting the capabilities of different backends • Ensure compatibility between different kinds of OpenStack deployments • Allow vendors to differentiate their products with niche features • Allow new features to be tested before they become part of the core Thursday, April 28, 2011
  • 49. 49 How Extensions? • Extensions are queryable via a GET to /extensions • An individual extension via GET to /extensions/{EXT-ALIAS} • To help prevent clashes between extensions, use aliases and namespaces: – RAX-PIE • NonXML media types (JSON), headers, parameters – http://docs.rackspacecloud.com/servers/api/ext/pie/v1.0 • XML based media types • Extensions can be promoted – Vendor Specific → ARB Approved → Core Feature – ARB Approved extensions likely part of the core distribution, likely to be implemented Thursday, April 28, 2011
  • 50. 50 Questions? Thursday, April 28, 2011