ci/woodpecker/push/deploy-infrastructure Pipeline failed
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>
175 lines
3.1 KiB
Terraform
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 = []
|
|
}
|