Actualizado el 21 de Marzo del 2018 (Publicado el 6 de Noviembre del 2017)
724 visualizaciones desde el 6 de Noviembre del 2017
186,8 KB
6 paginas
Creado hace 11a (06/11/2012)
Utilizaci´on de las APIs de OpenStack
Proyecto de Innovaci´on
.
Implantaci´on y puesta a punto de la infraestructura
de un cloud computing privado para el despliegue de
servicios en la nube
IES Gonzalo Nazareno
Dos Hermanas (Sevilla)
IES Los Albares
Cieza (Murcia)
IES La Campi˜na
Arahal (Sevilla)
IES Ingeniero de la Cierva
Murcia
REST (RESTful web API)
• Representational State Transfer (REST)
• Utilizado masivamente en Internet para la transferencia autom´atica
y controlada de informaci´on
• Utiliza HTTP para la comunicaci´on entre el cliente y el servidor
• Se define una URI base en el servidor
• Comunicaci´on entre cliente y servidor:
◦ El cliente realiza una petici´on HTTP (GET, POST, PUT o DELETE)
◦ El servidor contesta con un mensaje en un determinado formato (los
m´as usados son XML y JSON)
• Es m´as sencillo de implementar que otro protocolos como SOAP y
est´a utiliz´andose de forma muy amplia
• Google code, Yahoo Developer Network, twitter API, . . .
2 de 6
APIs de OpenStack
• Los diferentes servicios de OpenStack se comunican entre
s´ı mediante APIs RESTful
• Para cada API se define una URL:
keystone http://192.168.222.1:5000/v2.0
glance http://192.168.222.1:9292/v1
Compute http://192.168.222.1:8774/v2
Volume http://192.168.222.1:8776/v1
EC2 http://192.168.222.1:8773/services/Cloud
• Algunos servicios distinguen entre URL para administrar, red
privada y red p´ublica
• Estas URLs se especifican durante la configuraci´on de keystone
• La descripci´on de los m´etodos de cada API est´an disponibles en
http://api.openstack.org
3 de 6
Ejemplo de utilizaci´on
• Los propios clientes de OpenStack de l´ınea de comandos utilizan
las respectivas APIS:
$ nova -- debug list
connect : (172.22.222.1 , 5000)
send : ’ POST / v2 .0/ tokens HTTP /1.1\ r \ nHost : 1 7 2 . 2 2 . 2 2 2 . 1 : 5 0 0 0 \ r \ nContent - Length :124
\ r \ ncontent - type : a p p l i c a t i o n / json \ r \ naccept - e n c o d i n g : gzip , deflate \ r \ naccept : ap
p l i c a t i o n / json \ r \ nuser - agent : python - n o v a c l i e n t \ r \ n \ r \ n {" auth ": {" t e n a n t N a m e ": " te
st " , " p a s s w o r d C r e d e n t i a l s ": {" u s e r n a m e ": " user " , " p a s s w o r d ": " t e s t p a s s "}}} ’
reply : ’ HTTP /1.1 200 OK \ r \ n ’
connect : (172.22.222.1 , 8774)
send : u ’ GET / v2 / a a a a a a a a 5 8 9 4 4 7 3 c 8 a 9 8 f 8 9 a 8 9 5 c 6 b 2 c / servers / detail HTTP /1.1\ r \ nHost :
1 7 2 . 2 2 . 2 2 2 . 1 : 8 7 7 4 \ r \ nx - auth - project - id : test \ r \ nx - auth - token : e 9 2 3 3 f e f 4 c e 3 4 e e 4 9 f 7 d
b 1 a a a a a a a 1 3 f \ r \ naccept - e n c o d i n g : gzip , deflate \ r \ naccept : a p p l i c a t i o n / json \ r \ nuser
- agent : python - n o v a c l i e n t \ r \ n \ r \ n ’
reply : ’ HTTP /1.1 200 OK \ r \ n ’
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ - - - - - - - -+ - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+
|
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ - - - - - - - -+ - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+
| V E R I F Y _ R E S I Z E | vlan5 = 1 0 . 0 . 5 . 6 |
| b1724bd0 -34 f4 -4 bf1 -9444 -110 e b 3 5 3 1 6 0 2 | demo9
| e82814aa - fb1d -4 c29 -81 ab - c 3 9 f 9 9 1 8 4 4 1 3 | demo10 | ACTIVE
| vlan5 = 1 0 . 0 . 5 . 3 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ - - - - - - - -+ - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+
N e t w o r k s
Status
ID
|
Name
|
|
4 de 6
Ejemplo de aplicaci´on propia
# !/ usr / bin / python
# -* - coding : utf -8 -* -
import r e q u e s t s
import json
from getpass import getpass
import C o n f i g P a r s e r
def o b t e n e r _ t o k e n ( url , user , passwd ):
"""
Recibe usuario y p a s s w o r d de K e y s t o n e y d e v u e l v e el token de sesion
"""
c a b e c e r a 1 = { ’ Content - type ’: ’ a p p l i c a t i o n / json ’}
datos = ’ {" auth ":{" p a s s w o r d C r e d e n t i a l s ":{" u s e r n a m e ": " %s " , " p a s s w o r d ": \
" %s "} , " t e n a n t N a m e ":" service "}} ’ % ( user , passwd )
s o l i c i t u d = r e q u e s t s . post ( url + ’ tokens ’ , headers = cabecera1 , data = datos )
if s o l i c i t u d . s t a t u s _ c o d e == 200:
token = json . loads ( s o l i c i t u d . text )[ " access " ][ " token " ][ " id " ]
return token
url = config . get ( " k e y s t o n e " ," url " )
while True :
a d m i n u s e r = r a w _ i n p u t ( " Usuario de K e y s t o n e : " )
a d m i n p a s s = getpass ( " P a s s w o r d : " )
a d m i n t o k e n = o b t e n e r _ t o k e n ( url , adminuser , a d m i n p a s s )
if len ( a d m i n t o k e n ) != 0:
break
5 de 6
El ecosistema
• La utilizaci´on de APIs propicia la creaci´on de muchas aplicaciones
no oficiales
• Es muy f´acil comunicarse con cualquier componente de OpenStack,
por lo que cualquiera puede implementar una funcionalidad nueva,
automatizar procesos o hacer aplicaciones completas.
• Ejemplos: ceilometer, moniker, heat, . . .
• La filosof´ıa abierta y libre de OpenStack hace que algunas de estas
• Estilo OpenStack:
aplicaciones se incluyan posteriormente en la versi´on oficial
(quantum en Folsom o ceilometer en Grizzly)
◦ Python
◦ API
◦ Integraci´on continua (jenkins)
◦ Licencia Apache
◦ Github
6 de 6
Comentarios de: Utilización de las APIs de OpenStack (0)
No hay comentarios