From 801f75bf5864e7860af76e44a53c56953124c22a Mon Sep 17 00:00:00 2001 From: Tobias Gesellchen Date: Sat, 2 Jun 2018 11:14:45 +0200 Subject: [PATCH 1/3] Update groovy dependency --- build.gradle | 2 ++ client/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 86919e982..5f1ce155f 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ subprojects { 'com.squareup.okio:okio:1.14.0', 'org.bouncycastle:bcpkix-jdk15on:1.59', 'org.bouncycastle:bcprov-jdk15on:1.59', + 'org.codehaus.groovy:groovy:2.4.15', + 'org.codehaus.groovy:groovy-json:2.4.15', 'org.jetbrains.kotlin:kotlin-reflect:1.2.21', 'org.jetbrains.kotlin:kotlin-stdlib:1.2.21', ] diff --git a/client/build.gradle b/client/build.gradle index 6b23adf4f..e7ba0ab9a 100644 --- a/client/build.gradle +++ b/client/build.gradle @@ -34,8 +34,8 @@ dependencies { compile 'de.gesellix:docker-engine:2018-02-17T22-09-45' compile 'de.gesellix:docker-compose:2018-02-17T22-19-12' - compile 'org.codehaus.groovy:groovy:2.4.13' - compile 'org.codehaus.groovy:groovy-json:2.4.13' + compile 'org.codehaus.groovy:groovy:2.4.15' + compile 'org.codehaus.groovy:groovy-json:2.4.15' compile 'org.slf4j:slf4j-api:1.7.25' testCompile 'ch.qos.logback:logback-classic:1.2.3' From 4e9d101f4a5a2ab80e8718b2fb90d2b742f71829 Mon Sep 17 00:00:00 2001 From: Tobias Gesellchen Date: Sat, 2 Jun 2018 11:16:30 +0200 Subject: [PATCH 2/3] validate only user defined networks --- .../client/stack/DeployConfigReader.groovy | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy b/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy index abcf0eec2..0fee5f171 100644 --- a/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy +++ b/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy @@ -1,6 +1,7 @@ package de.gesellix.docker.client.stack import de.gesellix.docker.client.DockerClient +import de.gesellix.docker.client.LocalDocker import de.gesellix.docker.client.stack.types.ResolutionMode import de.gesellix.docker.client.stack.types.RestartPolicyCondition import de.gesellix.docker.client.stack.types.StackConfig @@ -133,7 +134,7 @@ class DeployConfigReader { stopSignal : service.stopSignal, tty : service.tty, openStdin : service.stdinOpen, -// secrets : secrets, +// secrets : service.secrets, ], logDriver : logDriver(service.logging), resources : serviceResources(service.deploy?.resources), @@ -617,8 +618,23 @@ class DeployConfigReader { return [networkSpec, externalNetworkNames] } + boolean isContainerNetwork(String networkName) { + String[] elements = networkName?.split(':', 2) + return elements?.size() > 1 && elements[0] == "container" + } + + boolean isUserDefined(String networkName, boolean isWindows) { + List blacklist = isWindows ? ["default", "none", "nat"] : ["default", "bridge", "host", "none"] + return !(networkName in blacklist || isContainerNetwork(networkName)) + } + def validateExternalNetworks(List externalNetworks) { - externalNetworks.each { name -> + boolean isWindows = LocalDocker.isNativeWindows() + externalNetworks.findAll { name -> + // Networks that are not user defined always exist on all nodes as + // local-scoped networks, so there's no need to inspect them. + isUserDefined(name, isWindows) + }.each { name -> def network try { network = dockerClient.inspectNetwork(name) @@ -627,6 +643,7 @@ class DeployConfigReader { log.error("network ${name} is declared as external, but could not be inspected. You need to create the network before the stack is deployed (with overlay driver)") throw new IllegalStateException("network ${name} is declared as external, but could not be inspected.", e) } + if (network.content.Scope != "swarm") { log.error("network ${name} is declared as external, but it is not in the right scope: '${network.content.Scope}' instead of 'swarm'") throw new IllegalStateException("network ${name} is declared as external, but is not in 'swarm' scope.") From df6620552dc9cb1b2a44d7bc7982503bae036a06 Mon Sep 17 00:00:00 2001 From: Tobias Gesellchen Date: Sat, 2 Jun 2018 11:31:23 +0200 Subject: [PATCH 3/3] Only add default aliases to user defined networks. Other networks do not support aliases. --- .../docker/client/stack/DeployConfigReader.groovy | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy b/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy index 0fee5f171..fa10f7544 100644 --- a/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy +++ b/client/src/main/groovy/de/gesellix/docker/client/stack/DeployConfigReader.groovy @@ -198,8 +198,10 @@ class DeployConfigReader { String namespace, String serviceName) { + def isWindows = LocalDocker.isNativeWindows() + if (serviceNetworks == null || serviceNetworks.isEmpty()) { - serviceNetworks = ["default": null] + serviceNetworks = ["default": null as ServiceNetwork] } def serviceNetworkConfigs = [] @@ -213,7 +215,6 @@ class DeployConfigReader { if (serviceNetwork) { aliases = serviceNetwork.aliases } - aliases << serviceName String namespacedName = "${namespace}_${networkName}" as String @@ -225,6 +226,10 @@ class DeployConfigReader { } } + if (isUserDefined(target, isWindows)) { + aliases << serviceName + } + serviceNetworkConfigs << [ target : target, aliases: aliases,