SlideShare a Scribd company logo
1 of 21
Download to read offline
OpenStack API's and WSGI


                 http://github.com/lhrc-mikeyp/Presentations




Mike Pittaro
La Honda Research Center
mikeyp@LaHondaResearch.org
@pmikeyp
     This work is licensed under the Creative Commons Attribution-
     NonCommercial-ShareAlike 3.0 Unported License.
Introduction
●
    Taking a peek under the hood of OpenStack
    ●
        From the API inwards
●
    Prerequisites
    ●
        A basic understanding of Web, REST, and HTTP
    ●
        Some knowledge of Python
●
    Why learn this ?
    ●
        Understand OpenStack's API implementation
    ●
        Easier to understand and troubleshoot
    ●
        First step to modifying OpenStack
    ●
        First step to extending API's
How Deep is a 'peek' ?
●
    Everything should be made as simple as
    possible, but not simpler.
         ●
             Albert Enistein



●
    Simple is Better than Complex
●
    Complex is better than Complicated
         ●
             PEP 20
What is OpenStack ?
●   OpenStack is a global collaboration of developers
    and cloud computing technologists producing
    the ubiquitous open source cloud computing
    platform for public and private clouds.
●   The project aims to deliver solutions for all types
    of clouds by being simple to implement,
    massively scalable, and feature rich.
●   The technology consists of a series of
    interrelated projects delivering various
    components for a cloud infrastructure solution.
How is OpenStack Implemented?
●
    OpenStack is a collection of services
    ●
        Compute (Nova)             ●
                                       Identity (Keystone)
    ●
        Object Storage (Swift)     ●
                                       Dashboard (Horizon)
    ●
        Image Service (Glance)


●
    Each service is a 'WebApp'
    ●
        REST API server ('frontend')
    ●
        One or more backend servers
    ●
        Messaging interface between them
OpenStack API's
●
    All Interaction with OpenStack is via API's
    ●
        http://docs.openstack.org/api/
    ●
        http://api.openstack.org/
●
    API QuickStart
    ●
        http://docs.openstack.org/api/quick-start/content/
●
    The API's use HTTP + json (or xml)
    ●
        Use curl or wget or browser plugins
    ●
        Use any programming language via HTTP libraries
    ●
        Use the Python novaclient library
OpenStack In Action
   ●
       OpenStack includes a nova command
        ●
            It's built using the novaclient library
mikeyp@blade1:devstack$ nova --username admin --password devstack image-list
+--------------------------------------+--------------------------------------------+--------+--------+
|                  ID                  |                    Name                    | Status | Server |
+--------------------------------------+--------------------------------------------+--------+--------+
| 43bafe10-700c-45af-90a8-b5d794812e62 | cirros-0.3.0-x86_64-blank-ramdisk          | ACTIVE |        |
| 45ad4046-9780-4968-83c6-460f168321c7 | cirros-0.3.0-x86_64-blank-kernel           | ACTIVE |        |
| 6216fc7c-7f87-45e0-be0f-eefef2d5be33 | ttylinux-uec-amd64-11.2_2.6.35-15_1        | ACTIVE |        |
| 92a1e0bd-c4a5-4f3f-a66f-1f8b990f2b0e | ttylinux-uec-amd64-11.2_2.6.35-15_1-kernel | ACTIVE |        |
| 95d8db11-b175-43d2-b3de-d7b806e54dde | cirros-0.3.0-x86_64-blank                  | ACTIVE |        |
| e543bb77-5a7d-4ef0-9a7a-92ca6c8a0b35 | cirros-0.3.0-x86_64-rootfs                 | ACTIVE |        |
+--------------------------------------+--------------------------------------------+--------+--------+

mikeyp@blade1:devstack$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+
| ID |    Name   | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor |
+----+-----------+-----------+------+-----------+------+-------+-------------+
| 1 | m1.tiny    | 512       | 0    | 0         |      | 1     | 1.0         |
| 2 | m1.small | 2048        | 10   | 20        |      | 1     | 1.0         |
| 3 | m1.medium | 4096       | 10   | 40        |      | 2     | 1.0         |
| 4 | m1.large | 8192        | 10   | 80        |      | 4     | 1.0         |
| 5 | m1.xlarge | 16384      | 10   | 160       |      | 8     | 1.0         |
+----+-----------+-----------+------+-----------+------+-------+-------------+
Using novaclient
#!/usr/bin/env python

