fix services with service network mode

This commit is contained in:
Luca Bilke 2025-01-28 11:49:52 +01:00
parent ed7df54c19
commit 9f0a3eb7b4
Signed by: luca
GPG key ID: F6E11C9BAA7C82F5
3 changed files with 571 additions and 2 deletions
galaxy.yml
plugins/module_utils/service
test.json

View file

@ -2,7 +2,7 @@ namespace: snailed
name: ez_docker
version: 3.0.4
version: 3.0.5
readme: README.md

View file

@ -54,9 +54,20 @@ def get_default_args(state: State, helper_name: str) -> dict[str, Any]:
settings: dict[str, Any] = state.params.get("settings", {})
service_default_args: dict[str, Any] = settings.get("service_default_args", {})
default_args: dict[str, Any] = service_default_args.get(helper_name, {})
return default_args
def clean_service(state: State, service_name: str) -> State:
project = copy.deepcopy(state.after)
service = project["services"].get(service_name, {})
if service.get("network_mode", "").startswith("service:"):
del service["hostname"]
return replace(state, after=project)
def apply_update(state: State, service_name: str, update: dict[str, Any]) -> State:
project = copy.deepcopy(state.after)
service = project["services"].get(service_name, {})
@ -90,5 +101,6 @@ def run_helper(
if not (overwrite := params.get("overwrite")):
overwrite = params.get("definition", {})
state = apply_update(state, params["name"], overwrite)
return apply_update(state, params["name"], overwrite)
return clean_service(state, params["name"])

557
test.json Normal file
View file

@ -0,0 +1,557 @@
{
"ANSIBLE_MODULE_ARGS": {
"_ansible_check_mode": true,
"_ansible_diff": true,
"name": "media",
"project_dir": "/var/lib/ez_compose",
"services": {
"custom": [
{
"definition": {
"devices": ["/dev/dri/renderD128:/dev/dri/renderD128"],
"group_add": ["105"],
"image": "jellyfin/jellyfin:10.10.3",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "jellyfin_cache",
"target": "/cache",
"type": "volume"
},
{
"source": "jellyfin_config",
"target": "/config",
"type": "volume"
},
{
"source": "/tank/media",
"target": "/tank/media",
"type": "bind"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://media.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/jellyfin.png",
"name": "Jellyfin",
"widget": {
"key": "redacted",
"type": "jellyfin",
"url": "http://media_jellyfin:8096"
}
}
],
"traefik_router": [
{
"rule": "Host(`media.snaile.de`)"
}
]
},
"name": "jellyfin"
},
{
"definition": {
"image": "fallenbagel/jellyseerr:2.3.0",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "jellyseer_config",
"target": "/app/config",
"type": "volume"
}
]
},
"label_helpers": {
"homepage": [
{
"group": "Media",
"href": "https://requests.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/jellyseerr.png",
"name": "Jellyseerr",
"widget": {
"key": "redacted",
"type": "jellyseerr",
"url": "http://media_jellyseerr:5055"
}
}
],
"traefik_router": [
{
"rule": "Host(`requests.snaile.de`)"
}
]
},
"name": "jellyseerr"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "lscr.io/linuxserver/prowlarr:1.29.2",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "prowlarr_config",
"target": "/config",
"type": "volume"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://prowlarr.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/prowlarr.png",
"name": "Prowlarr",
"widget": {
"key": "redacted",
"type": "prowlarr",
"url": "http://media_prowlarr:9696"
}
}
],
"traefik_middleware": [
{
"middleware": "basicAuth",
"settings": {
"users": "redacted"
}
}
],
"traefik_router": [
{
"middlewares": ["media_prowlarr_http_basicauth"],
"rule": "Host(`prowlarr.snaile.de`)"
}
]
},
"name": "prowlarr"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "lscr.io/linuxserver/radarr:5.17.2",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "radarr_config",
"target": "/config",
"type": "volume"
},
{
"source": "/tank",
"target": "/tank",
"type": "bind"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://radarr.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/radarr.png",
"name": "Radarr",
"widget": {
"key": "redacted",
"type": "radarr",
"url": "http://media_radarr:7878"
}
}
],
"traefik_middleware": [
{
"middleware": "basicAuth",
"settings": {
"users": "redacted"
}
}
],
"traefik_router": [
{
"middlewares": ["media_radarr_http_basicauth"],
"rule": "Host(`radarr.snaile.de`)"
}
]
},
"name": "radarr"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "lscr.io/linuxserver/sonarr:4.0.12",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "sonarr_config",
"target": "/config",
"type": "volume"
},
{
"source": "/tank",
"target": "/tank",
"type": "bind"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://sonarr.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/sonarr.png",
"name": "Sonarr",
"widget": {
"key": "redacted",
"type": "sonarr",
"url": "http://media_sonarr:7878"
}
}
],
"traefik_middleware": [
{
"middleware": "basicAuth",
"settings": {
"users": "redacted"
}
}
],
"traefik_router": [
{
"middlewares": ["media_sonarr_http_basicauth"],
"rule": "Host(`sonarr.snaile.de`)"
}
]
},
"name": "sonarr"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "ghcr.io/recyclarr/recyclarr:7.4.0",
"networks": {
"internal": {}
},
"volumes": [
{
"source": "recyclarr_config",
"target": "/config",
"type": "volume"
}
]
},
"name": "recyclarr"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "lscr.io/linuxserver/sabnzbd:4.4.1",
"networks": {
"internal": {},
"proxy": {}
},
"volumes": [
{
"source": "sabnzbd_config",
"target": "/config",
"type": "volume"
},
{
"source": "/tank/nzb",
"target": "/tank/nzb",
"type": "bind"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://nzb.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/sabnzbd.png",
"name": "SABnzbd",
"widget": {
"key": "redacted",
"type": "sabnzbd",
"url": "http://media_sabnzbd:8080"
}
}
],
"traefik_middleware": [
{
"middleware": "basicAuth",
"settings": {
"users": "redacted"
}
}
],
"traefik_router": [
{
"middlewares": ["media_sabnzbd_http_basicauth"],
"rule": "Host(`nzb.snaile.de`)"
}
]
},
"name": "sabnzbd"
},
{
"definition": {
"cap_add": ["NET_ADMIN"],
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "linuxserver/wireguard:1.0.20210914",
"networks": {
"internal": {},
"proxy": {}
},
"sysctls": {
"net.ipv4.conf.all.src_valid_mark": "1",
"net.ipv6.conf.all.disable_ipv6": "0"
},
"volumes": [
{
"source": "tunnel_config",
"target": "/config",
"type": "volume"
}
]
},
"label_helpers": {
"traefik_middleware": [
{
"middleware": "basicAuth",
"name": "media_qbittorrent_http",
"settings": {
"users": "redacted"
}
}
],
"traefik_router": [
{
"middlewares": ["media_qbittorrent_http_basicauth"],
"name": "media_qbittorrent_http",
"rule": "Host(`torrent.snaile.de`)",
"service": "media_qbittorrent_http"
}
],
"traefik_service": [
{
"name": "media_qbittorrent_http",
"port": 8080
}
]
},
"name": "tunnel"
},
{
"definition": {
"environment": {
"QBITTORRENT_PASS": "redacted",
"QBITTORRENT_PORT": "8080",
"QBITTORRENT_SERVER": "media_tunnel",
"QBITTORRENT_USER": "luca",
"VPN_GATEWAY": "10.2.0.1"
},
"image": "git.snaile.de/snailed/qbittorrent-natpmp:2025.0127.1503",
"network_mode": "service:tunnel",
"volumes": [
{
"read_only": true,
"source": "/var/run/docker.sock",
"target": "/var/run/docker.sock",
"type": "bind"
}
]
},
"name": "natpmp"
},
{
"definition": {
"environment": {
"PGID": 1000,
"PUID": 1000
},
"image": "linuxserver/qbittorrent:20.04.1",
"network_mode": "service:tunnel",
"volumes": [
{
"source": "qbittorrent_config",
"target": "/config/qBittorrent",
"type": "volume"
},
{
"source": "/tank/torrent",
"target": "/tank/torrent",
"type": "bind"
}
]
},
"label_helpers": {
"docker_volume_backupper": [
{
"stop": true
}
],
"homepage": [
{
"group": "Media",
"href": "https://torrent.snaile.de/",
"icon": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/png/qbittorrent.png",
"name": "qBittorrent",
"widget": {
"type": "qbittorrent",
"url": "http://media_tunnel:8080"
}
}
]
},
"name": "qbittorrent"
}
],
"docker_socket_proxy": [
{
"overwrite": {
"environment": {
"CONTAINERS": "1",
"EXEC": "1",
"INFO": "1",
"NODES": "1",
"POST": "1",
"PROJECTS": "1",
"TASKS": "1"
}
},
"read_only": false
}
],
"docker_volume_backupper": [
{
"backup_volumes": [
"jellyfin_config",
"jellyseer_config",
"prowlarr_config",
"sonarr_config",
"radarr_config",
"sabnzbd_config",
"qbittorrent_config"
],
"docker_socket_proxy": "media_docker_socket_proxy"
}
]
},
"settings": {
"default_definition": {
"environment": {
"TZ": "Europe/Berlin"
}
},
"external_networks": ["proxy"],
"external_volumes": [],
"label_default_args": {
"traefik_router": {
"certresolver": "letsencrypt",
"entrypoints": ["web-secure"],
"middlewares": ["hsts@file"]
}
},
"service_default_args": {
"docker_volume_backupper": {
"archive": "/tank/docker-backups"
}
},
"service_default_definitions": {
"docker_in_docker": {
"image": "docker:27.5.1-dind"
},
"docker_socket_proxy": {
"image": "tecnativa/docker-socket-proxy:0.3.0"
},
"docker_volume_backupper": {
"environment": {
"BACKUP_CRON_EXPRESSION": "0 6 * * *",
"BACKUP_RETENTION_DAYS": "7",
"EXEC_FORWARD_OUTPUT": true,
"GPG_PASSPHRASE": "redacted",
"GZIP_PARALLELISM": "2",
"NOTIFICATION_URLS": "redacted",
"SSH_HOST_NAME": "redacted",
"SSH_PASSWORD": "redacted",
"SSH_PORT": "23",
"SSH_REMOTE_PATH": "/home/docker-backups",
"SSH_USER": "redacted"
},
"image": "offen/docker-volume-backup:v2.43.1"
},
"mariadb": {
"image": "mariadb:11.6.2"
},
"postgres": {
"image": "postgres:16.6-alpine"
},
"redis": {
"image": "redis:7.4.2-alpine"
}
}
}
}
}