From 738d8417e049f2d55987cd759a88f48810e8487e Mon Sep 17 00:00:00 2001 From: Albin Kerouanton Date: Sat, 8 Jul 2023 15:31:27 +0200 Subject: [PATCH] libnet: Return a 403 when overlay network isn't allowed With this change, the API will now return a 403 instead of a 500 when trying to create an overlay network on a non-manager node. Signed-off-by: Albin Kerouanton (cherry picked from commit d29240d9eb289af20581db425ed3e20f057d2164) Signed-off-by: Sebastiaan van Stijn --- api/swagger.yaml | 4 +++- daemon/network.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/swagger.yaml b/api/swagger.yaml index a616794c1e..a820f996f9 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -9896,7 +9896,9 @@ paths: Id: "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30" Warning: "" 403: - description: "operation not supported for pre-defined networks" + description: | + Forbidden operation. This happens when trying to create a network named after a pre-defined network, + or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. schema: $ref: "#/definitions/ErrorResponse" 404: diff --git a/daemon/network.go b/daemon/network.go index d89d87e1c4..e98a841cd3 100644 --- a/daemon/network.go +++ b/daemon/network.go @@ -298,7 +298,7 @@ func (daemon *Daemon) createNetwork(create types.NetworkCreateRequest, id string } if driver == "overlay" && !daemon.cluster.IsManager() && !agent { - return nil, errors.New(`This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.`) + return nil, errdefs.Forbidden(errors.New(`This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.`)) } var warning string