Files
terraform/main.tf
2026-02-06 18:36:15 +01:00

201 lines
3.8 KiB
HCL

terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.93.0"
}
}
}
provider "proxmox" {
endpoint = var.proxmox_endpoint
api_token = var.proxmox_api_token
insecure = true
ssh {
agent = true
username = "root"
}
}
locals {
traefik_services = {
bookshelf = module.bookshelf.traefik_service
gitea = module.gitea.traefik_service
fefan = module.fefan.traefik_service
listmonk = module.listmonk.traefik_service
}
}
resource "local_file" "traefik_config" {
filename = "${path.module}/services.yml"
content = templatefile("${path.module}/templates/traefik.services.tpl", {
services = local.traefik_services
})
}
resource "null_resource" "deploy_traefik_config" {
depends_on = [
local_file.traefik_config,
module.gateway
]
triggers = {
config_sha = sha256(local_file.traefik_config.content)
}
provisioner "file" {
source = "${path.module}/services.yml"
destination = "/home/gateway/services.yaml"
connection {
type = "ssh"
host = module.gateway.vm_ip_address
user = "gateway"
agent = true
}
}
}
module "gateway" {
source = "./modules/apps/gateway"
providers = {}
vm_ip_address = "192.168.1.89"
name = "gateway"
hostname = "gateway"
domain = "aldon.fr"
vm_id = 200
node_name = "mop"
template_id = 103
cores = 2
memory = 2048
balloon = 1024
disk_size = 16
ssh_public_key = var.ssh_public_key
proxmox_host_ip = var.proxmox_host_ip
}
module "gitea" {
source = "./modules/apps/gitea"
providers = {}
vm_ip_address = "192.168.1.90"
name = "gitea"
hostname = "gitea"
domain = "aldon.fr"
vm_id = 212
node_name = "mop"
template_id = 103
cores = 2
memory = 2048
balloon = 1024
disk_size = 16
ssh_public_key = var.ssh_public_key
proxmox_host_ip = var.proxmox_host_ip
}
# Needs gitea
module "bookshelf" {
source = "./modules/apps/bookshelf"
providers = {}
vm_ip_address = "192.168.1.91"
depends_on = [
module.gitea
]
name = "bookshelf"
hostname = "bookshelf"
domain = "aldon.fr"
vm_id = 211
node_name = "mop"
template_id = 103
cores = 1
memory = 1024
balloon = 1024
disk_size = 16
ssh_public_key = var.ssh_public_key
proxmox_host_ip = var.proxmox_host_ip
}
# Needs gitea
module "fefan" {
source = "./modules/apps/fefan"
providers = {}
vm_ip_address = "192.168.1.92"
depends_on = [
module.gitea
]
name = "fefan"
hostname = "fefan"
domain = "fefan.fr"
vm_id = 213
node_name = "mop"
template_id = 103
cores = 1
memory = 1024
balloon = 1024
disk_size = 16
ssh_public_key = var.ssh_public_key
proxmox_host_ip = var.proxmox_host_ip
}
module "listmonk" {
source = "./modules/apps/listmonk"
providers = {}
vm_ip_address = "192.168.1.93"
depends_on = []
name = "listmonk"
hostname = "listmonk"
domain = "fefan.fr"
vm_id = 214
node_name = "mop"
template_id = 103
cores = 1
memory = 2048
balloon = 1024
disk_size = 16
ssh_public_key = var.ssh_public_key
proxmox_host_ip = var.proxmox_host_ip
}
# module "keycloak" {
# source = "./modules/apps/keycloak"
# providers = {}
# vm_ip_address = "192.168.1.94"
# depends_on = []
# name = "keycloak"
# hostname = "keycloak"
# domain = "aldon.fr"
# vm_id = 215
# node_name = "mop"
# template_id = 103
# cores = 1
# memory = 2048
# balloon = 1024
# disk_size = 16
# ssh_public_key = var.ssh_public_key
# proxmox_host_ip = var.proxmox_host_ip
# }