diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index 0a77dd7d2a..57e0fbdd57 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -223,12 +223,16 @@ func setupServer(staticConfiguration *static.Configuration) (*server.Server, err pluginBuilder, err := createPluginBuilder(staticConfiguration) if err != nil { - return nil, err + log.WithoutContext().WithError(err).Error("Plugins are disabled because an error has occurred.") } // Providers plugins for name, conf := range staticConfiguration.Providers.Plugin { + if pluginBuilder == nil { + break + } + p, err := pluginBuilder.BuildProvider(name, conf) if err != nil { return nil, fmt.Errorf("plugin: failed to build provider: %w", err) diff --git a/pkg/plugins/client.go b/pkg/plugins/client.go index 836302f0b3..640f67625a 100644 --- a/pkg/plugins/client.go +++ b/pkg/plugins/client.go @@ -164,7 +164,12 @@ func (c *Client) Download(ctx context.Context, pName, pVersion string) (string, defer func() { _ = resp.Body.Close() }() - if resp.StatusCode == http.StatusOK { + switch resp.StatusCode { + case http.StatusNotModified: + // noop + return hash, nil + + case http.StatusOK: err = os.MkdirAll(filepath.Dir(filename), 0o755) if err != nil { return "", fmt.Errorf("failed to create directory: %w", err) @@ -189,15 +194,11 @@ func (c *Client) Download(ctx context.Context, pName, pVersion string) (string, } return hash, nil - } - if resp.StatusCode == http.StatusNotModified { - // noop - return hash, nil + default: + data, _ := io.ReadAll(resp.Body) + return "", fmt.Errorf("error: %d: %s", resp.StatusCode, string(data)) } - - data, _ := io.ReadAll(resp.Body) - return "", fmt.Errorf("error: %d: %s", resp.StatusCode, string(data)) } // Check checks the plugin archive integrity. diff --git a/pkg/server/middleware/middlewares.go b/pkg/server/middleware/middlewares.go index 2695db107e..741c9a4f08 100644 --- a/pkg/server/middleware/middlewares.go +++ b/pkg/server/middleware/middlewares.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net/http" + "reflect" "strings" "github.com/containous/alice" @@ -340,7 +341,7 @@ func (b *Builder) buildConstructor(ctx context.Context, middlewareName string) ( } // Plugin - if config.Plugin != nil { + if config.Plugin != nil && !reflect.ValueOf(b.pluginBuilder).IsNil() { // Using "reflect" because "b.pluginBuilder" is an interface. if middleware != nil { return nil, badConf }