def _login(self): """Login into ESM. Perform login request and return available groups. :returns: dict -- map with group_name to group_id """ ADMIN_GROUP_PREFIX = 'admin group:' url_params = { 'op': 'login', 'username': self._username, 'password': self._password } reply = self._rest_client.rpc('admin', url_params, 'Login') if reply['state'] != 'adminSucceed': raise exception.CoraidESMBadCredentials() # Read groups map from login reply. groups_map = {} for group_info in reply.get('values', []): full_group_name = group_info['fullPath'] if full_group_name.startswith(ADMIN_GROUP_PREFIX): group_name = full_group_name[len(ADMIN_GROUP_PREFIX):] groups_map[group_name] = group_info['groupId'] return groups_map
def _set_effective_group(self, groups_map, group): """Set effective group. Use groups_map returned from _login method. """ try: group_id = groups_map[group] except KeyError: raise exception.CoraidESMBadGroup(group_name=group) url_params = {'op': 'setRbacGroup', 'groupId': group_id} reply = self._rest_client.rpc('admin', url_params, 'Group') if reply['state'] != 'adminSucceed': raise exception.CoraidESMBadCredentials() self._logined = True