17ce9d1b439ad44c8e5eb74f312df53aa9844b91
[snf-occi] / snfOCCI / snf-occi-server.py
1 #!/usr/bin/env python
2
3 from snfOCCI.registry import snfRegistry
4 from snfOCCI.compute import ComputeBackend
5 from snfOCCI.config import SERVER_CONFIG
6
7 from kamaki.clients.compute import ComputeClient
8 from kamaki.clients.cyclades import CycladesClient
9 from kamaki.config  import Config
10
11 from occi.core_model import Mixin
12 from occi.backend import MixinBackend
13 from occi.extensions.infrastructure import COMPUTE, START, STOP, SUSPEND, RESTART, RESOURCE_TEMPLATE, OS_TEMPLATE
14 from occi.wsgi import Application
15
16 from wsgiref.simple_server import make_server
17 from wsgiref.validate import validator
18
19
20
21
22 class MyAPP(Application):
23     '''
24     An OCCI WSGI application.
25     '''
26
27     def __call__(self, environ, response):
28
29
30         #TODO up-to-date compute instances                
31
32
33         # token will be represented in self.extras
34         return self._call_occi(environ, response, security = None, token = environ['HTTP_AUTH_TOKEN'])
35
36
37 if __name__ == '__main__':
38
39     APP = MyAPP(registry = snfRegistry())
40     COMPUTE_BACKEND = ComputeBackend()
41
42     APP.register_backend(COMPUTE, COMPUTE_BACKEND)
43     APP.register_backend(START, COMPUTE_BACKEND)
44     APP.register_backend(STOP, COMPUTE_BACKEND)
45     APP.register_backend(RESTART, COMPUTE_BACKEND)
46     APP.register_backend(SUSPEND, COMPUTE_BACKEND)
47     APP.register_backend(RESOURCE_TEMPLATE, MixinBackend())
48     APP.register_backend(OS_TEMPLATE, MixinBackend())
49     
50     snf = ComputeClient(Config())
51
52     images = snf.list_images()
53     for image in images:
54         IMAGE_ATTRIBUTES = {'occi.core.id': str(image['id'])}
55         IMAGE = Mixin("http://schemas.ogf.org/occi/infrastructure#", str(image['name']), [OS_TEMPLATE], attributes = IMAGE_ATTRIBUTES)
56         APP.register_backend(IMAGE, MixinBackend())
57
58     flavors = snf.list_flavors()
59     for flavor in flavors:
60         FLAVOR_ATTRIBUTES = {'occi.core.id': flavor['id'],
61                              'occi.compute.cores': snf.get_flavor_details(flavor['id'])['cpu'],
62                              'occi.compute.memory': snf.get_flavor_details(flavor['id'])['ram'],
63                              'occi.storage.size': snf.get_flavor_details(flavor['id'])['disk'],
64                              }
65         FLAVOR = Mixin("http://schemas.ogf.org/occi/infrastructure#", str(flavor['name']), [RESOURCE_TEMPLATE], attributes = FLAVOR_ATTRIBUTES)
66         APP.register_backend(FLAVOR, MixinBackend())
67
68  
69     VALIDATOR_APP = validator(APP)
70     HTTPD = make_server('', SERVER_CONFIG['port'], VALIDATOR_APP)
71     HTTPD.serve_forever()
72