2 from types import StringTypes
3 from django.contrib.auth import authenticate
4 from openstack.client import OpenStackClient
5 from openstack.driver import OpenStackDriver
6 from core.api.auth import auth_check
7 from core.models import Slice
8 from core.api.sites import _get_sites
10 def _get_slices(filter):
11 if isinstance(filter, StringTypes) and filter.isdigit():
13 if isinstance(filter, int):
14 slices = Slice.objects.filter(id=filter)
15 elif isinstance(filter, StringTypes):
16 slices = Slice.objects.filter(name=filter)
17 elif isinstance(filter, dict):
18 slices = Slice.objects.filter(**filter)
24 def add_slice(auth, fields):
25 driver = OpenStackDriver(client = auth_check(auth))
26 login_base = fields['name'][:fields['name'].find('_')]
27 sites = _get_sites(login_base)
28 if sites: fields['site'] = sites[0]
29 slice = Slice(**fields)
32 nova_fields = {'tenant_name': slice.name,
33 'description': slice.description,
34 'enabled': slice.enabled}
35 tenant = driver.create_tenant(**nova_fields)
36 slice.tenant_id=tenant.id
39 network = driver.create_network(slice.name)
40 slice.network_id = network['id']
43 router = driver.create_router(slice.name)
44 slice.router_id = router['id']
49 def update_slice(auth, id, **fields):
50 driver = OpenStackDriver(client = auth_check(auth))
51 slices = _get_slices(id)
59 nova_fields['tenant_name'] = fields['name']
60 if 'description' in fields:
61 nova_fields['description'] = fields['description']
62 if 'enabled' in fields:
63 nova_fields['enabled'] = fields['enabled']
64 driver.update_tenant(slice.tenant_id, **nova_fields)
67 sites = _get_sites(fields.get('site'))
68 if sites: fields['site'] = sites[0]
69 slice.update(**fields)
73 def delete_slice(auth, filter={}):
74 driver = OpenStackDriver(client = auth_check(auth))
75 slices = _get_slices(id)
77 driver.delete_network(slice.network_id)
78 driver.delete_router(slice.router_id)
79 driver.delete_slice(id=slice.tenant_id)
83 def get_slices(auth, filter={}):
84 user = authenticate(username=auth.get('username'),
85 password=auth.get('password'))
87 sites = _get_sites(filter.get('site'))
88 if sites: filter['site'] = sites[0]
89 slices = _get_slices(filter)