Implemented new filter for image logic in docker-compose.yml.j2 und env.j2 files

This commit is contained in:
Kevin Veen-Birkenbach 2025-06-18 14:28:06 +02:00
parent ced5e27453
commit 25ba93cbfd
No known key found for this signature in database
GPG Key ID: 44D8F11FD62F878E
2 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,20 @@
# filter_plugins/docker_image.py
def get_docker_image(applications, application_id, image_key):
app = applications.get(application_id, {})
docker = app.get("docker", {})
images = docker.get("images", {})
versions = docker.get("versions", {})
version = versions.get(image_key) or app.get("version")
image = images.get(image_key)
if not image or not version:
raise ValueError(f"Missing image or version for {application_id}:{image_key}")
return f"{image}:{version}"
class FilterModule(object):
def filters(self):
return {
'get_docker_image': get_docker_image,
}

View File

@ -0,0 +1,68 @@
#!/usr/bin/env python3
import os
import sys
import unittest
# Add filter_plugins/ to the import path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..", "filter_plugins")))
from docker_image import FilterModule
class TestGetDockerImage(unittest.TestCase):
def setUp(self):
self.get_docker_image = FilterModule().filters()["get_docker_image"]
def test_version_from_docker_versions(self):
applications = {
"akaunting": {
"version": "1.0.0",
"docker": {
"images": { "akaunting": "docker.io/akaunting/akaunting" },
"versions": { "akaunting": "2.0.0" }
}
}
}
result = self.get_docker_image(applications, "akaunting", "akaunting")
self.assertEqual(result, "docker.io/akaunting/akaunting:2.0.0")
def test_fallback_to_application_version(self):
applications = {
"akaunting": {
"version": "1.2.3",
"docker": {
"images": { "akaunting": "ghcr.io/akaunting/akaunting" },
"versions": {}
}
}
}
result = self.get_docker_image(applications, "akaunting", "akaunting")
self.assertEqual(result, "ghcr.io/akaunting/akaunting:1.2.3")
def test_missing_image_raises_error(self):
applications = {
"akaunting": {
"version": "1.0.0",
"docker": {
"images": {},
"versions": {}
}
}
}
with self.assertRaises(ValueError):
self.get_docker_image(applications, "akaunting", "akaunting")
def test_missing_version_raises_error(self):
applications = {
"akaunting": {
"docker": {
"images": { "akaunting": "some/image" },
"versions": {}
}
}
}
with self.assertRaises(ValueError):
self.get_docker_image(applications, "akaunting", "akaunting")
if __name__ == "__main__":
unittest.main()