1 from plstackapi.openstack.client import OpenStackClient
2 from plstackapi.openstack.driver import OpenStackDriver
3 from plstackapi.core.api.auth import auth_check
4 from plstackapi.core.models import Site
6 def lookup_site(fields):
9 if isinstance(fields['site'], int):
10 sites = Site.objects.filter(id=fields['site'])
12 sites = Site.objects.filter(login_base=fields['site'])
16 raise Exception, "No such site: %s" % fields['site']
19 def add_slice(auth, fields):
20 driver = OpenStackDriver(client = auth_check(auth))
21 site = lookup_site(fields)
22 if site: fields['site'] = site
23 slice = Slice(**fields)
25 nova_fields = {'tenant_name': slice.name,
26 'description': slice.description,
27 'enabled': slice.enabled}
28 tenant = driver.create_tenant(**nova_fields)
29 slice.tenant_id=tenant.id
32 network = driver.create_network(name=self.name)
33 self.network_id = network['id']
36 router = driver.create_router(name=self.name)
37 self.router_id = router['id']
42 def update_slice(auth, id, **fields):
43 driver = OpenStackDriver(client = auth_check(auth))
44 slices = Slice.objects.filter(id=id)
52 nova_fields['tenant_name'] = fields['name']
53 if 'description' in fields:
54 nova_fields['description'] = fields['description']
55 if 'enabled' in fields:
56 nova_fields['enabled'] = fields['enabled']
57 driver.update_tenant(slice.tenant_id, **nova_fields)
60 site = lookup_site(fields)
61 if site: fields['site'] = site
62 slice.update(**fields)
66 def delete_slice(auth, filter={}):
67 driver = OpenStackDriver(client = auth_check(auth))
68 slices = Slice.objects.filter(**filter)
70 driver.delete_slice(id=slice.tenant_id)
74 def get_slices(auth, filter={}):
75 client = auth_check(auth)
76 site = lookup_site(fields)
77 if site: fields['site'] = site
78 slices = Slice.objects.filter(**filter)