blob: ad1a87700bab79b10aceb96b82133904f6ed26a1 [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):
Tony Mack771f4b92013-04-12 01:49:57 -040014 # the name is the subnet's slice's name
15 slices = _get_slices(filter)
16 slice = None
17 if slices: slice=slices[0]
18 subnets = Subnet.objects.filter(slice=slice)
Tony Mack5df6c552013-04-11 21:24:17 -040019 elif isinstance(filter, dict):
Tony Mack29c287f2013-04-11 21:07:16 -040020 subnets = Subnet.objects.filter(**filter)
21 else:
22 subnets = []
23 return subnets
24
25def add_subnet(auth, fields):
26 driver = OpenStackDriver(client = auth_check(auth))
Tony Mack771f4b92013-04-12 01:49:57 -040027 slices = _get_slices(fields.get('slice'))
Tony Mack29c287f2013-04-11 21:07:16 -040028 if slices: fields['slice'] = slices[0]
29 subnet = Subnet(**fields)
30 # create quantum subnet
Tony Mack48952032013-04-12 11:49:34 -040031 quantum_subnet = driver.create_subnet(name= subnet.slice.name,
32 network_id=subnet.slice.network_id,
33 cidr_ip = subnet.cidr,
34 ip_version=subnet.ip_version,
35 start = subnet.start,
36 end = subnet.end)
37 subnet.subnet_id=quantum_subnet['id']
38 ## set dns servers
39 #driver.update_subnet(subnet.id, {'dns_nameservers': ['8.8.8.8', '8.8.4.4']})
Tony Mack29c287f2013-04-11 21:07:16 -040040
41 # add subnet as interface to slice's router
42 driver.add_router_interface(subnet.slice.router_id, subnet.subnet_id)
43
44 subnet.save()
45 return subnet
46
47def update_subnet(auth, subnet, **fields):
48 return
49
50def delete_subnet(auth, filter={}):
51 driver = OpenStackDriver(client = auth_check(auth))
52 subnets = Subnet.objects.filter(**filter)
53 for subnet in subnets:
54 driver.delete_router_interface(subnet.slice.router_id, subnet.subnet_id)
55 driver.delete_subnet(subnet.subnet_id)
56 subnet.delete()
57 return 1
58
59def get_subnets(auth, filter={}):
60 client = auth_check(auth)
61 if 'slice' in filter:
62 slice = _get_slice(filter.get('slice'))
63 if slice: filter['slice'] = slice
64 subnets = Subnet.objects.filter(**filter)
65 return subnets
66
67
68