ez_docker/plugins/module_utils/service/mariadb.py
2024-12-13 22:48:16 +01:00

87 lines
2.4 KiB
Python

# Copyright: (c) 2024, Luca Bilke <luca@bil.ke>
# MIT License (see LICENSE)
from __future__ import annotations
import shlex
from typing import TYPE_CHECKING, Any
from ansible_collections.ssnailed.ez_compose.plugins.module_utils.service import ( # type: ignore[reportMissingTypeStubs]
common as service,
)
if TYPE_CHECKING:
from ansible_collections.ssnailed.ez_compose.plugins.module_utils.common import ( # type: ignore[reportMissingTypeStubs]
State,
)
EXTRA_ARGS = {
"backup": {"type": "bool", "default": True},
"database": {"type": "str", "required": True},
"username": {"type": "str", "required": True},
"password": {"type": "str", "required": True},
"root_password": {"type": "str"},
}
def helper(state: State, params: dict[str, Any]) -> State:
project_name: str = state.module.params["project_name"]
backup: bool = params["backup"]
database: str = params["database"]
username: str = params["username"]
password: str = params["password"]
root_password: str | None = params.get("root_password")
service_name: str = params["name"]
volumes = [
{
"source": service_name,
"target": "/var/lib/mysql",
"type": "volume",
},
]
environment = {
"MARIADB_DATABASE": database,
"MARIADB_USER": username,
"MARIADB_PASSWORD": password,
}
labels: dict[str, str] = {}
if root_password:
environment.update(
{
"MARIADB_ROOT_PASSWORD": root_password,
},
)
if backup:
labels.update(
{
"docker-volume-backup.archive-pre": (
"/bin/sh -c '"
"mysqldump --all-databases "
f"-u {shlex.quote(username)} "
f"-p {shlex.quote(password)} "
f">/backup/{shlex.quote(project_name)}.sql"
"'"
),
},
)
# mysqldump -psecret --all-databases > /tmp/dumps/dump.sql
volumes.append(
{
"type": "volume",
"source": f"{service_name}_backup",
"target": "/backup",
},
)
update = {
"environment": environment,
"volumes": volumes,
"labels": labels,
}
return service.update(params["name"], state, update)