blob: 731fa7567d1dd525cf579623882439e5c525a2b5 [file] [log] [blame]
Tony Mack67c6b1f2013-04-09 23:04:42 -04001import re
Tony Mack3a1af412013-04-09 22:36:27 -04002from plstackapi.openstack.client import OpenStackClient
3from plstackapi.openstack.driver import OpenStackDriver
4from plstackapi.core.api.auth import auth_check
Tony Mack29c287f2013-04-11 21:07:16 -04005from plstackapi.core.models import Slice
6from plstackapi.core.api.sites import _get_sites
7
8
9def _get_slices(filter):
10 if isinstance(filter, int):
11 slices = Slice.objects.filter(id=filter)
12 elif isinstance(filter, StringTypes):
13 slices = Slice.objects.filter(name=filter)
14 elif isinstance(filer, dict):
15 slices = Slice.objects.filter(**filter)
16 else:
17 slices = []
18 return slices
19
Tony Mack3a1af412013-04-09 22:36:27 -040020
Tony Mack3a1af412013-04-09 22:36:27 -040021def add_slice(auth, fields):
22 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040023 sites = _get_sites(fields.get('site'))
24 if sites: fields['site'] = sites[0]
Tony Mack3a1af412013-04-09 22:36:27 -040025 slice = Slice(**fields)
26 # create tenant
27 nova_fields = {'tenant_name': slice.name,
28 'description': slice.description,
29 'enabled': slice.enabled}
30 tenant = driver.create_tenant(**nova_fields)
31 slice.tenant_id=tenant.id
32
33 # create network
Tony Mack53c63342013-04-10 08:11:45 -040034 network = driver.create_network(slice.name)
Tony Mackd95d1aa2013-04-10 08:02:02 -040035 slice.network_id = network['id']
Tony Mack3a1af412013-04-09 22:36:27 -040036
37 # create router
Tony Mack53c63342013-04-10 08:11:45 -040038 router = driver.create_router(slice.name)
Tony Mackd95d1aa2013-04-10 08:02:02 -040039 slice.router_id = router['id']
Tony Mack3a1af412013-04-09 22:36:27 -040040
41 slice.save()
42 return slice
43
44def update_slice(auth, id, **fields):
45 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040046 slices = _get_slices(id)
Tony Mack3a1af412013-04-09 22:36:27 -040047 if not slices:
48 return
49
50 # update tenant
51 slice = slices[0]
52 nova_fields = {}
53 if 'name' in fields:
54 nova_fields['tenant_name'] = fields['name']
55 if 'description' in fields:
56 nova_fields['description'] = fields['description']
57 if 'enabled' in fields:
58 nova_fields['enabled'] = fields['enabled']
59 driver.update_tenant(slice.tenant_id, **nova_fields)
60
61 # update db record
Tony Mack29c287f2013-04-11 21:07:16 -040062 sites = _get_sites(fields.get('site'))
63 if sites: fields['site'] = sites[0]
Tony Mack3a1af412013-04-09 22:36:27 -040064 slice.update(**fields)
65
66 return slice
67
68def delete_slice(auth, filter={}):
69 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040070 slices = _get_slices(id)
Tony Mack3a1af412013-04-09 22:36:27 -040071 for slice in slices:
72 driver.delete_slice(id=slice.tenant_id)
73 slice.delete()
74 return 1
75
76def get_slices(auth, filter={}):
77 client = auth_check(auth)
Tony Mackd95d1aa2013-04-10 08:02:02 -040078 if 'site' in filter:
Tony Mack29c287f2013-04-11 21:07:16 -040079 sites = _get_sites(filter.get('site'))
80 if sites: filter['site'] = sites[0]
81 slices = _get_slices(filter)
Tony Mack3a1af412013-04-09 22:36:27 -040082 return slices
83
84
85