module "o11y_cluster" {
  source               = "../../modules/o11y_cluster"
  env                  = var.env
  logical_region_name  = var.logical_region_name
  cloud_provider       = "alicloud"
  cloud_region         = var.cloud_region
  agent_access_account = local.seed_account

  providers = {
    aws.kv_bucket = aws.tf_state
  }
}

locals {
  log_bucket_name       = module.o11y_cluster.storage_info.logs.bucketName
  assume_o11y_role      = module.o11y_cluster.agent_info.roleARN
  endpoint_service_name = module.o11y_cluster.monitor_info.endpointServiceName
}

resource "alicloud_privatelink_vpc_endpoint" "o11y" {
  service_name       = local.endpoint_service_name
  vpc_id             = module.ack.vpc_id
  security_group_ids = [module.ack.security_group_id]
  endpoint_type      = "Interface"
}

resource "alicloud_privatelink_vpc_endpoint_zone" "o11y" {
  count       = length(module.ack.pod_switch_ids)
  endpoint_id = alicloud_privatelink_vpc_endpoint.o11y.id
  zone_id     = module.ack.pod_switch_zone_ids[count.index]
  vswitch_id  = module.ack.pod_switch_ids[count.index]
}

module "o11y-agent" {
  source = "../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-o11y-agent.yaml"
  parameters = {
    env               = var.env
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    region            = var.cloud_region
    cloud             = "alicloud"
    additionalArgs = jsonencode({
      assumeO11yRole             = local.assume_o11y_role
      logBucketName              = local.log_bucket_name
      imageRegistry              = local.image_registry
      tenantId                   = "infra-${var.env}"
      projectId                  = "seed"
      o11yId                     = module.o11y_cluster.o11y_cluster_id
      clusterName                = local.cluster_name
      o11yEndpointServiceDNSName = alicloud_privatelink_vpc_endpoint.o11y.endpoint_domain
    })
  }
  services = [
    {
      name      = "sts/vmagent-${var.env}-seed-${var.logical_region_name}-o11y"
      namespace = "monitoring"
      wait_for  = "jsonpath='{.status.availableReplicas}'=REPLICAS"
    }
  ]
}