diff --git a/pkg/cluster/managed.go b/pkg/cluster/managed.go index dc206ff8c3..3971010a91 100644 --- a/pkg/cluster/managed.go +++ b/pkg/cluster/managed.go @@ -11,9 +11,13 @@ import ( "os" "time" + "github.com/pkg/errors" + + "github.com/gorilla/mux" "github.com/k3s-io/k3s/pkg/cluster/managed" "github.com/k3s-io/k3s/pkg/etcd" "github.com/k3s-io/k3s/pkg/nodepassword" + "github.com/k3s-io/k3s/pkg/util" "github.com/k3s-io/k3s/pkg/version" "github.com/sirupsen/logrus" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -96,7 +100,7 @@ func (c *Cluster) start(ctx context.Context) error { // management of etcd cluster membership without being disrupted when a member is removed from the cluster. func (c *Cluster) registerDBHandlers(handler http.Handler) (http.Handler, error) { if c.managedDB == nil { - return handler, nil + return handlerNoEtcd(handler), nil } return c.managedDB.Register(handler) @@ -168,3 +172,18 @@ func (c *Cluster) deleteNodePasswdSecret(ctx context.Context) { logrus.Warnf("failed to delete old node password secret: %v", err) } } + +// handlerNoEtcd wraps a handler with an error message indicating that etcd is not deployed. +func handlerNoEtcd(handler http.Handler) http.Handler { + r := mux.NewRouter().SkipClean(true) + + // Wildcard route for anything after /db/ + r.HandleFunc("/db/{_:.*}", func(resp http.ResponseWriter, r *http.Request) { + util.SendError(errors.New("etcd datastore disabled"), resp, r, http.StatusBadRequest) + }) + + // Needs to come at the end, otherwise wildcard routes won't work + r.NotFoundHandler = handler + + return r +} diff --git a/tests/e2e/snapshotrestore/snapshotrestore_test.go b/tests/e2e/snapshotrestore/snapshotrestore_test.go index dc47907f78..eb5b1c6848 100644 --- a/tests/e2e/snapshotrestore/snapshotrestore_test.go +++ b/tests/e2e/snapshotrestore/snapshotrestore_test.go @@ -145,17 +145,6 @@ var _ = Describe("Verify snapshots and cluster restores work", Ordered, func() { Expect(e2e.RunCmdOnNode(cmd, serverNodeNames[0])).Error().NotTo(HaveOccurred()) }) - It("Resets non bootstrap nodes", func() { - for _, nodeName := range serverNodeNames { - if nodeName != serverNodeNames[0] { - cmd := "k3s server --cluster-reset" - response, err := e2e.RunCmdOnNode(cmd, nodeName) - Expect(err).NotTo(HaveOccurred()) - Expect(response).Should(ContainSubstring("Managed etcd cluster membership has been reset, restart without --cluster-reset flag now")) - } - } - }) - It("Checks that other servers are not ready", func() { fmt.Printf("\nFetching node status\n") Eventually(func(g Gomega) {