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

OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack ArchitectureMirantis
 
alphorm.com - Formation Linux LPIC-1/Comptia Linux+
alphorm.com - Formation Linux LPIC-1/Comptia Linux+alphorm.com - Formation Linux LPIC-1/Comptia Linux+
alphorm.com - Formation Linux LPIC-1/Comptia Linux+Alphorm
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여Ji-Woong Choi
 
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1Ji-Woong Choi
 
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022Stefano Stabellini
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveBin Chen
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardAnne Nicolas
 
Introduction of OpenStack cascading solution
Introduction of OpenStack cascading solutionIntroduction of OpenStack cascading solution
Introduction of OpenStack cascading solutionJoe Huang
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking ExplainedThomas Graf
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerSherif Mousa
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화OpenStack Korea Community
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPThomas Graf
 
Linux Kernel Image
Linux Kernel ImageLinux Kernel Image
Linux Kernel Image艾鍗科技
 
A Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry PiA Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry PiJian-Hong Pan
 

What's hot (20)

OpenStack Architecture
OpenStack ArchitectureOpenStack Architecture
OpenStack Architecture
 
alphorm.com - Formation Linux LPIC-1/Comptia Linux+
alphorm.com - Formation Linux LPIC-1/Comptia Linux+alphorm.com - Formation Linux LPIC-1/Comptia Linux+
alphorm.com - Formation Linux LPIC-1/Comptia Linux+
 
[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여[오픈소스컨설팅]오픈스택에 대하여
[오픈소스컨설팅]오픈스택에 대하여
 
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
OpenStack 인스턴스 간략 사용자_매뉴얼(liberty)_v1
 
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022System Device Tree and Lopper: Concrete Examples - ELC NA 2022
System Device Tree and Lopper: Concrete Examples - ELC NA 2022
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
 
Introduction of OpenStack cascading solution
Introduction of OpenStack cascading solutionIntroduction of OpenStack cascading solution
Introduction of OpenStack cascading solution
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking Explained
 
Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)Embedded Android : System Development - Part IV (Android System Services)
Embedded Android : System Development - Part IV (Android System Services)
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution Maker
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Automating with Ansible
Automating with AnsibleAutomating with Ansible
Automating with Ansible
 
Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0Alphorm.com Support de la formation Vmware Esxi 6.0
Alphorm.com Support de la formation Vmware Esxi 6.0
 
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
[OpenStack Days Korea 2016] Track1 - All flash CEPH 구성 및 최적화
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
 
Jenkins Pipelines
Jenkins PipelinesJenkins Pipelines
Jenkins Pipelines
 
Android Things : Building Embedded Devices
Android Things : Building Embedded DevicesAndroid Things : Building Embedded Devices
Android Things : Building Embedded Devices
 
Linux Kernel Image
Linux Kernel ImageLinux Kernel Image
Linux Kernel Image
 
A Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry PiA Journey to Boot Linux on Raspberry Pi
A Journey to Boot Linux on Raspberry Pi
 

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

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
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
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
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
 
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
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 

Recently uploaded (20)

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
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 New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
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
 
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
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 

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