module "upbound-crossplane" {
  source = "../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-upbound-crossplane.yaml"
  parameters = {
    env               = var.env
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    region            = var.aws_region
    cloud             = "aws"
  }
  services = [
    {
      name      = "deploy/crossplane"
      namespace = "crossplane-system"
    },
    {
      name      = "deploy/crossplane-rbac-manager"
      namespace = "crossplane-system"
    },
    {
      name      = "crd/providers.pkg.crossplane.io"
      namespace = "crossplane-system"
      wait_for  = "condition=established"
    }
  ]
  check_before_destroy = false
}

locals {
  aws_provider_services = [
    "provider.pkg.crossplane.io/provider-aws-ec2",
    "provider.pkg.crossplane.io/provider-aws-eks",
    "provider.pkg.crossplane.io/provider-aws-iam",
    "provider.pkg.crossplane.io/provider-aws-route53",
    "provider.pkg.crossplane.io/provider-aws-s3",
    "provider.pkg.crossplane.io/provider-family-aws"
  ]
}

module "upbound-aws-provider" {
  source = "../../modules/app"

  depends_on = [module.upbound-crossplane]

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-upbound-aws-provider.yaml"
  parameters = {
    env               = var.env
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    region            = var.aws_region
    cloud             = "aws"
    awsIrsaRoleArn    = module.iam-dataplane-manager.role_arn
  }
  services = [
    for service_name in local.aws_provider_services :
    {
      name      = service_name
      namespace = "crossplane-system"
      wait_for = trimspace(<<EOT
        jsonpath='{.status.conditions[?(@.type=="Healthy")].status}'=True
      EOT
      )
    }
  ]
  check_before_destroy = false
}
