# /// script # requires-python = ">=3.12" # dependencies = [ # "requests", # "boto3", # ] # /// import argparse import json import sys import boto3 from lib import ( O11yClient, get_auth0_token, load_auth0_secret_string_azure, load_auth0_secret_string_aws, load_auth0_secret_string_alicloud, parse_account_id_from_role_arn, ) def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Delete an o11y cluster") parser.add_argument("--biz-type", required=True) parser.add_argument("--cloud", required=True) parser.add_argument("--region", required=True) parser.add_argument("--o11y-endpoint", required=True) parser.add_argument("--tenant-id", required=True) parser.add_argument("--vector-role-arn", default=None) parser.add_argument("--agent-access-account", default=None) parser.add_argument("--key-vault-name", default=None) parser.add_argument("--controlplane-subscription-id", default=None) parser.add_argument("--auth0-secret-id", required=True) parser.add_argument("--resource-id", required=True) return parser.parse_args() def load_cluster_id(bucket: str, key: str) -> str: body = boto3.client("s3").get_object(Bucket=bucket, Key=key)["Body"].read() cluster_id = json.loads(body.decode("utf-8")).get("id") if not cluster_id: raise RuntimeError(f"o11y cluster id is empty in s3://{bucket}/{key}") return cluster_id def delete_cluster_record(bucket: str, key: str) -> None: boto3.client("s3").delete_object(Bucket=bucket, Key=key) if __name__ == "__main__": args = parse_args() print( "===================== start o11y cluster deletion =====================", file=sys.stderr, ) if args.cloud == "alicloud": token = get_auth0_token( load_auth0_secret_string_alicloud(args.auth0_secret_id, args.agent_access_account, args.region) ) elif args.cloud == "azure": token = get_auth0_token( load_auth0_secret_string_azure( args.auth0_secret_id, args.key_vault_name, args.controlplane_subscription_id, ) ) else: profile_name = parse_account_id_from_role_arn(args.vector_role_arn) token = get_auth0_token( load_auth0_secret_string_aws(args.auth0_secret_id, profile_name, args.region) ) client = O11yClient(args.o11y_endpoint, token, args.tenant_id, args.biz_type) cluster_id = load_cluster_id("autonomous-deployment-kv", args.resource_id) print(f"o11y_cluster_id: {cluster_id}", file=sys.stderr) cluster_resp = client.get_cluster(cluster_id, args.cloud, args.region) if cluster_resp.get("code") != 0: raise RuntimeError( f"Failed to get o11y cluster, code: {cluster_resp.get('code')}" ) delete_resp = client.delete_cluster(cluster_id, args.cloud, args.region) if delete_resp.get("code") != 0: raise RuntimeError( f"Failed to delete o11y cluster, code: {delete_resp.get('code')}" ) print(f"o11y cluster deleted: {cluster_id}", file=sys.stderr) delete_cluster_record("autonomous-deployment-kv", args.resource_id) print( f"deleted o11y cluster record in s3://autonomous-deployment-kv/{args.resource_id}", file=sys.stderr, ) print( "===================== o11y cluster deletion done =====================", file=sys.stderr, )