diff --git a/infrastructure/.gitignore b/infrastructure/.gitignore new file mode 100644 index 0000000..59ac149 --- /dev/null +++ b/infrastructure/.gitignore @@ -0,0 +1,32 @@ +# Terraform working dir +**/.terraform/* + +# Terraform state +*.tfstate +*.tfstate.* +**/terraform.tfstate +**/terraform.tfstate.* + +# Crash logs +crash.log +crash.*.log + +# Variable files with real values +*.tfvars +*.tfvars.json + +# CLI config / overrides +override.tf +override.tf.json +*_override.tf +*_override.tf.json +.terraformrc +terraform.rc + +# Plan files +*.tfplan +plan.out + +# Local backend/state folders if you make them +state/ +artifacts/ diff --git a/infrastructure/terraform/bootstrap/backend.tf b/infrastructure/terraform/bootstrap/backend.tf new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/terraform/bootstrap/main.tf b/infrastructure/terraform/bootstrap/main.tf new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/terraform/bootstrap/outputs.tf b/infrastructure/terraform/bootstrap/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/terraform/bootstrap/providers.tf b/infrastructure/terraform/bootstrap/providers.tf new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/terraform/bootstrap/variables.tf b/infrastructure/terraform/bootstrap/variables.tf new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/terraform/docker/.terraform.lock.hcl b/infrastructure/terraform/docker/.terraform.lock.hcl new file mode 100644 index 0000000..a11a96b --- /dev/null +++ b/infrastructure/terraform/docker/.terraform.lock.hcl @@ -0,0 +1,23 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/kreuzwerker/docker" { + version = "3.9.0" + constraints = "~> 3.0" + hashes = [ + "h1:EAdNh5KgGPJT5jm848MRIfNfHUVJeTBdKKcFLax5g38=", + "zh:0ead8281830e9b9496651282235d9a139ba1b1b6ff79e395eb8c78658dc446b9", + "zh:0f17d37d8d3872df3fb75c68b5272e0c981343f53b506a9675b4405191edd3ef", + "zh:11d50b37323874427c6d2a08b737d3c7707c8301fdd236c94485cf2828d0b14b", + "zh:32f6f9b847446054e2db3d72886ef2f1d1aa51a6d0dac42340b07dad18e3f28f", + "zh:5ea5c67668b5dcbda560dc6104b788a9bfc974d52f02f7886889b77cc0e5d248", + "zh:5fb19a0b07edc344cd3ddeeb9cfb3d183089deb7a6a94a7b22a583aa1712596b", + "zh:602a7ece444e2a142ec5245abb98e7a1a990a68afae2df63b6c85ec084f0c5d7", + "zh:693dce278524ad8a6d6c9dd7a01bcd63bb85189639198f8d0b044ab0e5099401", + "zh:72e9911568103576c6a78fa38841cfd45eeb88ad22a2c649eb140a377a5b3c26", + "zh:956b62b6857cbb467b50158601f01b1203daa34cbd447dcc7f044c327e878b68", + "zh:9d372bac0d4479868b34485fb4966ba7bb525938f818b6a625f4977004ea83f9", + "zh:e06658a51427f9f53dbdb06263406fc1bc56d1a4fb5e7eb660d7cdfc22f596bd", + "zh:eee38dadf672b946419af25160eae7c03fc2afbb14f39f2f1d2a7404d647e2f7", + ] +} diff --git a/infrastructure/terraform/docker/main.tf b/infrastructure/terraform/docker/main.tf new file mode 100644 index 0000000..8114314 --- /dev/null +++ b/infrastructure/terraform/docker/main.tf @@ -0,0 +1,16 @@ +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "~> 3.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} +resource "docker_container" "searxng" { + name = "searxng-webapp" + image = "searxng/searxng" +} diff --git a/monitoring/node-red/data/context/00b02bbd01c91485/flow.json b/monitoring/node-red/data/context/00b02bbd01c91485/flow.json index 2e883c9..effadaa 100644 --- a/monitoring/node-red/data/context/00b02bbd01c91485/flow.json +++ b/monitoring/node-red/data/context/00b02bbd01c91485/flow.json @@ -1,3 +1,10 @@ { - "dockerUpdateAttempts": {} + "dockerUpdateAttempts": { + "nextcloud-redis|redis:latest|docker": { + "time": 1776150342324, + "status": "test_failed", + "failedAt": 1776150408748, + "notified": true + } + } } \ No newline at end of file diff --git a/monitoring/node-red/data/update-events.ndjson b/monitoring/node-red/data/update-events.ndjson index d6a1d5b..ea910f4 100644 --- a/monitoring/node-red/data/update-events.ndjson +++ b/monitoring/node-red/data/update-events.ndjson @@ -137,3 +137,21 @@ {"ts":"2026-04-14T02:30:22.079Z","flow":"docker-updates","event":"completed","container":"update-test","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} {"ts":"2026-04-14T02:31:15.896Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"failed","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} {"ts":"2026-04-14T02:31:15.896Z","flow":"docker-updates","event":"completed","container":"telegraf","project":"unknown","host":"docker","status":"locked","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:06:16.689Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:06:48.773Z","flow":"docker-updates","event":"completed","container":"nextcloud-redis","project":"unknown","host":"docker","status":"failed","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:06:48.781Z","flow":"docker-updates","event":"completed","container":"nextcloud-redis","project":"unknown","host":"docker","status":"locked","success":0,"failed":1,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:07:07.846Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:11:02.306Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:12:00.541Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:16:00.956Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:17:00.656Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:20:55.223Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:21:52.064Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:25:53.292Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:26:50.450Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:30:59.645Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:31:51.975Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:35:51.577Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:36:47.627Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:40:51.544Z","flow":"docker-updates","event":"completed","container":"searxng-webapp","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""} +{"ts":"2026-04-14T07:41:47.538Z","flow":"docker-updates","event":"completed","container":"prometheus","project":"unknown","host":"docker","status":"success","success":1,"failed":0,"duration_ms":0,"code":0,"error":""}