import logging

import novaclient
from novaclient.v1_1 import client

# enable debug logging
logger = logging.getLogger('novaclient.client')
logger.setLevel(logging.DEBUG)
debug_stream = logging.StreamHandler()
logger.addHandler(debug_stream)

auth_url = 'http://10.100.20.22:5000/v2.0'
user = 'admin'
password = 'devstack'
project = 'demo'
region = 'RegionOne'
service = 'compute'

nova = client.Client(user, password, project, auth_url,
                     region_name=region, service_type=service)

results = nova.images.list(detailed=True)
for image in results:
    print image.id, image.name, image.status

mikeyp@blade1:api_examples$ python image_list.py
e543bb77-5a7d-4ef0-9a7a-92ca6c8a0b35 cirros-0.3.0-x86_64-rootfs ACTIVE
95d8db11-b175-43d2-b3de-d7b806e54dde cirros-0.3.0-x86_64-blank ACTIVE
45ad4046-9780-4968-83c6-460f168321c7 cirros-0.3.0-x86_64-blank-kernel ACTIVE
43bafe10-700c-45af-90a8-b5d794812e62 cirros-0.3.0-x86_64-blank-ramdisk ACTIVE
92a1e0bd-c4a5-4f3f-a66f-1f8b990f2b0e ttylinux-uec-amd64-11.2_2.6.35-15_1-kernel ACTIVE
6216fc7c-7f87-45e0-be0f-eefef2d5be33 ttylinux-uec-amd64-11.2_2.6.35-15_1 ACTIVE
Keystone API using urllib2
def get_keystone_token():
    """authenticate against keystone identity service
    returns an auth token, and the service url

   """
   user = 'admin'
   password = 'devstack'
   project = 'demo'
   auth_url = 'http://10.100.20.22:5000/v2.0/tokens'

   auth_request = urllib2.Request(auth_url)
   auth_request.add_header('Content-Type', 'application/json;charset=utf8')
   auth_request.add_header('Accept', 'application/json')
   auth_request.add_header('User-Agent', 'python-mikeyp')

   auth_data = {"auth":
       {"tenantName": project,
        "passwordCredentials": {
           "username": user,
           "password": password}
       }
   }
   auth_request.add_data(json.dumps(auth_data))
   auth_response = urllib2.urlopen(auth_request)
   response_data = json.loads(auth_response.read())

   token = response_data['access']['token']['id']

   service_list = response_data['access']['serviceCatalog']
   for s in service_list:
       if s['type'] == 'compute' and s['name'] == "'Compute Service'":
           break
   nova_url = s['endpoints'][0]['publicURL']
   return (token, nova_url)
Images API using urllib2
#!/usr/bin/env python

import urllib2
import json

# def get_keystone_token():
   # see previous page

token, service_url   = get_keystone_token()

image_api = service_url + '/images/detail'

images_request = urllib2.Request(image_api)
images_request.add_header('Content-Type', 'application/json;charset=utf8')
images_request.add_header('Accept', 'application/json')
images_request.add_header('User-Agent', 'python-mikeyp')
images_request.add_header('X-Auth-Token', token)
images_request.add_header('X-Auth-Project-Id', 'demo')

image_response = urllib2.urlopen(images_request)
image_data = json.loads(image_response.read())
print json.dumps(image_data, indent=4)
What's been happening ?
OpenStack 'Web Stack'
●
    Paste HTTP Server
    ●
        HTTP protocol + networking
●   WebOb requests and responses
    ●
        Wrappers for HTTP Requests and Responses
●   OpenStack code
    ●
        Nova, glance, keystone, etc
●
    Web Service Gateway Interface (WSGI)
    ●
        The specification for web servers and applications
    ●
        WSGI is not code – no import
