Mqtt as a module.

This commit is contained in:
Greyscale 2025-01-21 21:38:56 +01:00
parent 94e1e630fe
commit e63eedc370
Signed by: grey
GPG key ID: DDB392AE64B32D89
6 changed files with 113 additions and 0 deletions

45
products/mqtt/inputs.tf Normal file
View file

@ -0,0 +1,45 @@
variable "stack_name" {
default = "mqtt"
type = string
description = "The name of the stack to create."
}
variable "networks" {
type = list(object({
name = string
id = string
}))
default = []
description = "A list of network names to attach the service to."
}
variable "traefik" {
default = null
type = object({
domain = string
port = optional(number)
non-ssl = optional(bool, true)
ssl = optional(bool, false)
rule = optional(string)
middlewares = optional(list(string))
network = optional(object({ name = string, id = string }))
basic-auth-users = optional(list(string))
})
description = "Whether to enable traefik for the service."
}
variable "placement_constraints" {
default = []
type = list(string)
description = "Docker Swarm placement constraints"
}
variable "mounts" {
type = map(string)
default = {}
description = "A map of host paths to container paths to mount. The key is the host path, and the value is the container path."
}
variable "ports" {
type = list(object({
host = optional(number, null)
container = number
protocol = optional(string, "tcp")
}))
default = []
}

View file

@ -0,0 +1,16 @@
listener 1883 0.0.0.0
socket_domain ipv4
pid_file /tmp/mosquitto.pid
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/logs/mosquitto.log
log_dest stdout
#password_file /mosquitto/config/mosquitto.passwd
allow_anonymous true
listener 8080 127.0.0.1
protocol websockets

19
products/mqtt/mqtt.tf Normal file
View file

@ -0,0 +1,19 @@
module "service" {
source = "../../docker/service"
image = "eclipse-mosquitto:latest"
service_name = "mqtt"
stack_name = var.stack_name
networks = concat(var.networks, [module.network.network])
traefik = var.traefik
placement_constraints = var.placement_constraints
mounts = var.mounts
ports = var.ports
configs = {
"/mosquitto/config/mosquitto.conf" = templatefile("${path.module}/mosquitto.conf", {})
}
volumes = {
"mqtt_data" = "/mosquitto/data"
"mqtt_logs" = "/mosquitto/logs"
}
converge_enable = false
}

4
products/mqtt/network.tf Normal file
View file

@ -0,0 +1,4 @@
module "network" {
source = "../../docker/network"
stack_name = var.stack_name
}

9
products/mqtt/outputs.tf Normal file
View file

@ -0,0 +1,9 @@
output "docker_service" {
value = module.service.docker_service
}
output "network" {
value = module.network.network
}
output "endpoint" {
value = replace(module.service.endpoint, "http://", "mqtt://")
}

View file

@ -0,0 +1,20 @@
terraform {
required_version = "~> 1.6"
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.5"
}
htpasswd = {
source = "loafoe/htpasswd"
version = "~> 1.0"
}
}
}