ソースを参照

Merge pull request #31258 from dnephin/fix-override-default-stack-network

Support customizing the default network for a stack
Brian Goff 8 年 前
コミット
dd221a1e17
2 ファイル変更32 行追加9 行削除
  1. 6 7
      cli/compose/convert/service.go
  2. 26 2
      cli/compose/convert/service_test.go

+ 6 - 7
cli/compose/convert/service.go

@@ -16,6 +16,8 @@ import (
 	runconfigopts "github.com/docker/docker/runconfig/opts"
 	runconfigopts "github.com/docker/docker/runconfig/opts"
 )
 )
 
 
+const defaultNetwork = "default"
+
 // Services from compose-file types to engine API types
 // Services from compose-file types to engine API types
 // TODO: fix secrets API so that SecretAPIClient is not required here
 // TODO: fix secrets API so that SecretAPIClient is not required here
 func Services(
 func Services(
@@ -156,18 +158,15 @@ func convertServiceNetworks(
 	name string,
 	name string,
 ) ([]swarm.NetworkAttachmentConfig, error) {
 ) ([]swarm.NetworkAttachmentConfig, error) {
 	if len(networks) == 0 {
 	if len(networks) == 0 {
-		return []swarm.NetworkAttachmentConfig{
-			{
-				Target:  namespace.Scope("default"),
-				Aliases: []string{name},
-			},
-		}, nil
+		networks = map[string]*composetypes.ServiceNetworkConfig{
+			defaultNetwork: {},
+		}
 	}
 	}
 
 
 	nets := []swarm.NetworkAttachmentConfig{}
 	nets := []swarm.NetworkAttachmentConfig{}
 	for networkName, network := range networks {
 	for networkName, network := range networks {
 		networkConfig, ok := networkConfigs[networkName]
 		networkConfig, ok := networkConfigs[networkName]
-		if !ok {
+		if !ok && networkName != defaultNetwork {
 			return []swarm.NetworkAttachmentConfig{}, fmt.Errorf(
 			return []swarm.NetworkAttachmentConfig{}, fmt.Errorf(
 				"service %q references network %q, which is not declared", name, networkName)
 				"service %q references network %q, which is not declared", name, networkName)
 		}
 		}

+ 26 - 2
cli/compose/convert/service_test.go

@@ -179,10 +179,9 @@ func TestConvertEndpointSpec(t *testing.T) {
 
 
 func TestConvertServiceNetworksOnlyDefault(t *testing.T) {
 func TestConvertServiceNetworksOnlyDefault(t *testing.T) {
 	networkConfigs := networkMap{}
 	networkConfigs := networkMap{}
-	networks := map[string]*composetypes.ServiceNetworkConfig{}
 
 
 	configs, err := convertServiceNetworks(
 	configs, err := convertServiceNetworks(
-		networks, networkConfigs, NewNamespace("foo"), "service")
+		nil, networkConfigs, NewNamespace("foo"), "service")
 
 
 	expected := []swarm.NetworkAttachmentConfig{
 	expected := []swarm.NetworkAttachmentConfig{
 		{
 		{
@@ -235,6 +234,31 @@ func TestConvertServiceNetworks(t *testing.T) {
 	assert.DeepEqual(t, []swarm.NetworkAttachmentConfig(sortedConfigs), expected)
 	assert.DeepEqual(t, []swarm.NetworkAttachmentConfig(sortedConfigs), expected)
 }
 }
 
 
+func TestConvertServiceNetworksCustomDefault(t *testing.T) {
+	networkConfigs := networkMap{
+		"default": composetypes.NetworkConfig{
+			External: composetypes.External{
+				External: true,
+				Name:     "custom",
+			},
+		},
+	}
+	networks := map[string]*composetypes.ServiceNetworkConfig{}
+
+	configs, err := convertServiceNetworks(
+		networks, networkConfigs, NewNamespace("foo"), "service")
+
+	expected := []swarm.NetworkAttachmentConfig{
+		{
+			Target:  "custom",
+			Aliases: []string{"service"},
+		},
+	}
+
+	assert.NilError(t, err)
+	assert.DeepEqual(t, []swarm.NetworkAttachmentConfig(configs), expected)
+}
+
 type byTargetSort []swarm.NetworkAttachmentConfig
 type byTargetSort []swarm.NetworkAttachmentConfig
 
 
 func (s byTargetSort) Len() int {
 func (s byTargetSort) Len() int {