WSGI In a Nutshell
●   WSGI Application
    ●   A Python callable passed two arguments:
        –   WSGI Environment
        –   A start_response function
    ●   Application calls start_response, and returns response
●   WSGI Server
    ●   The Server calls the application
●   WSGI Middleware
    ●   Both a server and application
    ●   Use to 'wrap' or 'pipeline' requests
Simple WSGI Application
"""Hello World using Paste + WSGI """

from paste import httpserver

def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/html')])
    return ['Hello World']

httpserver.serve(application, host='127.0.0.1', port=8080)
WSGI With WebOb + Paste
wsgi_webob.py
"""Hello World using WebOb, Paste + WSGI """

from webob import Response
from webob.dec import wsgify

from paste import httpserver
from paste.deploy import loadapp

INI_PATH = '/home/mikeyp/Documents/Projects/OpenStack/presentations/api_examples/wsgi_webob.ini'

@wsgify
def application(request):

   return Response('Hello, World of WebOb !')


def app_factory(global_config, **local_config):
    return application

wsgi_app = loadapp('config:' + INI_PATH)

httpserver.serve(wsgi_app, host='127.0.0.1', port=8080)

wsgi_webob_ini.py

[app:main]
paste.app_factory = wsgi_webob:app_factory
WSGI middleware
"""Hello World (authorized version) using WebOb, Paste + WSGI """

from webob import Response
from webob.dec import wsgify
from webob import exc

from paste import httpserver
from paste.deploy import loadapp

INI_PATH = '/home/mikeyp/Documents/Projects/OpenStack/presentations/api_examples/wsgi_webob_mid.ini'

@wsgify
def application(request):

   return Response('Hello, Secret World of WebOb !')

@wsgify.middleware
def auth_filter(request, app):

   if request.headers.get('X-Auth-Token') != 'open-sesame':
       return exc.HTTPForbidden()
   return app(request)

def app_factory(global_config, **local_config):
    return application

def filter_factory(global_config, **local_config):
    return auth_filter

wsgi_app = loadapp('config:' + INI_PATH)

httpserver.serve(wsgi_app, host='127.0.0.1', port=8080)
Paste Middleware Config
[pipeline:main]
pipeline = auth hello

[app:hello]
paste.app_factory = wsgi_webob_mid:app_factory

[filter:auth]
paste.filter_factory = wsgi_webob_mid:filter_factory
Glance API Server – the code
●
    Paste Config file
    ●
        etc/glance-api-config.py
●
    Glance API server startup
    ●
        glance/common/wsgi.py
    ●
        glance/api/v1/router.py
●
    Main glance api files
    ●
        glance/api/v1/images.py
Keystone middleware
●
    Authentication Token Verification
    ●
        keystone/middleware/auth_token.py
    ●
        WSGI middleware
    ●
        Contains filter factory
Details and Complexity
●
    Lots more to learn – but not tonight
    ●
        Pluggable OpenStack API Extensions
    ●
        Front ends and load balancing
    ●
        Threading and concurrency
    ●
        URL mapping and dispatch
References
●   OpenStack
    ●   http://www.openstack.org
●   WSGI
    ●   http://www.wsgi.org
●   Paste Web Server
    ●   http://pythonpaste.org/
●   WebOb
    ●   http://www.webob.org/
●   P3333 (WSGI)
    ●   http://www.python.org/dev/peps/pep-3333/
●   HTTP RFC 2616
    ●   http://www.ietf.org/rfc/rfc2616.txt
●   RESTful Web Services (Book)
    ●   http://shop.oreilly.com/product/9780596529260.do

More Related Content

What's hot

Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Romana Project
 
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개OpenStack Korea Community
 
Cobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioningCobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioningRUDDER
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-RegionJi-Woong Choi
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX, Inc.
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep DiveDocker, Inc.
 
IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101HungWei Chiu
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discoveryDocker, Inc.
 
The Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitchThe Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitchTe-Yen Liu
 
