blob: bfbc4d981666cdb58d02f56e94b99c43746ef822 [file] [log] [blame]
Tony Mack5df6c552013-04-11 21:24:17 -04001from types import StringTypes
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):
Tony Mack5df6c552013-04-11 21:24:17 -040010 if isinstance(filter, StringTypes) and filter.isdigit():
11 filter = int(filter)
Tony Mack29c287f2013-04-11 21:07:16 -040012 if isinstance(filter, int):
13 slices = Slice.objects.filter(id=filter)
14 elif isinstance(filter, StringTypes):
15 slices = Slice.objects.filter(name=filter)
Tony Mack5df6c552013-04-11 21:24:17 -040016 elif isinstance(filter, dict):
Tony Mack29c287f2013-04-11 21:07:16 -040017 slices = Slice.objects.filter(**filter)
18 else:
19 slices = []
20 return slices
21
Tony Mack3a1af412013-04-09 22:36:27 -040022
Tony Mack3a1af412013-04-09 22:36:27 -040023def add_slice(auth, fields):
24 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040025 sites = _get_sites(fields.get('site'))
26 if sites: fields['site'] = sites[0]
Tony Mack3a1af412013-04-09 22:36:27 -040027 slice = Slice(**fields)
28 # create tenant
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
34
35 # create network
Tony Mack53c63342013-04-10 08:11:45 -040036 network = driver.create_network(slice.name)
Tony Mackd95d1aa2013-04-10 08:02:02 -040037 slice.network_id = network['id']
Tony Mack3a1af412013-04-09 22:36:27 -040038
39 # create router
Tony Mack53c63342013-04-10 08:11:45 -040040 router = driver.create_router(slice.name)
Tony Mackd95d1aa2013-04-10 08:02:02 -040041 slice.router_id = router['id']
Tony Mack3a1af412013-04-09 22:36:27 -040042
43 slice.save()
44 return slice
45
46def update_slice(auth, id, **fields):
47 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040048 slices = _get_slices(id)
Tony Mack3a1af412013-04-09 22:36:27 -040049 if not slices:
50 return
51
52 # update tenant
53 slice = slices[0]
54 nova_fields = {}
55 if 'name' in fields:
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)
62
63 # update db record
Tony Mack29c287f2013-04-11 21:07:16 -040064 sites = _get_sites(fields.get('site'))
65 if sites: fields['site'] = sites[0]
Tony Mack3a1af412013-04-09 22:36:27 -040066 slice.update(**fields)
67
68 return slice
69
70def delete_slice(auth, filter={}):
71 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack29c287f2013-04-11 21:07:16 -040072 slices = _get_slices(id)
Tony Mack3a1af412013-04-09 22:36:27 -040073 for slice in slices:
74 driver.delete_slice(id=slice.tenant_id)
75 slice.delete()
76 return 1
77
78def get_slices(auth, filter={}):
79 client = auth_check(auth)
Tony Mackd95d1aa2013-04-10 08:02:02 -040080 if 'site' in filter:
Tony Mack29c287f2013-04-11 21:07:16 -040081 sites = _get_sites(filter.get('site'))
82 if sites: filter['site'] = sites[0]
83 slices = _get_slices(filter)
Tony Mack3a1af412013-04-09 22:36:27 -040084 return slices
85
86
87