2 from types import StringTypes
3 from plstackapi.openstack.client import OpenStackClient
4 from plstackapi.openstack.driver import OpenStackDriver
5 from plstackapi.core.api.auth import auth_check
6 from plstackapi.core.models import Slice
7 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 login_base = fields['name'][:fields['name'].find('_')]
26 sites = _get_sites(login_base)
27 if sites: fields['site'] = sites[0]
28 slice = Slice(**fields)
31 nova_fields = {'tenant_name': slice.name,
32 'description': slice.description,
33 'enabled': slice.enabled}
34 tenant = driver.create_tenant(**nova_fields)
35 slice.tenant_id=tenant.id
38 network = driver.create_network(slice.name)
39 slice.network_id = network['id']
42 router = driver.create_router(slice.name)
43 slice.router_id = router['id']
48 def update_slice(auth, id, **fields):
49 driver = OpenStackDriver(client = auth_check(auth))
50 slices = _get_slices(id)
58 nova_fields['tenant_name'] = fields['name']
59 if 'description' in fields:
60 nova_fields['description'] = fields['description']
61 if 'enabled' in fields:
62 nova_fields['enabled'] = fields['enabled']
63 driver.update_tenant(slice.tenant_id, **nova_fields)
66 sites = _get_sites(fields.get('site'))
67 if sites: fields['site'] = sites[0]
68 slice.update(**fields)
72 def delete_slice(auth, filter={}):
73 driver = OpenStackDriver(client = auth_check(auth))
74 slices = _get_slices(id)
76 driver.delete_network(slice.network_id)
77 driver.delete_router(slice.router_id)
78 driver.delete_slice(id=slice.tenant_id)
82 def get_slices(auth, filter={}):
83 client = auth_check(auth)
85 sites = _get_sites(filter.get('site'))
86 if sites: filter['site'] = sites[0]
87 slices = _get_slices(filter)