| from plstackapi.openstack.client import OpenStackClient |
| from plstackapi.openstack.driver import OpenStackDriver |
| from plstackapi.core.api.auth import auth_check |
| from plstackapi.core.models import Site |
| |
| def lookup_site(fields): |
| site = None |
| if 'site' in fields: |
| if isinstance(fields['site'], int): |
| sites = Site.objects.filter(id=fields['site']) |
| else: |
| sites = Site.objects.filter(login_base=fields['site']) |
| if sites: |
| site = sites[0] |
| if not site: |
| raise Exception, "No such site: %s" % fields['site'] |
| return site |
| |
| def add_slice(auth, fields): |
| driver = OpenStackDriver(client = auth_check(auth)) |
| site = lookup_site(fields) |
| if site: fields['site'] = site |
| slice = Slice(**fields) |
| # create tenant |
| nova_fields = {'tenant_name': slice.name, |
| 'description': slice.description, |
| 'enabled': slice.enabled} |
| tenant = driver.create_tenant(**nova_fields) |
| slice.tenant_id=tenant.id |
| |
| # create network |
| network = driver.create_network(name=self.name) |
| self.network_id = network['id'] |
| |
| # create router |
| router = driver.create_router(name=self.name) |
| self.router_id = router['id'] |
| |
| slice.save() |
| return slice |
| |
| def update_slice(auth, id, **fields): |
| driver = OpenStackDriver(client = auth_check(auth)) |
| slices = Slice.objects.filter(id=id) |
| if not slices: |
| return |
| |
| # update tenant |
| slice = slices[0] |
| nova_fields = {} |
| if 'name' in fields: |
| nova_fields['tenant_name'] = fields['name'] |
| if 'description' in fields: |
| nova_fields['description'] = fields['description'] |
| if 'enabled' in fields: |
| nova_fields['enabled'] = fields['enabled'] |
| driver.update_tenant(slice.tenant_id, **nova_fields) |
| |
| # update db record |
| site = lookup_site(fields) |
| if site: fields['site'] = site |
| slice.update(**fields) |
| |
| return slice |
| |
| def delete_slice(auth, filter={}): |
| driver = OpenStackDriver(client = auth_check(auth)) |
| slices = Slice.objects.filter(**filter) |
| for slice in slices: |
| driver.delete_slice(id=slice.tenant_id) |
| slice.delete() |
| return 1 |
| |
| def get_slices(auth, filter={}): |
| client = auth_check(auth) |
| site = lookup_site(fields) |
| if site: fields['site'] = site |
| slices = Slice.objects.filter(**filter) |
| return slices |
| |
| |
| |