Browse Source

Ignore NotFound for external overlay networks

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 7 years ago
parent
commit
344003a2f9
2 changed files with 25 additions and 0 deletions
  1. 5 0
      compose/network.py
  2. 20 0
      tests/integration/network_test.py

+ 5 - 0
compose/network.py

@@ -42,6 +42,11 @@ class Network(object):
 
 
     def ensure(self):
     def ensure(self):
         if self.external:
         if self.external:
+            if self.driver == 'overlay':
+                # Swarm nodes do not register overlay networks that were
+                # created on a different node unless they're in use.
+                # See docker/compose#4399
+                return
             try:
             try:
                 self.inspect()
                 self.inspect()
                 log.debug(
                 log.debug(

+ 20 - 0
tests/integration/network_test.py

@@ -1,7 +1,10 @@
 from __future__ import absolute_import
 from __future__ import absolute_import
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
+import pytest
+
 from .testcases import DockerClientTestCase
 from .testcases import DockerClientTestCase
+from compose.config.errors import ConfigurationError
 from compose.const import LABEL_NETWORK
 from compose.const import LABEL_NETWORK
 from compose.const import LABEL_PROJECT
 from compose.const import LABEL_PROJECT
 from compose.network import Network
 from compose.network import Network
@@ -15,3 +18,20 @@ class NetworkTest(DockerClientTestCase):
         labels = net_data['Labels']
         labels = net_data['Labels']
         assert labels[LABEL_NETWORK] == net.name
         assert labels[LABEL_NETWORK] == net.name
         assert labels[LABEL_PROJECT] == net.project
         assert labels[LABEL_PROJECT] == net.project
+
+    def test_network_external_default_ensure(self):
+        net = Network(
+            self.client, 'composetest', 'foonet',
+            external=True
+        )
+
+        with pytest.raises(ConfigurationError):
+            net.ensure()
+
+    def test_network_external_overlay_ensure(self):
+        net = Network(
+            self.client, 'composetest', 'foonet',
+            driver='overlay', external=True
+        )
+
+        assert net.ensure() is None