1 from types import StringTypes
2 from plstackapi.openstack.client import OpenStackClient
3 from plstackapi.openstack.driver import OpenStackDriver
4 from plstackapi.core.api.auth import auth_check
5 from plstackapi.core.models import Subnet
6 from plstackapi.core.api.slices import _get_slices
8 def _get_subnets(filter):
9 if isinstance(filter, StringTypes) and filter.isdigit():
11 if isinstance(filter, int):
12 subnets = Subnet.objects.filter(id=filter)
13 elif isinstance(filter, StringTypes):
14 subnets = Subnet.objects.filter(name=filter)
15 elif isinstance(filter, dict):
16 subnets = Subnet.objects.filter(**filter)
21 def 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,
32 dns_nameservers = ['8.8.8.8', '8.8.4.4'])
34 subnet.subnet_id=subnet.id
36 # add subnet as interface to slice's router
37 driver.add_router_interface(subnet.slice.router_id, subnet.subnet_id)
42 def update_subnet(auth, subnet, **fields):
45 def 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)
54 def get_subnets(auth, filter={}):
55 client = auth_check(auth)
57 slice = _get_slice(filter.get('slice'))
58 if slice: filter['slice'] = slice
59 subnets = Subnet.objects.filter(**filter)