2023-11-14 21:27:18 -05:00
|
|
|
locals {
|
|
|
|
|
apps = {
|
|
|
|
|
"apko" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
|
|
|
|
ram = "2Gi"
|
2023-11-14 21:27:18 -05:00
|
|
|
container_concurrency = 1
|
|
|
|
|
timeout_seconds = 900 # 15m
|
|
|
|
|
}
|
|
|
|
|
"flatten" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
|
|
|
|
ram = "2Gi"
|
2023-11-14 21:27:18 -05:00
|
|
|
container_concurrency = 80
|
2026-05-14 11:32:11 -04:00
|
|
|
timeout_seconds = 900 # 15m
|
2023-11-14 21:27:18 -05:00
|
|
|
}
|
2026-05-11 21:42:04 -04:00
|
|
|
"git" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
2026-05-11 21:42:04 -04:00
|
|
|
ram = "2Gi"
|
2026-05-14 11:32:11 -04:00
|
|
|
container_concurrency = 80
|
2026-05-11 21:42:04 -04:00
|
|
|
timeout_seconds = 900 # 15m
|
|
|
|
|
}
|
2023-11-14 21:27:18 -05:00
|
|
|
"ko" : {
|
2026-05-13 22:19:59 -04:00
|
|
|
cpu = 4
|
2023-11-14 21:27:18 -05:00
|
|
|
ram = "4Gi"
|
|
|
|
|
container_concurrency = 1
|
|
|
|
|
timeout_seconds = 900 # 15m
|
|
|
|
|
base_image = "cgr.dev/chainguard/go:latest-dev"
|
|
|
|
|
}
|
|
|
|
|
"mirror" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
2023-11-14 21:27:18 -05:00
|
|
|
ram = "4Gi"
|
2026-05-14 11:32:11 -04:00
|
|
|
container_concurrency = 80
|
2023-11-14 21:27:18 -05:00
|
|
|
timeout_seconds = 900 # 15m
|
|
|
|
|
}
|
|
|
|
|
"random" : {
|
|
|
|
|
cpu = 1
|
|
|
|
|
ram = "256Mi"
|
|
|
|
|
container_concurrency = 1000
|
|
|
|
|
timeout_seconds = 60 # 1m
|
2025-02-14 03:52:52 -06:00
|
|
|
//alert_id = module.prober.alert_id
|
2023-11-14 21:27:18 -05:00
|
|
|
}
|
2026-05-14 11:21:27 -04:00
|
|
|
# wait : {
|
|
|
|
|
# cpu = 1
|
|
|
|
|
# ram = "1Gi"
|
|
|
|
|
# container_concurrency = 80
|
|
|
|
|
# timeout_seconds = 60 # 1m
|
|
|
|
|
# }
|
2026-05-13 21:54:40 -04:00
|
|
|
# "viz" : {
|
|
|
|
|
# cpu = 1
|
|
|
|
|
# ram = "1Gi"
|
|
|
|
|
# container_concurrency = 1000
|
|
|
|
|
# timeout_seconds = 60 # 1m
|
|
|
|
|
# }
|
2026-04-02 18:12:21 +01:00
|
|
|
"infinite-git" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
|
|
|
|
ram = "2Gi"
|
2026-04-02 18:12:21 +01:00
|
|
|
container_concurrency = 1000
|
2026-05-13 17:01:52 -04:00
|
|
|
timeout_seconds = 60 # 1m
|
|
|
|
|
}
|
|
|
|
|
"infinite-go" : {
|
2026-05-14 11:32:11 -04:00
|
|
|
cpu = 4
|
|
|
|
|
ram = "2Gi"
|
2026-05-13 17:01:52 -04:00
|
|
|
container_concurrency = 1000
|
2026-04-02 18:12:21 +01:00
|
|
|
timeout_seconds = 60 # 1m
|
|
|
|
|
}
|
2023-11-14 21:27:18 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-20 10:39:18 -06:00
|
|
|
resource "ko_build" "image" {
|
|
|
|
|
for_each = local.apps
|
|
|
|
|
|
|
|
|
|
repo = "gcr.io/${var.project_id}/${each.key}"
|
2026-05-13 17:01:52 -04:00
|
|
|
importpath = "github.com/imjasonh/kontain.me/cmd/${each.key}"
|
2026-05-13 21:54:40 -04:00
|
|
|
base_image = lookup(each.value, "base_image", "cgr.dev/chainguard/static:latest")
|
2023-11-20 10:39:18 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resource "google_cloud_run_service" "service" {
|
|
|
|
|
for_each = local.apps
|
|
|
|
|
name = each.key
|
|
|
|
|
location = var.location
|
|
|
|
|
|
|
|
|
|
template {
|
|
|
|
|
spec {
|
|
|
|
|
service_account_name = google_service_account.service_account.email
|
|
|
|
|
container_concurrency = each.value.container_concurrency
|
|
|
|
|
timeout_seconds = each.value.timeout_seconds
|
|
|
|
|
containers {
|
|
|
|
|
image = ko_build.image[each.key].image_ref
|
|
|
|
|
env {
|
|
|
|
|
name = "BUCKET"
|
|
|
|
|
value = google_storage_bucket.bucket.name
|
|
|
|
|
}
|
|
|
|
|
resources {
|
|
|
|
|
limits = {
|
|
|
|
|
cpu = each.value.cpu
|
|
|
|
|
memory = each.value.ram
|
|
|
|
|
}
|
|
|
|
|
requests = {
|
|
|
|
|
cpu = each.value.cpu
|
|
|
|
|
memory = each.value.ram
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data "google_iam_policy" "noauth" {
|
|
|
|
|
binding {
|
|
|
|
|
role = "roles/run.invoker"
|
|
|
|
|
members = ["allUsers"]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resource "google_cloud_run_service_iam_policy" "noauth" {
|
|
|
|
|
for_each = local.apps
|
|
|
|
|
location = var.location
|
|
|
|
|
service = google_cloud_run_service.service[each.key].name
|
|
|
|
|
|
|
|
|
|
policy_data = data.google_iam_policy.noauth.policy_data
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resource "google_cloud_run_domain_mapping" "mapping" {
|
|
|
|
|
for_each = local.apps
|
|
|
|
|
location = var.location
|
|
|
|
|
name = "${each.key}.${var.domain}"
|
|
|
|
|
|
|
|
|
|
metadata {
|
|
|
|
|
namespace = var.project_id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
spec {
|
|
|
|
|
route_name = google_cloud_run_service.service[each.key].name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resource "google_dns_record_set" "dns-record" {
|
|
|
|
|
for_each = local.apps
|
|
|
|
|
|
|
|
|
|
name = "${each.key}.${var.domain}."
|
|
|
|
|
type = google_cloud_run_domain_mapping.mapping[each.key].status[0].resource_records[0].type
|
|
|
|
|
ttl = 300
|
|
|
|
|
|
|
|
|
|
managed_zone = google_dns_managed_zone.zone.name
|
|
|
|
|
|
|
|
|
|
rrdatas = [google_cloud_run_domain_mapping.mapping[each.key].status[0].resource_records[0].rrdata]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
resource "null_resource" "test" {
|
2026-05-13 17:01:52 -04:00
|
|
|
for_each = local.apps
|
2023-11-20 10:39:18 -06:00
|
|
|
depends_on = [google_dns_record_set.dns-record]
|
2023-12-19 20:02:31 -05:00
|
|
|
|
2026-05-13 21:54:40 -04:00
|
|
|
# Re-run tests whenever the deployed image changes.
|
|
|
|
|
triggers = { image = ko_build.image[each.key].image_ref }
|
2023-12-19 20:02:31 -05:00
|
|
|
|
2023-11-20 10:39:18 -06:00
|
|
|
provisioner "local-exec" { command = file("${path.module}/cmd/${each.key}/test.sh") }
|
2023-11-14 21:27:18 -05:00
|
|
|
}
|
|
|
|
|
|
2023-11-20 10:39:18 -06:00
|
|
|
output "cloudrun_url" { value = { for k, _ in local.apps : k => google_cloud_run_service.service[k].status[0].url } }
|
|
|
|
|
output "vanity_url" { value = { for k, _ in local.apps : k => google_cloud_run_domain_mapping.mapping[k].name } }
|