OpenStack Neutron Tutorial
OpenStack Neutron TutorialOpenStack Neutron Tutorial
OpenStack Neutron Tutorialmestery
 
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...Vietnam Open Infrastructure User Group
 
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...Vietnam Open Infrastructure User Group
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes NetworkingCJ Cullen
 
AvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregateAvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregateHiroki Ishikawa
 
[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdfJo Hoon
 
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화OpenStack Korea Community
 

What's hot (20)

Neutron packet logging framework
Neutron packet logging frameworkNeutron packet logging framework
Neutron packet logging framework
 
Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
[OpenInfra Days Korea 2018] (Track 2) Neutron LBaaS 어디까지 왔니? - Octavia 소개
 
Cobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioningCobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioning
 
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
[오픈소스컨설팅] Open Stack Ceph, Neutron, HA, Multi-Region
 
Deploying IPv6 on OpenStack
Deploying IPv6 on OpenStackDeploying IPv6 on OpenStack
Deploying IPv6 on OpenStack
 
NGINX: Basics and Best Practices
NGINX: Basics and Best PracticesNGINX: Basics and Best Practices
NGINX: Basics and Best Practices
 
Docker Networking Deep Dive
Docker Networking Deep DiveDocker Networking Deep Dive
Docker Networking Deep Dive
 
IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101IP Virtual Server(IPVS) 101
IP Virtual Server(IPVS) 101
 
Deep dive in container service discovery
Deep dive in container service discoveryDeep dive in container service discovery
Deep dive in container service discovery
 
The Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitchThe Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitch
 
OpenStack Neutron Tutorial
OpenStack Neutron TutorialOpenStack Neutron Tutorial
OpenStack Neutron Tutorial
 
Podman rootless containers
Podman rootless containersPodman rootless containers
Podman rootless containers
 
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...
Room 1 - 6 - Trần Quốc Sang - Autoscaling for multi cloud platform based on S...
 
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...
Room 1 - 7 - Lê Quốc Đạt - Upgrading network of Openstack to SDN with Tungste...
 
Kubernetes Networking
Kubernetes NetworkingKubernetes Networking
Kubernetes Networking
 
AvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregateAvailabilityZoneとHostAggregate
AvailabilityZoneとHostAggregate
 
[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf[GitOps] Argo CD on GKE (v0.9.2).pdf
[GitOps] Argo CD on GKE (v0.9.2).pdf
 
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
[OpenStack 하반기 스터디] Docker를 이용한 OpenStack 가상화
 

Viewers also liked

Inside neutron 2
Inside neutron 2Inside neutron 2
Inside neutron 2Robin Gong
 
Python WSGI introduction
Python WSGI introductionPython WSGI introduction
Python WSGI introductionAgeeleshwar K
 
Logisland "Event Mining at scale"
Logisland "Event Mining at scale"Logisland "Event Mining at scale"
Logisland "Event Mining at scale"Thomas Bailet
 
OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告Akira Yoshiyama
 
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...OPNFV
 
OPNFV: Overview and Approach to Upstream Integration
OPNFV: Overview and Approach to Upstream IntegrationOPNFV: Overview and Approach to Upstream Integration
OPNFV: Overview and Approach to Upstream IntegrationOPNFV
 
How to write a Neutron Plugin - if you really need to
How to write a Neutron Plugin - if you really need toHow to write a Neutron Plugin - if you really need to
How to write a Neutron Plugin - if you really need tosalv_orlando
 
OpenStack networking - Neutron deep dive with PLUMgrid
OpenStack networking - Neutron deep dive with PLUMgridOpenStack networking - Neutron deep dive with PLUMgrid
OpenStack networking - Neutron deep dive with PLUMgridKamesh Pemmaraju
 
PNDA - Platform for Network Data Analytics
PNDA - Platform for Network Data AnalyticsPNDA - Platform for Network Data Analytics
PNDA - Platform for Network Data AnalyticsJohn Evans
 
PaNDA - a platform for Network Data Analytics: an overview
PaNDA - a platform for Network Data Analytics: an overviewPaNDA - a platform for Network Data Analytics: an overview
PaNDA - a platform for Network Data Analytics: an overviewCisco DevNet
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack ArchitectureMirantis
 

Viewers also liked (14)

OpenStack API
OpenStack APIOpenStack API
OpenStack API
 
Inside neutron 2
Inside neutron 2Inside neutron 2
Inside neutron 2
 
Python WSGI introduction
Python WSGI introductionPython WSGI introduction
Python WSGI introduction
 
Logisland "Event Mining at scale"
Logisland "Event Mining at scale"Logisland "Event Mining at scale"
Logisland "Event Mining at scale"
 
OpenStack hyeroglyphs
OpenStack hyeroglyphsOpenStack hyeroglyphs
OpenStack hyeroglyphs
 
OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告OpenStack Summit in Hong Kong 参加報告
OpenStack Summit in Hong Kong 参加報告
 
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...
Summit 16: Providing Root Cause Analysis to OPNFV Using Pinpoint -the A-CORD ...
 
OpenStack の利用
OpenStack の利用OpenStack の利用
OpenStack の利用
 
OPNFV: Overview and Approach to Upstream Integration
OPNFV: Overview and Approach to Upstream IntegrationOPNFV: Overview and Approach to Upstream Integration
OPNFV: Overview and Approach to Upstream Integration
 
How to write a Neutron Plugin - if you really need to
How to write a Neutron Plugin - if you really need toHow to write a Neutron Plugin - if you really need to
How to write a Neutron Plugin - if you really need to
 
OpenStack networking - Neutron deep dive with PLUMgrid
OpenStack networking - Neutron deep dive with PLUMgridOpenStack networking - Neutron deep dive with PLUMgrid
OpenStack networking - Neutron deep dive with PLUMgrid
 
PNDA - Platform for Network Data Analytics
PNDA - Platform for Network Data AnalyticsPNDA - Platform for Network Data Analytics
PNDA - Platform for Network Data Analytics
 
PaNDA - a platform for Network Data Analytics: an overview
PaNDA - a platform for Network Data Analytics: an overviewPaNDA - a platform for Network Data Analytics: an overview
PaNDA - a platform for Network Data Analytics: an overview
 
OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 

Similar to OpenStack API's and WSGI

how to use openstack api
how to use openstack apihow to use openstack api
how to use openstack apiLiang Bo
 
NTT SIC marketplace slide deck at Tokyo Summit
NTT SIC marketplace slide deck at Tokyo SummitNTT SIC marketplace slide deck at Tokyo Summit
NTT SIC marketplace slide deck at Tokyo SummitToshikazu Ichikawa
 
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformBackend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformAlvaro Viebrantz
 
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformBackend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformDevMT
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaSAppsembler
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Puppet
 
DEVNET-1136 Cisco ONE Enterprise Cloud Suite for Infrastructure Management.
DEVNET-1136	Cisco ONE Enterprise Cloud Suite for Infrastructure Management.DEVNET-1136	Cisco ONE Enterprise Cloud Suite for Infrastructure Management.
DEVNET-1136 Cisco ONE Enterprise Cloud Suite for Infrastructure Management.Cisco DevNet
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek PROIDEA
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackJakub Hajek
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop OverviewShubhra Kar
 
Zaragoza dev ops-activiti-khd-20181212
Zaragoza dev ops-activiti-khd-20181212Zaragoza dev ops-activiti-khd-20181212
Zaragoza dev ops-activiti-khd-20181212Angel Borroy López
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...NGINX, Inc.
 
Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationReal World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationBen Hall
 
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...Pierre GRANDIN
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCLFastly
 
使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster 使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster inwin stack
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefMatt Ray
 
Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1Yongyoon Shin
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법Open Source Consulting
 

Similar to OpenStack API's and WSGI (20)

how to use openstack api
how to use openstack apihow to use openstack api
how to use openstack api
 
NTT SIC marketplace slide deck at Tokyo Summit
NTT SIC marketplace slide deck at Tokyo SummitNTT SIC marketplace slide deck at Tokyo Summit
NTT SIC marketplace slide deck at Tokyo Summit
 
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformBackend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
 
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud PlatformBackend, app e internet das coisas com NodeJS no Google Cloud Platform
Backend, app e internet das coisas com NodeJS no Google Cloud Platform
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
 
DEVNET-1136 Cisco ONE Enterprise Cloud Suite for Infrastructure Management.
DEVNET-1136	Cisco ONE Enterprise Cloud Suite for Infrastructure Management.DEVNET-1136	Cisco ONE Enterprise Cloud Suite for Infrastructure Management.
DEVNET-1136 Cisco ONE Enterprise Cloud Suite for Infrastructure Management.
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
Zaragoza dev ops-activiti-khd-20181212
Zaragoza dev ops-activiti-khd-20181212Zaragoza dev ops-activiti-khd-20181212
Zaragoza dev ops-activiti-khd-20181212
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
 
Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationReal World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS Application
 
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...
Openstack Summit Tokyo 2015 - Building a private cloud to efficiently handle ...
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
Angular2 inter3
Angular2 inter3Angular2 inter3
Angular2 inter3
 
使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster 使用 Prometheus 監控 Kubernetes Cluster
使用 Prometheus 監控 Kubernetes Cluster
 
Bare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and ChefBare Metal to OpenStack with Razor and Chef
Bare Metal to OpenStack with Razor and Chef
 
Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 

Recently uploaded

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
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
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
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
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
 
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
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 

Recently uploaded (20)

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...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
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)
 
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
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 

OpenStack API's and WSGI

  • 1. OpenStack API's and WSGI http://github.com/lhrc-mikeyp/Presentations Mike Pittaro La Honda Research Center mikeyp@LaHondaResearch.org @pmikeyp This work is licensed under the Creative Commons Attribution- NonCommercial-ShareAlike 3.0 Unported License.
  • 2. Introduction ● Taking a peek under the hood of OpenStack ● From the API inwards ● Prerequisites ● A basic understanding of Web, REST, and HTTP ● Some knowledge of Python ● Why learn this ? ● Understand OpenStack's API implementation ● Easier to understand and troubleshoot ● First step to modifying OpenStack ● First step to extending API's
  • 3. How Deep is a 'peek' ? ● Everything should be made as simple as possible, but not simpler. ● Albert Enistein ● Simple is Better than Complex ● Complex is better than Complicated ● PEP 20
  • 4. What is OpenStack ? ● OpenStack is a global collaboration of developers and cloud computing technologists producing the ubiquitous open source cloud computing platform for public and private clouds. ● The project aims to deliver solutions for all types of clouds by being simple to implement, massively scalable, and feature rich. ● The technology consists of a series of interrelated projects delivering various components for a cloud infrastructure solution.
  • 5. How is OpenStack Implemented? ● OpenStack is a collection of services ● Compute (Nova) ● Identity (Keystone) ● Object Storage (Swift) ● Dashboard (Horizon) ● Image Service (Glance) ● Each service is a 'WebApp' ● REST API server ('frontend') ● One or more backend servers ● Messaging interface between them
  • 6. OpenStack API's ● All Interaction with OpenStack is via API's ● http://docs.openstack.org/api/ ● http://api.openstack.org/ ● API QuickStart ● http://docs.openstack.org/api/quick-start/content/ ● The API's use HTTP + json (or xml) ● Use curl or wget or browser plugins ● Use any programming language via HTTP libraries ● Use the Python novaclient library
  • 7. OpenStack In Action ● OpenStack includes a nova command ● It's built using the novaclient library mikeyp@blade1:devstack$ nova --username admin --password devstack image-list +--------------------------------------+--------------------------------------------+--------+--------+ | ID | Name | Status | Server | +--------------------------------------+--------------------------------------------+--------+--------+ | 43bafe10-700c-45af-90a8-b5d794812e62 | cirros-0.3.0-x86_64-blank-ramdisk | ACTIVE | | | 45ad4046-9780-4968-83c6-460f168321c7 | cirros-0.3.0-x86_64-blank-kernel | ACTIVE | | | 6216fc7c-7f87-45e0-be0f-eefef2d5be33 | ttylinux-uec-amd64-11.2_2.6.35-15_1 | ACTIVE | | | 92a1e0bd-c4a5-4f3f-a66f-1f8b990f2b0e | ttylinux-uec-amd64-11.2_2.6.35-15_1-kernel | ACTIVE | | | 95d8db11-b175-43d2-b3de-d7b806e54dde | cirros-0.3.0-x86_64-blank | ACTIVE | | | e543bb77-5a7d-4ef0-9a7a-92ca6c8a0b35 | cirros-0.3.0-x86_64-rootfs | ACTIVE | | +--------------------------------------+--------------------------------------------+--------+--------+ mikeyp@blade1:devstack$ nova flavor-list +----+-----------+-----------+------+-----------+------+-------+-------------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | +----+-----------+-----------+------+-----------+------+-------+-------------+ | 1 | m1.tiny | 512 | 0 | 0 | | 1 | 1.0 | | 2 | m1.small | 2048 | 10 | 20 | | 1 | 1.0 | | 3 | m1.medium | 4096 | 10 | 40 | | 2 | 1.0 | | 4 | m1.large | 8192 | 10 | 80 | | 4 | 1.0 | | 5 | m1.xlarge | 16384 | 10 | 160 | | 8 | 1.0 | +----+-----------+-----------+------+-----------+------+-------+-------------+
  • 8. Using novaclient #!/usr/bin/env python import logging import novaclient from novaclient.v1_1 import client # enable debug logging logger = logging.getLogger('novaclient.client') logger.setLevel(logging.DEBUG) debug_stream = logging.StreamHandler() logger.addHandler(debug_stream) auth_url = 'http://10.100.20.22:5000/v2.0' user = 'admin' password = 'devstack' project = 'demo' region = 'RegionOne' service = 'compute' nova = client.Client(user, password, project, auth_url, region_name=region, service_type=service) results = nova.images.list(detailed=True) for image in results: print image.id, image.name, image.status mikeyp@blade1:api_examples$ python image_list.py e543bb77-5a7d-4ef0-9a7a-92ca6c8a0b35 cirros-0.3.0-x86_64-rootfs ACTIVE 95d8db11-b175-43d2-b3de-d7b806e54dde cirros-0.3.0-x86_64-blank ACTIVE 45ad4046-9780-4968-83c6-460f168321c7 cirros-0.3.0-x86_64-blank-kernel ACTIVE 43bafe10-700c-45af-90a8-b5d794812e62 cirros-0.3.0-x86_64-blank-ramdisk ACTIVE 92a1e0bd-c4a5-4f3f-a66f-1f8b990f2b0e ttylinux-uec-amd64-11.2_2.6.35-15_1-kernel ACTIVE 6216fc7c-7f87-45e0-be0f-eefef2d5be33 ttylinux-uec-amd64-11.2_2.6.35-15_1 ACTIVE
  • 9. Keystone API using urllib2 def get_keystone_token(): """authenticate against keystone identity service returns an auth token, and the service url """ user = 'admin' password = 'devstack' project = 'demo' auth_url = 'http://10.100.20.22:5000/v2.0/tokens' auth_request = urllib2.Request(auth_url) auth_request.add_header('Content-Type', 'application/json;charset=utf8') auth_request.add_header('Accept', 'application/json') auth_request.add_header('User-Agent', 'python-mikeyp') auth_data = {"auth": {"tenantName": project, "passwordCredentials": { "username": user, "password": password} } } auth_request.add_data(json.dumps(auth_data)) auth_response = urllib2.urlopen(auth_request) response_data = json.loads(auth_response.read()) token = response_data['access']['token']['id'] service_list = response_data['access']['serviceCatalog'] for s in service_list: if s['type'] == 'compute' and s['name'] == "'Compute Service'": break nova_url = s['endpoints'][0]['publicURL'] return (token, nova_url)
  • 10. Images API using urllib2 #!/usr/bin/env python import urllib2 import json # def get_keystone_token(): # see previous page token, service_url = get_keystone_token() image_api = service_url + '/images/detail' images_request = urllib2.Request(image_api) images_request.add_header('Content-Type', 'application/json;charset=utf8') images_request.add_header('Accept', 'application/json') images_request.add_header('User-Agent', 'python-mikeyp') images_request.add_header('X-Auth-Token', token) images_request.add_header('X-Auth-Project-Id', 'demo') image_response = urllib2.urlopen(images_request) image_data = json.loads(image_response.read()) print json.dumps(image_data, indent=4)
  • 12. OpenStack 'Web Stack' ● Paste HTTP Server ● HTTP protocol + networking ● WebOb requests and responses ● Wrappers for HTTP Requests and Responses ● OpenStack code ● Nova, glance, keystone, etc ● Web Service Gateway Interface (WSGI) ● The specification for web servers and applications ● WSGI is not code – no import
  • 13. WSGI In a Nutshell ● WSGI Application ● A Python callable passed two arguments: – WSGI Environment – A start_response function ● Application calls start_response, and returns response ● WSGI Server ● The Server calls the application ● WSGI Middleware ● Both a server and application ● Use to 'wrap' or 'pipeline' requests
  • 14. Simple WSGI Application """Hello World using Paste + WSGI """ from paste import httpserver def application(environ, start_response): start_response('200 OK', [('Content-type', 'text/html')]) return ['Hello World'] httpserver.serve(application, host='127.0.0.1', port=8080)
  • 15. WSGI With WebOb + Paste wsgi_webob.py """Hello World using WebOb, Paste + WSGI """ from webob import Response from webob.dec import wsgify from paste import httpserver from paste.deploy import loadapp INI_PATH = '/home/mikeyp/Documents/Projects/OpenStack/presentations/api_examples/wsgi_webob.ini' @wsgify def application(request): return Response('Hello, World of WebOb !') def app_factory(global_config, **local_config): return application wsgi_app = loadapp('config:' + INI_PATH) httpserver.serve(wsgi_app, host='127.0.0.1', port=8080) wsgi_webob_ini.py [app:main] paste.app_factory = wsgi_webob:app_factory
  • 16. WSGI middleware """Hello World (authorized version) using WebOb, Paste + WSGI """ from webob import Response from webob.dec import wsgify from webob import exc from paste import httpserver from paste.deploy import loadapp INI_PATH = '/home/mikeyp/Documents/Projects/OpenStack/presentations/api_examples/wsgi_webob_mid.ini' @wsgify def application(request): return Response('Hello, Secret World of WebOb !') @wsgify.middleware def auth_filter(request, app): if request.headers.get('X-Auth-Token') != 'open-sesame': return exc.HTTPForbidden() return app(request) def app_factory(global_config, **local_config): return application def filter_factory(global_config, **local_config): return auth_filter wsgi_app = loadapp('config:' + INI_PATH) httpserver.serve(wsgi_app, host='127.0.0.1', port=8080)
  • 17. Paste Middleware Config [pipeline:main] pipeline = auth hello [app:hello] paste.app_factory = wsgi_webob_mid:app_factory [filter:auth] paste.filter_factory = wsgi_webob_mid:filter_factory
  • 18. Glance API Server – the code ● Paste Config file ● etc/glance-api-config.py ● Glance API server startup ● glance/common/wsgi.py ● glance/api/v1/router.py ● Main glance api files ● glance/api/v1/images.py
  • 19. Keystone middleware ● Authentication Token Verification ● keystone/middleware/auth_token.py ● WSGI middleware ● Contains filter factory
  • 20. Details and Complexity ● Lots more to learn – but not tonight ● Pluggable OpenStack API Extensions ● Front ends and load balancing ● Threading and concurrency ● URL mapping and dispatch
  • 21. References ● OpenStack ● http://www.openstack.org ● WSGI ● http://www.wsgi.org ● Paste Web Server ● http://pythonpaste.org/ ● WebOb ● http://www.webob.org/ ● P3333 (WSGI) ● http://www.python.org/dev/peps/pep-3333/ ● HTTP RFC 2616 ● http://www.ietf.org/rfc/rfc2616.txt ● RESTful Web Services (Book) ● http://shop.oreilly.com/product/9780596529260.do