Files
service/main.tf
T
2026-08-07 18:14:42 +02:00

150 lines
4.9 KiB
Terraform

terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "~> 0.78.2"
}
technitium = {
source = "kenske/technitium"
version = "~> 0.2"
}
uptimekuma = {
source = "breml/uptimekuma"
version = "~> 0.3"
}
}
}
data "terraform_remote_state" "uptime" {
backend = "http"
config = {
address = "https://git.itlab-ffeks.dnu.edu.ua/api/packages/infrastructure/terraform/state/uptime-kuma-base-infrastructure-main"
username = "admin"
password = var.gitea_password
}
}
locals {
is_prod = var.environment == "prod" || var.environment == "production"
env_tag_id = local.is_prod ? data.terraform_remote_state.uptime.outputs.tag_production_id : data.terraform_remote_state.uptime.outputs.tag_staging_id
ip_only = split("/", var.ip_address)[0]
monitor_dnu_dns = var.monitor_dnu_dns != null ? var.monitor_dnu_dns : (local.is_prod ? true : false)
service_type_tag_id = (
var.service_type == "dataholder" ? data.terraform_remote_state.uptime.outputs.tag_dataholder_id :
var.service_type == "module" ? data.terraform_remote_state.uptime.outputs.tag_module_id :
data.terraform_remote_state.uptime.outputs.tag_internal_service_id
)
service_parent_group_id = (
local.is_prod ? (
var.service_type == "dataholder" ? data.terraform_remote_state.uptime.outputs.monitor_group_prod_dataholders_id :
var.service_type == "module" ? data.terraform_remote_state.uptime.outputs.monitor_group_prod_modules_id :
data.terraform_remote_state.uptime.outputs.monitor_group_prod_internal_services_id
) : (
var.service_type == "dataholder" ? data.terraform_remote_state.uptime.outputs.monitor_group_staging_dataholders_id :
var.service_type == "module" ? data.terraform_remote_state.uptime.outputs.monitor_group_staging_modules_id :
data.terraform_remote_state.uptime.outputs.monitor_group_staging_internal_services_id
)
)
# Service parent group resolution for ping monitor based on environment and service type
service_ping_parent_group_id = (
local.is_prod ? (
var.service_type == "dataholder" ? data.terraform_remote_state.uptime.outputs.monitor_group_prod_dataholders_ping_id :
var.service_type == "module" ? data.terraform_remote_state.uptime.outputs.monitor_group_prod_modules_ping_id :
data.terraform_remote_state.uptime.outputs.monitor_group_prod_internal_services_ping_id
) : (
var.service_type == "dataholder" ? data.terraform_remote_state.uptime.outputs.monitor_group_staging_dataholders_ping_id :
var.service_type == "module" ? data.terraform_remote_state.uptime.outputs.monitor_group_staging_modules_ping_id :
data.terraform_remote_state.uptime.outputs.monitor_group_staging_internal_services_ping_id
)
)
}
module "vm" {
source = "git::https://git.itlab-ffeks.dnu.edu.ua/infrastructure/proxmox-vm.git"
vm_name = var.vm_name
vm_id = var.vm_id
ip_address = var.ip_address
ssh_public_keys = var.ssh_public_keys
gateway = var.gateway
node_name = var.node_name
template_id = var.template_id
cpu_cores = var.cpu_cores
memory_mb = var.memory_mb
bridge = var.bridge
}
module "dns_record" {
source = "git::https://git.itlab-ffeks.dnu.edu.ua/infrastructure/dns-record.git"
subdomain = var.subdomain
}
resource "uptimekuma_monitor_dns" "internal_dns" {
name = "${var.service_name} Internal DNS Monitoring (${var.environment})"
hostname = "${var.subdomain}.itlab-ffeks.dnu.edu.ua"
dns_resolve_server = "212.3.125.242"
parent = data.terraform_remote_state.uptime.outputs.monitor_group_internal_dns_id
tags = [
{
tag_id = local.env_tag_id
},
{
tag_id = data.terraform_remote_state.uptime.outputs.tag_dns_id
}
]
}
resource "uptimekuma_monitor_dns" "dnu_dns" {
count = local.monitor_dnu_dns ? 1 : 0
name = "${var.service_name} DNU DNS Monitoring (${var.environment})"
hostname = "${var.subdomain}.itlab-ffeks.dnu.edu.ua"
parent = data.terraform_remote_state.uptime.outputs.monitor_group_dnu_dns_id
tags = [
{
tag_id = local.env_tag_id
},
{
tag_id = data.terraform_remote_state.uptime.outputs.tag_dns_id
}
]
}
resource "uptimekuma_monitor_ping" "ping" {
name = "Ping ${var.service_name} (${var.environment})"
hostname = local.ip_only
parent = local.service_ping_parent_group_id
tags = [
{
tag_id = local.env_tag_id
},
{
tag_id = local.service_type_tag_id
}
]
}
resource "uptimekuma_monitor_http" "http" {
count = var.create_http_monitor ? 1 : 0
name = "${var.service_name} HTTP Monitoring (${var.environment})"
url = "http://${local.ip_only}${var.http_health_check_path}"
parent = local.service_parent_group_id
tags = [
{
tag_id = local.env_tag_id
},
{
tag_id = local.service_type_tag_id
}
]
}