1
0
Fork 0
distrust-stack/infra/main/main.tf

101 lines
2.5 KiB
Terraform
Raw Normal View History

2023-03-17 04:14:39 +00:00
variable "environment" {}
variable "namespace" {}
variable "region" {}
variable "out_dir" {
type = string
2023-05-05 03:31:53 +00:00
default = "../../out"
2023-01-28 03:08:56 +00:00
}
2023-03-17 04:14:39 +00:00
resource "random_id" "suffix" {
2023-04-14 03:22:35 +00:00
byte_length = 8
2023-01-28 03:08:56 +00:00
}
resource "digitalocean_custom_image" "talos" {
name = "talos"
url = "https://github.com/siderolabs/talos/releases/download/v1.4.3/digital-ocean-amd64.raw.gz"
# this gets reset by DigitalOcean
distribution = "Unknown OS"
regions = [var.region]
}
module "digitalocean_talos_cluster-2" {
source = "../../terraform_modules/digitalocean_talos_cluster"
talos_cluster_name = "distrust"
talos_image = digitalocean_custom_image.talos.image_id
talos_config_directory = "talos"
control_plane_pool = {
count = 1,
size = "s-4vcpu-8gb",
}
worker_pools = [{
name = "primary",
count = 2,
size = "s-2vcpu-4gb",
}]
digitalocean_region = var.region
}
module "digitalocean_database_cluster" {
source = "../../terraform_modules/digitalocean_database_cluster"
cluster_name = "distrust"
db_engine = "pg"
db_version = "15"
size = "db-s-1vcpu-2gb"
node_count = 1
databases = [{
name = "keycloak",
create_default_superuser = true,
}, {
name = "forgejo",
create_default_superuser = true,
}]
vpc_id = module.digitalocean_talos_cluster-2.vpc_id
digitalocean_region = var.region
}
locals {
database_host = module.digitalocean_database_cluster.database_cluster.private_host
database_port = module.digitalocean_database_cluster.database_cluster.port
database_jdbc_uri_prefix = join("", [
"jdbc:postgresql://",
module.digitalocean_database_cluster.database_cluster.private_host,
":",
module.digitalocean_database_cluster.database_cluster.port,
])
}
# `jq .database_users.value.forgejo | sops --encrypt`
output "database_users" {
value = {
for db_user in module.digitalocean_database_cluster.database_users:
db_user.name => {
apiVersion = "v1",
kind = "Secret",
metadata = {
name = "database-configuration",
},
stringData = {
name = db_user.name,
dbname = db_user.name,
host = local.database_host,
port = local.database_port,
password = db_user.password,
# Forgejo, they call it "host"
address = join(":", [local.database_host, local.database_port]),
# Keycloak
jdbc_url = "${local.database_jdbc_uri_prefix}/${db_user.name}?sslmode=require",
}
}
}
sensitive = true
}
output "database" {
value = module.digitalocean_database_cluster.database_cluster
sensitive = true
}