From 74cc90cdee2536014e3416d01b01ab76ec630aa9 Mon Sep 17 00:00:00 2001 From: Ryan Toler Date: Sat, 21 Mar 2026 06:38:23 +0000 Subject: [PATCH] add n8n --- lxc/TEMPLATE/main.tf | 89 ++++++++++++++++++++++++++++++++++++++++ lxc/TEMPLATE/vars.tf | 50 ++++++++++++++++++++++ lxc/n8n/main.tf | 98 ++++++++++++++++++++++++++++++++++++++++++++ lxc/n8n/vars.tf | 50 ++++++++++++++++++++++ provider.tf | 5 +++ 5 files changed, 292 insertions(+) create mode 100644 lxc/TEMPLATE/main.tf create mode 100644 lxc/TEMPLATE/vars.tf create mode 100644 lxc/n8n/main.tf create mode 100644 lxc/n8n/vars.tf diff --git a/lxc/TEMPLATE/main.tf b/lxc/TEMPLATE/main.tf new file mode 100644 index 0000000..f7d240c --- /dev/null +++ b/lxc/TEMPLATE/main.tf @@ -0,0 +1,89 @@ +terraform { + required_providers { + proxmox = { + source = "bpg/proxmox" + version = "0.97.1" + } + } +} + +# ------------------------------------------------------------------ +# Optional second disk – create it only when the flag is true. +# ------------------------------------------------------------------ +resource "proxmox_virtual_environment_container" "example_template" { + description = "Managed by Terraform" + start_on_boot = var.start_on_boot + unprivileged = var.unprivileged + + features { + nesting = var.nesting_enabled + } + + wait_for_ip { + ipv4 = true + } + + # ---- Disk(s) ---------------------------------------------------- + disk { + datastore_id = var.datastore_id # <- primary disk + size = var.disk_size_gb # in GB + } + + # ------------------------------------------------------------------ + # Mount points – uncomment and set if you need to mount a volume. + # ------------------------------------------------------------------ + #mount_point { + # volume = var.mount_volume + # size = "4G" + # path = "/mnt/local" + #} + + # ---- Initialization ------------------------------------------------- + initialization { + dns { + servers = ["1.1.1.1", "8.8.8.8"] + } + + hostname = var.hostname + + ip_config { + ipv4 { + address = var.ip_address + gateway = var.gateway + } + } + + user_account { + password = var.password + # keys = [trimspace(tls_private_key.example.public_key_openssh)] + } + } + + # ---- Network ---------------------------------------------------- + network_interface { + name = "veth0" + mtu = 1450 + } + + node_name = var.node_name + + operating_system { + template_file_id = var.template_file_id + type = "debian" + } + + tags = [ + "deb13", + "terraform", + ] + + cpu { + cores = var.cores + } + + startup { + order = "3" + up_delay = "60" + down_delay = "60" + } +} diff --git a/lxc/TEMPLATE/vars.tf b/lxc/TEMPLATE/vars.tf new file mode 100644 index 0000000..4b17798 --- /dev/null +++ b/lxc/TEMPLATE/vars.tf @@ -0,0 +1,50 @@ +# --------------------------------------------------------------- +# General container settings (things that rarely change) +# --------------------------------------------------------------- +variable "start_on_boot" { + type = bool + default = true +} + +variable "unprivileged" { + type = bool + default = true +} + +variable "nesting_enabled" { + type = bool + default = true +} + +# --------------------------------------------------------------- +# Disk sizes (primary + optional) +# --------------------------------------------------------------- +variable "datastore_id" { + type = string + default = "local-lvm" +} + +variable "disk_size_gb" { + type = number + default = 64 +} + +# --------------------------------------------------------------- +# Initialization specifics +# --------------------------------------------------------------- +variable "hostname" { default = "wikmd" } +variable "ip_address" { default = "192.168.0.56/24" } +variable "gateway" { default = "192.168.0.1" } +variable "password" { default = "example" } +variable "cores" { default = 1 } + +# --------------------------------------------------------------- +# Node & template file +# --------------------------------------------------------------- +variable "node_name" { default = "watari" } +variable "template_file_id" { default = "local:vztmpl/debian-13-standard_13.4-sudo_amd64.tar.zst" } + +# --------------------------------------------------------------- +# (Optional) Mount point volume name – set if you enable mounts +# --------------------------------------------------------------- +# variable "mount_volume" { default = "" } diff --git a/lxc/n8n/main.tf b/lxc/n8n/main.tf new file mode 100644 index 0000000..bea935f --- /dev/null +++ b/lxc/n8n/main.tf @@ -0,0 +1,98 @@ +terraform { + required_providers { + proxmox = { + source = "bpg/proxmox" + version = "0.97.1" + } + } +} + +# ------------------------------------------------------------------ +# Optional second disk – create it only when the flag is true. +# ------------------------------------------------------------------ +resource "proxmox_virtual_environment_container" "example_template" { + description = "Managed by Terraform" + start_on_boot = var.start_on_boot + unprivileged = var.unprivileged + + features { + nesting = var.nesting_enabled + } + + wait_for_ip { + ipv4 = true + } + + # ---- Disk(s) ---------------------------------------------------- + disk { + datastore_id = var.datastore_id # <- primary disk + size = var.disk_size_gb # in GB + } + + dynamic "disk" { # <-- optional second disk + for_each = var.second_disk_enabled ? [1] : [] + + content { + datastore_id = var.second_disk_datastore + size = var.second_disk_size_gb + } + } + + # ------------------------------------------------------------------ + # Mount points – uncomment and set if you need to mount a volume. + # ------------------------------------------------------------------ + #mount_point { + # volume = var.mount_volume + # size = "4G" + # path = "/mnt/local" + #} + + # ---- Initialization ------------------------------------------------- + initialization { + dns { + servers = ["1.1.1.1", "8.8.8.8"] + } + + hostname = var.hostname + + ip_config { + ipv4 { + address = var.ip_address + gateway = var.gateway + } + } + + user_account { + password = var.password + # keys = [trimspace(tls_private_key.example.public_key_openssh)] + } + } + + # ---- Network ---------------------------------------------------- + network_interface { + name = "veth0" + mtu = 1450 + } + + node_name = var.node_name + + operating_system { + template_file_id = var.template_file_id + type = "debian" + } + + tags = [ + "deb13", + "terraform", + ] + + cpu { + cores = var.cores + } + + startup { + order = "3" + up_delay = "60" + down_delay = "60" + } +} diff --git a/lxc/n8n/vars.tf b/lxc/n8n/vars.tf new file mode 100644 index 0000000..4b17798 --- /dev/null +++ b/lxc/n8n/vars.tf @@ -0,0 +1,50 @@ +# --------------------------------------------------------------- +# General container settings (things that rarely change) +# --------------------------------------------------------------- +variable "start_on_boot" { + type = bool + default = true +} + +variable "unprivileged" { + type = bool + default = true +} + +variable "nesting_enabled" { + type = bool + default = true +} + +# --------------------------------------------------------------- +# Disk sizes (primary + optional) +# --------------------------------------------------------------- +variable "datastore_id" { + type = string + default = "local-lvm" +} + +variable "disk_size_gb" { + type = number + default = 64 +} + +# --------------------------------------------------------------- +# Initialization specifics +# --------------------------------------------------------------- +variable "hostname" { default = "wikmd" } +variable "ip_address" { default = "192.168.0.56/24" } +variable "gateway" { default = "192.168.0.1" } +variable "password" { default = "example" } +variable "cores" { default = 1 } + +# --------------------------------------------------------------- +# Node & template file +# --------------------------------------------------------------- +variable "node_name" { default = "watari" } +variable "template_file_id" { default = "local:vztmpl/debian-13-standard_13.4-sudo_amd64.tar.zst" } + +# --------------------------------------------------------------- +# (Optional) Mount point volume name – set if you enable mounts +# --------------------------------------------------------------- +# variable "mount_volume" { default = "" } diff --git a/provider.tf b/provider.tf index 4180ced..6b583d9 100644 --- a/provider.tf +++ b/provider.tf @@ -63,4 +63,9 @@ module "owncloud" { module "uptimekuma" { source = "./lxc/uptimekuma" # Pass input variables as needed +} + +module "n8n" { + source = "./lxc/n8n" + # Pass input variables as needed } \ No newline at end of file