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 SliceMembership
6 from plstackapi.core.api.users import _get_users
7 from plstackapi.core.api.slices import _get_slices
8 from plstackapi.core.api.roles import _get_roles
10 def _get_slice_memberships(filter):
11 if isinstance(filter, StringTypes) and filter.isdigit():
13 if isinstance(filter, int):
14 slice_memberships = SitePrivilege.objects.filter(id=filter)
15 elif isinstance(filter, StringTypes):
16 slice_memberships = SitePrivilege.objects.filter(name=filter)
17 elif isinstance(filter, dict):
18 slice_memberships = SitePrivilege.objects.filter(**filter)
20 slice_memberships = []
21 return slice_memberships
24 def add_slice_membership(auth, fields):
25 driver = OpenStackDriver(client = auth_check(auth))
26 users = _get_users(fields.get('user'))
27 slices = _get_slices(fields.get('slice'))
28 roles = _get_roles(fields.get('role'))
30 if users: fields['user'] = users[0]
31 if slices: fields['slice'] = slices[0]
32 if roles: fields['role'] = roles[0]
34 slice_membership = SliceMembership(**fields)
37 driver.add_user_role(slice_membership.user.user_id,
38 slice_membership.slice.tenant_id,
39 slice_membership.role.name)
41 slice_membership.save()
42 return slice_membership
44 def update_slice_membership(auth, id, **fields):
47 def delete_slice_membership(auth, filter={}):
48 driver = OpenStackDriver(client = auth_check(auth))
49 slice_memberships = _get_slice_memberships(filter)
50 for slice_membership in slice_memberships:
51 driver.delete_user_role(user_id=slice_membership.user.id,
52 tenant_id = slice_membership.slice.tenant_id,
53 role_name = slice_membership.role.name)
54 slice_membership.delete()
57 def get_slice_memberships(auth, filter={}):
58 client = auth_check(auth)
59 users = _get_users(fields.get('user'))
60 slices = _get_slices(fields.get('slice'))
61 roles = _get_roles(fields.get('role'))
63 if users: fields['user'] = users[0]
64 if slices: fields['slice'] = slices[0]
65 if roles: fields['role'] = roles[0]
67 slice_memberships = _get_slice_memberships(filter)
68 return slice_memberships