Files
docker-mods-uptime-kuma-tim…/root/app/swagDocker.py
T
2023-08-22 15:29:02 +02:00

51 lines
1.8 KiB
Python

import docker
class SwagDocker:
"""
A service class for interacting with Docker containers that are used by SWAG mods.
"""
client = None
_containers = None
_labelPrefix = None
def __init__(self, labelPrefix: str):
self._labelPrefix = labelPrefix
self.client = docker.from_env()
def getSwagContainers(self):
"""
Retrieve Docker containers filtered by "swag.my_mod.enabled=true":
>>> swag = SwagDocker("swag.my_mod")
>>> containers = swag.getSwagContainers()
"""
if self._containers is None:
self._containers = self.client.containers.list(
filters={"label": [f"{self._labelPrefix}.enabled=true"]})
return self._containers
def parseContainerLabels(self, containerLabels, extraPrefix=""):
"""
Having following example container labels:
swag.my_mod.enabled: true
swag.my_mod.config.apple: "123"
swag.my_mod.config.orange: "456"
>>> for container in containers:
>>> containerConfigA = swagDocker.parseContainerLabels(container.labels)
# Above will return {"enabled": true, "config.apple": "123", "config.orange": "456"}
>>> containerConfigB = swagDocker.parseContainerLabels(container.labels, ".config.")
# Above will return {"apple": "123", "orange": "456"}
"""
filteredContainerLabels = {}
fullPrefix = f"{self._labelPrefix}{extraPrefix}"
prefix_length = len(fullPrefix)
for label, value in containerLabels.items():
if label.startswith(fullPrefix):
parsedLabel = label[prefix_length:]
filteredContainerLabels[parsedLabel] = value
return filteredContainerLabels