206 lines
5.8 KiB
HCL
206 lines
5.8 KiB
HCL
# Router for the private network
|
|
resource "upcloud_router" "kubernetes" {
|
|
name = "${var.prefix}-${var.cluster_name}-router"
|
|
}
|
|
|
|
# Gateway for internet connectivity
|
|
resource "upcloud_gateway" "kubernetes" {
|
|
name = "${var.prefix}-${var.cluster_name}-gateway"
|
|
zone = var.zone
|
|
features = ["nat"]
|
|
router {
|
|
id = upcloud_router.kubernetes.id
|
|
}
|
|
}
|
|
|
|
# Private network for the Kubernetes cluster
|
|
resource "upcloud_network" "kubernetes" {
|
|
name = "${var.prefix}-${var.cluster_name}-network"
|
|
zone = var.zone
|
|
router = upcloud_router.kubernetes.id
|
|
|
|
ip_network {
|
|
address = var.network_cidr
|
|
dhcp = true
|
|
dhcp_default_route = true
|
|
family = "IPv4"
|
|
gateway = cidrhost(var.network_cidr, 1)
|
|
}
|
|
|
|
depends_on = [upcloud_gateway.kubernetes]
|
|
}
|
|
|
|
# Kubernetes cluster
|
|
resource "upcloud_kubernetes_cluster" "main" {
|
|
name = "${var.prefix}-${var.cluster_name}"
|
|
zone = var.zone
|
|
network = upcloud_network.kubernetes.id
|
|
control_plane_ip_filter = var.control_plane_ip_filter
|
|
|
|
private_node_groups = true
|
|
}
|
|
|
|
# Node group for worker nodes
|
|
resource "upcloud_kubernetes_node_group" "workers" {
|
|
cluster = upcloud_kubernetes_cluster.main.id
|
|
name = "${var.prefix}-${var.cluster_name}-workers"
|
|
node_count = var.node_count
|
|
plan = var.node_plan
|
|
anti_affinity = var.node_count > 1
|
|
labels = {
|
|
prefix = var.prefix
|
|
cluster = var.cluster_name
|
|
role = "worker"
|
|
env = lookup(var.tags, "Environment", "dev")
|
|
}
|
|
}
|
|
|
|
# ─── Managed PostgreSQL ──────────────────────────────────────────────
|
|
|
|
resource "upcloud_managed_database_postgresql" "main" {
|
|
name = "${var.prefix}-postgresql"
|
|
plan = var.pg_plan
|
|
title = "${var.prefix} PostgreSQL"
|
|
zone = var.zone
|
|
|
|
termination_protection = var.termination_protection
|
|
|
|
network {
|
|
family = "IPv4"
|
|
name = "pg-private"
|
|
type = "private"
|
|
uuid = upcloud_network.kubernetes.id
|
|
}
|
|
|
|
properties {
|
|
public_access = false
|
|
version = var.pg_version
|
|
}
|
|
|
|
labels = var.tags
|
|
}
|
|
|
|
resource "upcloud_managed_database_logical_database" "keycloak" {
|
|
service = upcloud_managed_database_postgresql.main.id
|
|
name = "keycloak"
|
|
}
|
|
|
|
resource "upcloud_managed_database_logical_database" "gitlab" {
|
|
service = upcloud_managed_database_postgresql.main.id
|
|
name = "gitlabhq_production"
|
|
}
|
|
|
|
resource "upcloud_managed_database_user" "keycloak" {
|
|
service = upcloud_managed_database_postgresql.main.id
|
|
username = "keycloak"
|
|
}
|
|
|
|
resource "upcloud_managed_database_user" "gitlab" {
|
|
service = upcloud_managed_database_postgresql.main.id
|
|
username = "gitlab"
|
|
}
|
|
|
|
# ─── Managed Valkey ──────────────────────────────────────────────────
|
|
|
|
resource "upcloud_managed_database_valkey" "main" {
|
|
name = "${var.prefix}-valkey"
|
|
plan = var.valkey_plan
|
|
title = "${var.prefix} Valkey"
|
|
zone = var.zone
|
|
|
|
termination_protection = var.termination_protection
|
|
|
|
network {
|
|
family = "IPv4"
|
|
name = "valkey-private"
|
|
type = "private"
|
|
uuid = upcloud_network.kubernetes.id
|
|
}
|
|
|
|
properties {
|
|
public_access = false
|
|
}
|
|
|
|
labels = var.tags
|
|
}
|
|
|
|
# ─── Managed Object Storage ─────────────────────────────────────────
|
|
|
|
resource "upcloud_managed_object_storage" "main" {
|
|
name = "${var.prefix}-objsto"
|
|
region = var.objstore_region
|
|
configured_status = "started"
|
|
|
|
network {
|
|
family = "IPv4"
|
|
name = "objsto-private"
|
|
type = "private"
|
|
uuid = upcloud_network.kubernetes.id
|
|
}
|
|
|
|
labels = var.tags
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_user" "gitlab" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
username = "${var.prefix}-gitlab"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_user_access_key" "gitlab" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
username = upcloud_managed_object_storage_user.gitlab.username
|
|
status = "Active"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_policy" "gitlab" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "gitlab-full-access"
|
|
description = "Full S3 access for GitLab"
|
|
document = urlencode(jsonencode({
|
|
Version = "2012-10-17"
|
|
Statement = [
|
|
{
|
|
Effect = "Allow"
|
|
Action = ["s3:*"]
|
|
Resource = "*"
|
|
}
|
|
]
|
|
}))
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_user_policy" "gitlab" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
username = upcloud_managed_object_storage_user.gitlab.username
|
|
name = upcloud_managed_object_storage_policy.gitlab.name
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_artifacts" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-artifacts"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_uploads" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-uploads"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_packages" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-packages"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_lfs" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-lfs"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_registry" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-registry"
|
|
}
|
|
|
|
resource "upcloud_managed_object_storage_bucket" "gitlab_backups" {
|
|
service_uuid = upcloud_managed_object_storage.main.id
|
|
name = "${var.prefix}-gitlab-backups"
|
|
}
|