from types import StringTypes import re 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 SitePrivilege, Site, Role, User from plstackapi.core.api.users import _get_users from plstackapi.core.api.sites import _get_sites from plstackapi.core.api.roles import _get_roles def _get_site_privileges(filter): if isinstance(filter, StringTypes) and filter.isdigit(): filter = int(filter) if isinstance(filter, int): site_privileges = SitePrivilege.objects.filter(id=filter) elif isinstance(filter, StringTypes): site_privileges = SitePrivilege.objects.filter(name=filter) elif isinstance(filter, dict): site_privileges = SitePrivilege.objects.filter(**filter) else: site_privileges = [] return site_privileges def add_site_privilege(auth, fields): driver = OpenStackDriver(client = auth_check(auth)) users = _get_user(fields.get('user')) sites = _get_slice(fields.get('site')) roles = _get_role(fields.get('role')) if users: fields['user'] = users[0] if slices: fields['site'] = sites[0] if roles: fields['role'] = roles[0] site_privilege = SitePrivilege(**fields) # update nova role driver.add_user_role(site_privilege.user.user_id, site_privilege.site.tenant_id, site_privilege.role.name) site_privilege.save() return site_privilege def update_site_privilege(auth, id, **fields): return def delete_site_privilege(auth, filter={}): driver = OpenStackDriver(client = auth_check(auth)) site_privileges = _get_site_privileges(filter) for site_privilege in site_privileges: driver.delete_user_role(user_id=site_privilege.user.id, tenant_id = site_privilege.site.tenant_id, role_name = site_privilege.role.name) site_privilege.delete() return 1 def get_site_privileges(auth, filter={}): client = auth_check(auth) users = _get_users(filter.get('user')) sites = _get_slices(filter.get('site')) roles = _get_roles(filter.get('role')) if users: filter['user'] = users[0] if sites: filter['site'] = sites[0] if roles: filter['role'] = roles[0] site_privileges = _get_site_privileges(filter) return site_privileges