Files
homelab/opentofu/modules/proxmox_lxc/variables.tf
k.rennerandClaude Opus 4.8 3475c2013c
ci/woodpecker/push/deploy-infrastructure Pipeline failed
opentofu: give the woodpecker-agent LXCs IPv6 (the actual root cause)
The agents are unprivileged Proxmox LXCs whose ip_config had only an ipv4
block — no IPv6 at all. So no matter how Docker/Woodpecker were configured
for v6 (daemon.json ip6tables, WOODPECKER_BACKEND_DOCKER_ENABLE_IPV6), the
step containers had no v6 uplink to NAT onto, and deploys to v6-only hosts
(proxy-1) failed 'Network unreachable'. IPv4 NAT works in these LXCs, so v6
NAT will too once the LXC actually has v6.

Add an optional ipv6 block to the proxmox_lxc module (auto/dhcp/static) and
set ipv6_address = "auto" (SLAAC off v40srv) for the agents.

NOTE: `initialization` is in the module's ignore_changes, so this does NOT
apply to running agents on a normal apply — they must be RECREATED to pick
up v6 (they're tagged `transient`). Recreate one at a time to keep CI up,
then re-run install-woodpecker-agent.yml on each.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:07:11 +02:00

175 lines
3.1 KiB
Terraform

variable "hostname" {
type = string
}
variable "vmid" {
type = number
}
variable "target_node" {
type = string
}
variable "memory" {
type = number
default = 512
}
variable "cores" {
type = number
default = 1
}
variable "unprivileged" {
type = bool
default = true
}
variable "network_bridge" {
description = "The network bridge to attach the container to"
type = string
default = "v40srv"
}
variable "ip_address" {
type = string
description = "Fixed IP address for the container network configuration."
default = null
}
variable "ipv6_address" {
type = string
description = "IPv6 config for the container: \"auto\" (SLAAC), \"dhcp\", or a static CIDR. null disables IPv6."
default = null
}
variable "ipv6_gateway" {
type = string
description = "IPv6 gateway (only for a static ipv6_address; leave null for auto/dhcp)."
default = null
}
variable "tags" {
type = string
default = ""
}
variable "ostemplate" {
type = string
default = "local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst"
}
variable "ssh_public_keys" {
type = string
default = null
}
variable "storage" {
type = string
default = "local"
}
variable "disk_size" {
type = string
default = "4G"
}
variable "onboot" {
type = bool
default = true
}
variable "start" {
type = bool
default = true
}
variable "cpuunits" {
type = number
default = 1024
}
variable "description" {
type = string
default = null
}
variable "hastate" {
type = string
default = null
}
variable "hagroup" {
type = string
default = null
}
variable "ostype" {
type = string
default = "debian"
}
variable "ingress_cnames" {
description = "List of CNAMEs pointing to ingress.renner.uno"
type = list(string)
default = []
}
variable "cnames" {
description = "List of CNAMEs pointing to the container's hostname"
type = list(string)
default = []
}
variable "features" {
type = object({
nesting = optional(bool, true)
fuse = optional(bool, false)
keyctl = optional(bool, false)
mknod = optional(bool, false)
})
default = {
nesting = true
fuse = false
keyctl = false
mknod = false
}
}
variable "mountpoints" {
type = list(object({
key = string
slot = number
storage = string
mp = string
size = string
acl = optional(bool, false)
backup = optional(bool, false)
}))
default = []
}
variable "ansible_playbook" {
description = "Path to the ansible playbook to run after creation"
type = string
default = null
}
variable "mac_address" {
description = "Override MAC address for the container network interface."
type = string
default = null
}
variable "device_passthrough" {
description = "Device passthrough configuration for the container"
type = list(object({
path = string
gid = optional(number)
uid = optional(number)
mode = optional(string, "0660")
deny_write = optional(bool, false)
}))
default = []
}