# Copyright: (c) 2025, Luca Bilke <luca@bil.ke> # MIT License (see LICENSE) from __future__ import annotations from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from ansible_collections.snailed.ez_compose.plugins.module_utils.models import State EXTRA_ARGS = { "archive": {"type": "path"}, "backup_volumes": {"type": "list", "elements": "str", "required": True}, } def helper(state: State, params: dict[str, Any]) -> dict[str, Any]: project_name: str = state.module.params["name"] archive: str | None = params.get("archive") backup_volumes: list[str] | None = params["backup_volumes"] service_name = params["name"] volumes: list[dict[str, Any]] = [ { "type": "volume", "source": volume, "target": f"/backup/{volume}", "read_only": True, } for volume in (backup_volumes or []) ] environment = { "BACKUP_FILENAME": f"{project_name}-%Y-%m-%dT%H-%M-%S.{'{{ .Extension }}'}", "BACKUP_LATEST_SYMLINK": f"{project_name}-latest", "BACKUP_PRUNING_PREFIX": f"{project_name}-", "BACKUP_STOP_DURING_BACKUP_LABEL": project_name, "DOCKER_HOST": f"tcp://{project_name}_{service_name}_socket_proxy:2375", } if archive: environment["BACKUP_ARCHIVE"] = "/archive" volumes.append( { "type": "bind", "source": f"{archive}/{project_name}", "target": "/archive", "bind": {"create_host_path": True}, }, ) return { "environment": environment, "volumes": volumes, }