3 from snfOCCI.registry import snfRegistry
4 from snfOCCI.compute import ComputeBackend
6 from kamaki.clients.compute import ComputeClient
7 from kamaki.clients.cyclades import CycladesClient
8 from kamaki.config import Config
10 from occi.core_model import Mixin
11 from occi.backend import MixinBackend
12 from occi.extensions.infrastructure import COMPUTE, START, STOP, SUSPEND, RESTART, RESOURCE_TEMPLATE, OS_TEMPLATE
13 from occi.wsgi import Application
15 from wsgiref.simple_server import make_server
16 from wsgiref.validate import validator
21 class MyAPP(Application):
23 An OCCI WSGI application.
26 def __call__(self, environ, response):
29 #TODO up-to-date compute instances
32 # token will be represented in self.extras
33 return self._call_occi(environ, response, security = None, token = environ['HTTP_AUTH_TOKEN'])
36 if __name__ == '__main__':
38 APP = MyAPP(registry = snfRegistry())
40 COMPUTE_BACKEND = ComputeBackend()
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())
50 snf = ComputeClient(Config())
52 images = snf.list_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())
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'],
65 FLAVOR = Mixin("http://schemas.ogf.org/occi/infrastructure#", str(flavor['name']), [RESOURCE_TEMPLATE], attributes = FLAVOR_ATTRIBUTES)
66 APP.register_backend(FLAVOR, MixinBackend())
69 VALIDATOR_APP = validator(APP)
70 HTTPD = make_server('', 8888, VALIDATOR_APP)