oncall-engine/engine/apps/public_api/tf_sync.py
Innokentii Konstantinov cfa7fb816c
Sync users and teams on tf requests (#1180)
# What this PR does
This PR add sync with grafana on requests from terraform 

## Which issue(s) this PR fixes
It's needed to fix case when customers want to create team via grafana
terraform provider and use it in the oncall provider without having to
log into Grafana Cloud.

Co-authored-by: Joey Orlando <joey.orlando@grafana.com>
2023-01-24 13:44:07 +08:00

35 lines
1.4 KiB
Python

import logging
from django.core.cache import cache
from apps.grafana_plugin.helpers.client import GrafanaAPIClient
from apps.grafana_plugin.tasks import sync_team_members_for_organization_async
from apps.user_management.sync import sync_teams, sync_users
logger = logging.getLogger(__name__)
SYNC_REQUEST_TIMEOUT = 5
SYNC_PERIOD = 60
def is_request_from_terraform(request) -> bool:
return "terraform-provider-grafana" in request.META.get("HTTP_USER_AGENT", "")
def sync_users_on_tf_request(organization):
cache_key = f"sync_users_on_tf_request_{organization.id}"
if not cache.get(cache_key):
logger.info(f"Start sync_users_on_tf_request organization_id={organization.id}")
client = GrafanaAPIClient(api_url=organization.grafana_url, api_token=organization.api_token)
cache.set(cache_key, True, SYNC_PERIOD)
sync_users(client, organization, timeout=SYNC_REQUEST_TIMEOUT)
def sync_teams_on_tf_request(organization):
cache_key = f"sync_teams_on_tf_request_{organization.id}"
if not cache.get(cache_key):
logger.info(f"Start sync_teams_on_tf_request organization_id={organization.id}")
cache.set(cache_key, True, SYNC_PERIOD)
client = GrafanaAPIClient(api_url=organization.grafana_url, api_token=organization.api_token)
sync_teams(client, organization, timeout=SYNC_REQUEST_TIMEOUT)
sync_team_members_for_organization_async.apply_async((organization.id,))