From 775a4bc0febbcace936511a36ca30144e81e2c63 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Tue, 10 Jan 2017 14:57:43 -0800 Subject: [PATCH] Gracefully fail if Network and IPAM plugins are used Due to multiple issues in both plugin-v1 and plugin-v2 support, we decided to gracefully fail the network create if either network or ipam plugin is used. Signed-off-by: Madhu Venugopal --- manager/controlapi/common.go | 5 ++++- manager/controlapi/network.go | 6 ++++-- manager/controlapi/network_test.go | 8 ++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/manager/controlapi/common.go b/manager/controlapi/common.go index f180cbd6a6..9e52f05a7f 100644 --- a/manager/controlapi/common.go +++ b/manager/controlapi/common.go @@ -76,7 +76,7 @@ func validateAnnotations(m api.Annotations) error { return nil } -func validateDriver(driver *api.Driver) error { +func validateDriver(driver *api.Driver, defName string) error { if driver == nil { // It is ok to not specify the driver. We will choose // a default driver. @@ -87,5 +87,8 @@ func validateDriver(driver *api.Driver) error { return grpc.Errorf(codes.InvalidArgument, "driver name: if driver is specified name is required") } + if driver.Name != defName { + return grpc.Errorf(codes.InvalidArgument, "invalid driver (%s) specified", driver.Name) + } return nil } diff --git a/manager/controlapi/network.go b/manager/controlapi/network.go index 8d662e772e..50eea01ae4 100644 --- a/manager/controlapi/network.go +++ b/manager/controlapi/network.go @@ -4,8 +4,10 @@ import ( "fmt" "net" + "github.com/docker/libnetwork/ipamapi" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/identity" + "github.com/docker/swarmkit/manager/allocator/networkallocator" "github.com/docker/swarmkit/manager/state/store" "golang.org/x/net/context" "google.golang.org/grpc" @@ -54,7 +56,7 @@ func validateIPAM(ipam *api.IPAMOptions) error { return nil } - if err := validateDriver(ipam.Driver); err != nil { + if err := validateDriver(ipam.Driver, ipamapi.DefaultIPAM); err != nil { return err } @@ -76,7 +78,7 @@ func validateNetworkSpec(spec *api.NetworkSpec) error { return err } - if err := validateDriver(spec.DriverConfig); err != nil { + if err := validateDriver(spec.DriverConfig, networkallocator.DefaultDriver); err != nil { return err } diff --git a/manager/controlapi/network_test.go b/manager/controlapi/network_test.go index 0c5df4adfc..43262e42b0 100644 --- a/manager/controlapi/network_test.go +++ b/manager/controlapi/network_test.go @@ -86,9 +86,13 @@ func createServiceInNetwork(t *testing.T, ts *testServer, name, image string, nw } func TestValidateDriver(t *testing.T) { - assert.NoError(t, validateDriver(nil)) + assert.NoError(t, validateDriver(nil, "")) - err := validateDriver(&api.Driver{Name: ""}) + err := validateDriver(&api.Driver{Name: ""}, "") + assert.Error(t, err) + assert.Equal(t, codes.InvalidArgument, grpc.Code(err)) + + err = validateDriver(&api.Driver{Name: "test"}, "default") assert.Error(t, err) assert.Equal(t, codes.InvalidArgument, grpc.Code(err)) }