fix services with service network mode
This commit is contained in:
parent
ed7df54c19
commit
9f0a3eb7b4
3 changed files with 571 additions and 2 deletions
|
@ -2,7 +2,7 @@ namespace: snailed
|
|||
|
||||
name: ez_docker
|
||||
|
||||
version: 3.0.4
|
||||
version: 3.0.5
|
||||
|
||||
readme: README.md
|
||||
|
||||
|
|
|
@ -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
557
test.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue