From 27ce999c970f824a034f385f74b909663678c5f1 Mon Sep 17 00:00:00 2001 From: Yuris Cakranegara Date: Mon, 9 Jun 2025 00:11:27 +1000 Subject: [PATCH] feat(docker-service): enable custom pguid & uid and extra hosts --- .../docker-service/main.tf | 15 +++++++++--- .../docker-service/variables.tf | 23 ++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/modules/10-services-generic/docker-service/main.tf b/modules/10-services-generic/docker-service/main.tf index eee1b0a..26a3422 100644 --- a/modules/10-services-generic/docker-service/main.tf +++ b/modules/10-services-generic/docker-service/main.tf @@ -7,7 +7,7 @@ module "system_globals" { terraform { required_providers { docker = { - source = "kreuzwerker/docker" + source = "kreuzwerker/docker" } dotenv = { source = "germanbrew/dotenv" @@ -22,8 +22,8 @@ locals { default_env_vars = { TZ = module.system_globals.timezone - PUID = module.system_globals.puid - PGID = module.system_globals.pgid + PUID = var.puid != null ? var.puid : module.system_globals.puid + PGID = var.pgid != null ? var.pgid : module.system_globals.pgid } env_vars = merge(var.env_vars, local.default_env_vars) @@ -71,6 +71,15 @@ resource "docker_container" "service_container" { # Set the network mode (bridge, host, etc.) network_mode = local.network_mode + + # Add host mappings (entries for /etc/hosts) + dynamic "host" { + for_each = var.host_mappings + content { + host = host.value.host + ip = host.value.ip + } + } # Dynamically configure ports based on the provided list dynamic "ports" { diff --git a/modules/10-services-generic/docker-service/variables.tf b/modules/10-services-generic/docker-service/variables.tf index acfbe4b..902807d 100644 --- a/modules/10-services-generic/docker-service/variables.tf +++ b/modules/10-services-generic/docker-service/variables.tf @@ -65,6 +65,18 @@ variable "env_vars" { sensitive = true } +variable "puid" { + description = "User ID for the container" + type = number + default = null +} + +variable "pgid" { + description = "Group ID for the container" + type = number + default = null +} + variable "labels" { description = "Docker container labels" type = map(string) @@ -77,13 +89,22 @@ variable "monitoring" { default = true } +variable "host_mappings" { + description = "Additional host mappings for the container (/etc/hosts entries)" + type = list(object({ + host = string + ip = string + })) + default = [] +} + variable "healthcheck" { description = "Container healthcheck configuration" type = object({ test = list(string) interval = string timeout = string - start_period = string + start_period = optional(string) retries = number }) default = null