From 2ee228499b756536ed2a45f7e888acd90c4c4810 Mon Sep 17 00:00:00 2001 From: Bjarke Madsen <bjarke.madsen@geant.org> Date: Thu, 25 Nov 2021 15:18:35 +0100 Subject: [PATCH] Fix API key bug to support grafana >=8.2.5 --- brian_dashboard_manager/grafana/organization.py | 13 ++++++------- brian_dashboard_manager/grafana/provision.py | 16 +++++++--------- test/test_grafana_organization.py | 2 +- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/brian_dashboard_manager/grafana/organization.py b/brian_dashboard_manager/grafana/organization.py index fa2a99b..b6d8b07 100644 --- a/brian_dashboard_manager/grafana/organization.py +++ b/brian_dashboard_manager/grafana/organization.py @@ -70,17 +70,16 @@ def create_api_token(request: AdminRequest, org_id: int, key_data=None): return result -def delete_api_token(request: AdminRequest, org_id: int, token_id: int): +def delete_api_token(request: AdminRequest, token_id: int, org_id=None): assert token_id - - switch_active_organization(request, org_id) + if org_id: + switch_active_organization(request, org_id) result = request.delete(f'api/auth/keys/{token_id}') - logger.debug(f'Deleted API token #{token_id} for organization #{org_id}') + logger.debug(f'Deleted API token #{token_id}') return result -def delete_expired_api_tokens(request: AdminRequest, org_id: int) -> bool: - assert org_id +def delete_expired_api_tokens(request: AdminRequest) -> bool: tokens = request.get('api/auth/keys', params={'includeExpired': True}) @@ -93,7 +92,7 @@ def delete_expired_api_tokens(request: AdminRequest, org_id: int) -> bool: expired_tokens = [t for t in tokens if 'expiration' in t and is_expired(t)] for token in expired_tokens: - delete_api_token(request, org_id, token['id']) + delete_api_token(request, token['id']) return True diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py index db1de8c..1e0b658 100644 --- a/brian_dashboard_manager/grafana/provision.py +++ b/brian_dashboard_manager/grafana/provision.py @@ -534,6 +534,7 @@ def provision(config): tokens = [] all_orgs = _provision_orgs(config) request = AdminRequest(**config) + delete_expired_api_tokens(request) def _find_org_config(org): orgs_to_provision = config.get('organizations', DEFAULT_ORGANIZATIONS) @@ -551,17 +552,16 @@ def provision(config): logger.info( f'--- Provisioning org {org["name"]} (ID #{org_id}) ---') - - delete_expired_api_tokens(request, org_id) - token = create_api_token(request, org_id) - token_request = TokenRequest(token=token['key'], **config) - tokens.append((org_id, token['id'])) - org_config = _find_org_config(org) if not org_config: # message logged from _find_org_config continue + token = create_api_token(request, org_id) + token_request = TokenRequest(token=token['key'], **config) + tokens.append((org_id, token['id'])) + logger.debug(tokens) + all_original_dashboards = find_dashboard(token_request) or [] all_original_dashboard_uids = { d['uid'] for d in all_original_dashboards} @@ -599,9 +599,7 @@ def provision(config): delete_dashboard(token_request, {'uid': uid}) _delete_unknown_folders(config, token_request) - - for org_id, token in tokens: - delete_api_token(request, org_id, token) + delete_api_token(request, token['id'], org_id=org_id) logger.info(f'Time to complete: {time.time() - start}') diff --git a/test/test_grafana_organization.py b/test/test_grafana_organization.py index 4528594..c54b381 100644 --- a/test/test_grafana_organization.py +++ b/test/test_grafana_organization.py @@ -75,7 +75,7 @@ def test_delete_expired_api_tokens(data_config): json={ "message": "API key deleted"}) - provision.delete_expired_api_tokens(request, ORG_ID) + provision.delete_expired_api_tokens(request) @responses.activate -- GitLab