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 } ] }