From d72b0aed960db850647263679729b12de396ab75 Mon Sep 17 00:00:00 2001 From: Assil Ksiksi Date: Sun, 5 Nov 2023 21:53:41 -0500 Subject: [PATCH] add dependency on container network --- compose.go | 16 ++++++++++------ testdata/TestDocker_WithProject_out.nix | 6 ++++-- testdata/TestDocker_out.nix | 6 ++++-- testdata/TestPodman_WithProject_out.nix | 6 ++++-- testdata/TestPodman_out.nix | 6 ++++-- testdata/docker-compose.yml | 5 +++-- 6 files changed, 29 insertions(+), 16 deletions(-) diff --git a/compose.go b/compose.go index 84905ee..f5f990d 100644 --- a/compose.go +++ b/compose.go @@ -193,6 +193,7 @@ func (g *Generator) postProcessContainers(containers []*NixContainer) { targetService := strings.Split(networkMode, ":")[1] targetContainerName := serviceToContainer[targetService].Name c.ExtraOptions = append(c.ExtraOptions, "--network=container:"+targetContainerName) + c.DependsOn = append(c.DependsOn, targetContainerName) } dependsOn := c.service.GetDependencies() @@ -242,15 +243,13 @@ func (g *Generator) buildNixContainer(service types.ServiceConfig) (*NixContaine c.EnvFiles = g.EnvFiles } + for _, v := range service.Volumes { + c.Volumes[v.Source] = v.String() + } + for _, name := range c.Networks { networkName := g.Project.With(name) c.ExtraOptions = append(c.ExtraOptions, fmt.Sprintf("--network=%s", networkName)) - // Allow other containers to use service name as an alias when a project is set. - c.ExtraOptions = append(c.ExtraOptions, fmt.Sprintf("--network-alias=%s", service.Name)) - } - - for _, v := range service.Volumes { - c.Volumes[v.Source] = v.String() } // https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode @@ -261,8 +260,13 @@ func (g *Generator) buildNixContainer(service types.ServiceConfig) (*NixContaine case strings.HasPrefix(networkMode, "container:"): // container:[name] mode is supported by both Docker and Podman. c.ExtraOptions = append(c.ExtraOptions, networkMode) + containerName := strings.TrimSpace(strings.Split(networkMode, ":")[1]) + c.DependsOn = append(c.DependsOn, containerName) } + // Allow other containers to use service name as an alias. + c.ExtraOptions = append(c.ExtraOptions, fmt.Sprintf("--network-alias=%s", service.Name)) + for _, ip := range service.DNS { c.ExtraOptions = append(c.ExtraOptions, "--dns="+ip) } diff --git a/testdata/TestDocker_WithProject_out.nix b/testdata/TestDocker_WithProject_out.nix index 7de952e..01bf101 100644 --- a/testdata/TestDocker_WithProject_out.nix +++ b/testdata/TestDocker_WithProject_out.nix @@ -31,12 +31,12 @@ logDriver = "journald"; autoStart = false; extraOptions = [ - "--network=myproject_default" "--network-alias=jellyseerr" "--dns=1.1.1.1" "--log-opt=compress=true" "--log-opt=max-file=3" "--log-opt=max-size=10m" + "--network=container:myproject_sabnzbd" ]; }; systemd.services."docker-jellyseerr" = { @@ -144,6 +144,9 @@ "traefik.http.routers.transmission.tls.certresolver" = "htpc"; "traefik.http.services.transmission.loadbalancer.server.port" = "9091"; }; + dependsOn = [ + "myproject_sabnzbd" + ]; logDriver = "journald"; autoStart = false; extraOptions = [ @@ -208,7 +211,6 @@ docker network inspect myproject_default || docker network create myproject_default ''; wantedBy = [ - "docker-jellyseerr.service" "docker-myproject_sabnzbd.service" "docker-photoprism-mariadb.service" "docker-torrent-client.service" diff --git a/testdata/TestDocker_out.nix b/testdata/TestDocker_out.nix index 1341239..8130d54 100644 --- a/testdata/TestDocker_out.nix +++ b/testdata/TestDocker_out.nix @@ -31,12 +31,12 @@ logDriver = "journald"; autoStart = false; extraOptions = [ - "--network=default" "--network-alias=jellyseerr" "--dns=1.1.1.1" "--log-opt=compress=true" "--log-opt=max-file=3" "--log-opt=max-size=10m" + "--network=container:sabnzbd" ]; }; systemd.services."docker-jellyseerr" = { @@ -144,6 +144,9 @@ "traefik.http.routers.transmission.tls.certresolver" = "htpc"; "traefik.http.services.transmission.loadbalancer.server.port" = "9091"; }; + dependsOn = [ + "sabnzbd" + ]; logDriver = "journald"; autoStart = false; extraOptions = [ @@ -208,7 +211,6 @@ docker network inspect default || docker network create default ''; wantedBy = [ - "docker-jellyseerr.service" "docker-photoprism-mariadb.service" "docker-sabnzbd.service" "docker-torrent-client.service" diff --git a/testdata/TestPodman_WithProject_out.nix b/testdata/TestPodman_WithProject_out.nix index eecd215..1bf871d 100644 --- a/testdata/TestPodman_WithProject_out.nix +++ b/testdata/TestPodman_WithProject_out.nix @@ -36,12 +36,12 @@ logDriver = "journald"; autoStart = false; extraOptions = [ - "--network=myproject_default" "--network-alias=jellyseerr" "--dns=1.1.1.1" "--log-opt=compress=true" "--log-opt=max-file=3" "--log-opt=max-size=10m" + "--network=container:myproject_sabnzbd" ]; }; systemd.services."podman-jellyseerr" = { @@ -149,6 +149,9 @@ "traefik.http.routers.transmission.tls.certresolver" = "htpc"; "traefik.http.services.transmission.loadbalancer.server.port" = "9091"; }; + dependsOn = [ + "myproject_sabnzbd" + ]; logDriver = "journald"; autoStart = false; extraOptions = [ @@ -213,7 +216,6 @@ podman network create myproject_default --opt isolate=true --ignore ''; wantedBy = [ - "podman-jellyseerr.service" "podman-myproject_sabnzbd.service" "podman-photoprism-mariadb.service" "podman-torrent-client.service" diff --git a/testdata/TestPodman_out.nix b/testdata/TestPodman_out.nix index f00f377..e2e6b17 100644 --- a/testdata/TestPodman_out.nix +++ b/testdata/TestPodman_out.nix @@ -36,12 +36,12 @@ logDriver = "journald"; autoStart = false; extraOptions = [ - "--network=default" "--network-alias=jellyseerr" "--dns=1.1.1.1" "--log-opt=compress=true" "--log-opt=max-file=3" "--log-opt=max-size=10m" + "--network=container:sabnzbd" ]; }; systemd.services."podman-jellyseerr" = { @@ -149,6 +149,9 @@ "traefik.http.routers.transmission.tls.certresolver" = "htpc"; "traefik.http.services.transmission.loadbalancer.server.port" = "9091"; }; + dependsOn = [ + "sabnzbd" + ]; logDriver = "journald"; autoStart = false; extraOptions = [ @@ -213,7 +216,6 @@ podman network create default --opt isolate=true --ignore ''; wantedBy = [ - "podman-jellyseerr.service" "podman-photoprism-mariadb.service" "podman-sabnzbd.service" "podman-torrent-client.service" diff --git a/testdata/docker-compose.yml b/testdata/docker-compose.yml index e9a953d..c3f4041 100644 --- a/testdata/docker-compose.yml +++ b/testdata/docker-compose.yml @@ -46,6 +46,8 @@ services: - /var/volumes/transmission/config:/config - /var/volumes/transmission/scripts:/scripts - storage:/storage + depends_on: + - sabnzbd environment: TZ: ${TIMEZONE} PUID: ${PUID} @@ -96,8 +98,7 @@ services: - "traefik.http.routers.jellyseerr.rule=Host(`requests.${DOMAIN}`)" - "traefik.http.routers.jellyseerr.tls.certresolver=htpc" - "traefik.http.routers.jellyseerr.middlewares=chain-authelia@file" - depends_on: - - sabnzbd + network_mode: "service:sabnzbd" logging: driver: "json-file" options: