# 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>
35 lines
1.4 KiB
Python
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,))
|