blob: 33a02690ec11acf356c5bdefb1d86eab51bce4a2 [file] [log] [blame]
Tony Mack5df6c552013-04-11 21:24:17 -04001from types import StringTypes
Tony Mack29c287f2013-04-11 21:07:16 -04002from plstackapi.openstack.client import OpenStackClient
3from plstackapi.openstack.driver import OpenStackDriver
4from plstackapi.core.api.auth import auth_check
5from plstackapi.core.models import Subnet
6from plstackapi.core.api.slices import _get_slices
7
8def _get_subnets(filter):
Tony Mack5df6c552013-04-11 21:24:17 -04009 if isinstance(filter, StringTypes) and filter.isdigit():
10 filter = int(filter)
Tony Mack29c287f2013-04-11 21:07:16 -040011 if isinstance(filter, int):
12 subnets = Subnet.objects.filter(id=filter)
13 elif isinstance(filter, StringTypes):
14 subnets = Subnet.objects.filter(name=filter)
Tony Mack5df6c552013-04-11 21:24:17 -040015 elif isinstance(filter, dict):
Tony Mack29c287f2013-04-11 21:07:16 -040016 subnets = Subnet.objects.filter(**filter)
17 else:
18 subnets = []
19 return subnets
20
21def add_subnet(auth, fields):
22 driver = OpenStackDriver(client = auth_check(auth))
23 slices = _get_slice(fields.get('slice'))
24 if slices: fields['slice'] = slices[0]
25 subnet = Subnet(**fields)
26 # create quantum subnet
27 subnet = driver.create_subnet(network_name=subnet.name,
28 cidr_ip = subnet.cidr,
29 ip_version=subnet.ip_version,
30 start = subnet.start,
31 end = subnet.end,
32 dns_nameservers = ['8.8.8.8', '8.8.4.4'])
33
34 subnet.subnet_id=subnet.id
35
36 # add subnet as interface to slice's router
37 driver.add_router_interface(subnet.slice.router_id, subnet.subnet_id)
38
39 subnet.save()
40 return subnet
41
42def update_subnet(auth, subnet, **fields):
43 return
44
45def delete_subnet(auth, filter={}):
46 driver = OpenStackDriver(client = auth_check(auth))
47 subnets = Subnet.objects.filter(**filter)
48 for subnet in subnets:
49 driver.delete_router_interface(subnet.slice.router_id, subnet.subnet_id)
50 driver.delete_subnet(subnet.subnet_id)
51 subnet.delete()
52 return 1
53
54def get_subnets(auth, filter={}):
55 client = auth_check(auth)
56 if 'slice' in filter:
57 slice = _get_slice(filter.get('slice'))
58 if slice: filter['slice'] = slice
59 subnets = Subnet.objects.filter(**filter)
60 return subnets
61
62
63