From 0975c10939dce849c8e85d881d356e03409988ef Mon Sep 17 00:00:00 2001
From: Matthew Baggett <matthew@baggett.me>
Date: Sun, 24 Nov 2024 10:50:28 +0100
Subject: [PATCH] Make pruner a module.

---
 docker/pruner/inputs.tf    |  5 +++++
 docker/pruner/outputs.tf   |  3 +++
 docker/pruner/pruner.tf    | 12 ++++++++++++
 docker/pruner/terraform.tf | 12 ++++++++++++
 docker/service/locals.tf   | 14 ++++++--------
 docker/service/service.tf  |  7 ++++---
 6 files changed, 42 insertions(+), 11 deletions(-)
 create mode 100644 docker/pruner/inputs.tf
 create mode 100644 docker/pruner/outputs.tf
 create mode 100644 docker/pruner/pruner.tf
 create mode 100644 docker/pruner/terraform.tf

diff --git a/docker/pruner/inputs.tf b/docker/pruner/inputs.tf
new file mode 100644
index 0000000..c8531e4
--- /dev/null
+++ b/docker/pruner/inputs.tf
@@ -0,0 +1,5 @@
+variable "stack_name" {
+  type        = string
+  description = "The name of the stack to deploy the service to."
+  default     = "docker"
+}
\ No newline at end of file
diff --git a/docker/pruner/outputs.tf b/docker/pruner/outputs.tf
new file mode 100644
index 0000000..f2beb8c
--- /dev/null
+++ b/docker/pruner/outputs.tf
@@ -0,0 +1,3 @@
+output "docker_service" {
+  value = module.pruner.docker_service
+}
\ No newline at end of file
diff --git a/docker/pruner/pruner.tf b/docker/pruner/pruner.tf
new file mode 100644
index 0000000..97a43ef
--- /dev/null
+++ b/docker/pruner/pruner.tf
@@ -0,0 +1,12 @@
+module "pruner" {
+  source       = "../service"
+  stack_name   = var.stack_name
+  service_name = "pruner"
+  image        = "matthewbaggett/pruner:latest"
+  global       = true
+  environment_variables = {
+    INTERVAL_SECONDS = 21600 // About every 6 hours
+  }
+  mounts         = { "/var/run/docker.sock" = "/var/run/docker.sock" }
+  restart_policy = "any"
+}
diff --git a/docker/pruner/terraform.tf b/docker/pruner/terraform.tf
new file mode 100644
index 0000000..e928716
--- /dev/null
+++ b/docker/pruner/terraform.tf
@@ -0,0 +1,12 @@
+terraform {
+  required_version = "~> 1.6"
+
+  required_providers {
+    docker = {
+      source  = "kreuzwerker/docker"
+      version = "~>3.0"
+    }
+  }
+}
+
+
diff --git a/docker/service/locals.tf b/docker/service/locals.tf
index c318d97..45ead43 100644
--- a/docker/service/locals.tf
+++ b/docker/service/locals.tf
@@ -7,13 +7,11 @@ locals {
 
   # Define service labels en-masse
   labels = merge(var.labels, {
-    "com.docker.stack.namespace" = var.stack_name
-    "com.docker.stack.image"     = data.docker_registry_image.image.name
-    "com.docker.stack.hash"      = data.docker_registry_image.image.sha256_digest
-    "ooo.grey.service.stack"     = var.stack_name
-    "ooo.grey.service.name"      = var.service_name
-    #"ooo.grey.service.created"   = timestamp()
-    "ooo.grey.service.image" = data.docker_registry_image.image.name
-    "ooo.grey.service.hash"  = data.docker_registry_image.image.sha256_digest
+    "com.docker.stack.namespace"    = var.stack_name
+    "com.docker.stack.image"        = data.docker_registry_image.image.name
+    "ooo.grey.service.stack"        = var.stack_name
+    "ooo.grey.service.name"         = var.service_name
+    "ooo.grey.service.image"        = data.docker_registry_image.image.name
+    "ooo.grey.service.image.digest" = data.docker_registry_image.image.sha256_digest
   })
 }
\ No newline at end of file
diff --git a/docker/service/service.tf b/docker/service/service.tf
index 9904357..4c27db2 100644
--- a/docker/service/service.tf
+++ b/docker/service/service.tf
@@ -37,9 +37,10 @@ resource "docker_service" "instance" {
       dynamic "mounts" {
         for_each = var.mounts
         content {
-          target = mounts.value
-          source = mounts.key
-          type   = "bind"
+          target    = mounts.value
+          source    = mounts.key
+          type      = "bind"
+          read_only = false # Nice assumption bro.
         }
       }