1 from types import StringTypes
2 from plstackapi.openstack.client import OpenStackClient
3 from plstackapi.openstack.driver import OpenStackDriver
4 from plstackapi.core.api.auth import auth_check
5 from plstackapi.core.models import Slice
6 from plstackapi.core.api.sites import _get_sites
9 def _get_slices(filter):
10 if isinstance(filter, StringTypes) and filter.isdigit():
12 if isinstance(filter, int):
13 slices = Slice.objects.filter(id=filter)
14 elif isinstance(filter, StringTypes):
15 slices = Slice.objects.filter(name=filter)
16 elif isinstance(filter, dict):
17 slices = Slice.objects.filter(**filter)
23 def add_slice(auth, fields):
24 driver = OpenStackDriver(client = auth_check(auth))
25 sites = _get_sites(fields.get('site'))
26 if sites: fields['site'] = sites[0]
27 slice = Slice(**fields)
29 nova_fields = {'tenant_name': slice.name,
30 'description': slice.description,
31 'enabled': slice.enabled}
32 tenant = driver.create_tenant(**nova_fields)
33 slice.tenant_id=tenant.id
36 network = driver.create_network(slice.name)
37 slice.network_id = network['id']
40 router = driver.create_router(slice.name)
41 slice.router_id = router['id']
46 def update_slice(auth, id, **fields):
47 driver = OpenStackDriver(client = auth_check(auth))
48 slices = _get_slices(id)
56 nova_fields['tenant_name'] = fields['name']
57 if 'description' in fields:
58 nova_fields['description'] = fields['description']
59 if 'enabled' in fields:
60 nova_fields['enabled'] = fields['enabled']
61 driver.update_tenant(slice.tenant_id, **nova_fields)
64 sites = _get_sites(fields.get('site'))
65 if sites: fields['site'] = sites[0]
66 slice.update(**fields)
70 def delete_slice(auth, filter={}):
71 driver = OpenStackDriver(client = auth_check(auth))
72 slices = _get_slices(id)
74 driver.delete_slice(id=slice.tenant_id)
78 def get_slices(auth, filter={}):
79 client = auth_check(auth)
81 sites = _get_sites(filter.get('site'))
82 if sites: filter['site'] = sites[0]
83 slices = _get_slices(filter)