Prechádzať zdrojové kódy

Add compose support of `attachable` in networks

This fix tries to address the issue raised in 29975 where
it was not possible to specify `attachable` flag for networks
in compose format.

NOTE: Compose format aleady supports `labels` in networks.

This fix adds the support of `attachable` for compose v3.1 format.

Additiona unit tests have been updated and added.

This fix fixes 29975.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Yong Tang 8 rokov pred
rodič
commit
cf4b7a5b87

+ 5 - 4
cli/compose/convert/compose.go

@@ -61,10 +61,11 @@ func Networks(namespace Namespace, networks networkMap, servicesNetworks map[str
 		}
 		}
 
 
 		createOpts := types.NetworkCreate{
 		createOpts := types.NetworkCreate{
-			Labels:   AddStackLabel(namespace, network.Labels),
-			Driver:   network.Driver,
-			Options:  network.DriverOpts,
-			Internal: network.Internal,
+			Labels:     AddStackLabel(namespace, network.Labels),
+			Driver:     network.Driver,
+			Options:    network.DriverOpts,
+			Internal:   network.Internal,
+			Attachable: network.Attachable,
 		}
 		}
 
 
 		if network.Ipam.Driver != "" || len(network.Ipam.Config) > 0 {
 		if network.Ipam.Driver != "" || len(network.Ipam.Config) > 0 {

+ 15 - 3
cli/compose/convert/compose_test.go

@@ -30,9 +30,10 @@ func TestAddStackLabel(t *testing.T) {
 func TestNetworks(t *testing.T) {
 func TestNetworks(t *testing.T) {
 	namespace := Namespace{name: "foo"}
 	namespace := Namespace{name: "foo"}
 	serviceNetworks := map[string]struct{}{
 	serviceNetworks := map[string]struct{}{
-		"normal":  {},
-		"outside": {},
-		"default": {},
+		"normal":        {},
+		"outside":       {},
+		"default":       {},
+		"attachablenet": {},
 	}
 	}
 	source := networkMap{
 	source := networkMap{
 		"normal": composetypes.NetworkConfig{
 		"normal": composetypes.NetworkConfig{
@@ -58,6 +59,10 @@ func TestNetworks(t *testing.T) {
 				Name:     "special",
 				Name:     "special",
 			},
 			},
 		},
 		},
+		"attachablenet": composetypes.NetworkConfig{
+			Driver:     "overlay",
+			Attachable: true,
+		},
 	}
 	}
 	expected := map[string]types.NetworkCreate{
 	expected := map[string]types.NetworkCreate{
 		"default": {
 		"default": {
@@ -83,6 +88,13 @@ func TestNetworks(t *testing.T) {
 				"something":    "labeled",
 				"something":    "labeled",
 			},
 			},
 		},
 		},
+		"attachablenet": {
+			Driver:     "overlay",
+			Attachable: true,
+			Labels: map[string]string{
+				LabelNamespace: "foo",
+			},
+		},
 	}
 	}
 
 
 	networks, externals := Networks(namespace, source, serviceNetworks)
 	networks, externals := Networks(namespace, source, serviceNetworks)

+ 26 - 0
cli/compose/loader/loader_test.go

@@ -799,3 +799,29 @@ type servicesByName []types.ServiceConfig
 func (sbn servicesByName) Len() int           { return len(sbn) }
 func (sbn servicesByName) Len() int           { return len(sbn) }
 func (sbn servicesByName) Swap(i, j int)      { sbn[i], sbn[j] = sbn[j], sbn[i] }
 func (sbn servicesByName) Swap(i, j int)      { sbn[i], sbn[j] = sbn[j], sbn[i] }
 func (sbn servicesByName) Less(i, j int) bool { return sbn[i].Name < sbn[j].Name }
 func (sbn servicesByName) Less(i, j int) bool { return sbn[i].Name < sbn[j].Name }
+
+func TestLoadAttachableNetwork(t *testing.T) {
+	config, err := loadYAML(`
+version: "3.1"
+networks:
+  mynet1:
+    driver: overlay
+    attachable: true
+  mynet2:
+    driver: bridge
+`)
+	assert.NoError(t, err)
+
+	expected := map[string]types.NetworkConfig{
+		"mynet1": {
+			Driver:     "overlay",
+			Attachable: true,
+		},
+		"mynet2": {
+			Driver:     "bridge",
+			Attachable: false,
+		},
+	}
+
+	assert.Equal(t, expected, config.Networks)
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
cli/compose/schema/bindata.go


+ 1 - 0
cli/compose/schema/data/config_schema_v3.1.json

@@ -338,6 +338,7 @@
           "additionalProperties": false
           "additionalProperties": false
         },
         },
         "internal": {"type": "boolean"},
         "internal": {"type": "boolean"},
+        "attachable": {"type": "boolean"},
         "labels": {"$ref": "#/definitions/list_or_dict"}
         "labels": {"$ref": "#/definitions/list_or_dict"}
       },
       },
       "additionalProperties": false
       "additionalProperties": false

+ 1 - 0
cli/compose/types/types.go

@@ -238,6 +238,7 @@ type NetworkConfig struct {
 	Ipam       IPAMConfig
 	Ipam       IPAMConfig
 	External   External
 	External   External
 	Internal   bool
 	Internal   bool
+	Attachable bool
 	Labels     MappingWithEquals
 	Labels     MappingWithEquals
 }
 }
 
 

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov