From eccf75a5a04651752f613d74051429f1be1fb21e Mon Sep 17 00:00:00 2001 From: Harrison Affel Date: Fri, 9 Feb 2024 15:46:24 -0500 Subject: [PATCH 1/2] update executor interface implementation for pebinaryexecutor and staticpod executor Signed-off-by: Harrison Affel --- pkg/cli/cmds/agent.go | 11 ++- pkg/pebinaryexecutor/pebinary.go | 133 ++++++++++++++++++++++++++++--- pkg/podexecutor/staticpod.go | 12 +++ pkg/windows/service_linux.go | 6 +- pkg/windows/service_windows.go | 26 +++--- 5 files changed, 161 insertions(+), 27 deletions(-) diff --git a/pkg/cli/cmds/agent.go b/pkg/cli/cmds/agent.go index f978cf8331..b45d74f8eb 100644 --- a/pkg/cli/cmds/agent.go +++ b/pkg/cli/cmds/agent.go @@ -88,8 +88,15 @@ func agentSubcommands() cli.Commands { func AgentRun(clx *cli.Context) error { validateCloudProviderName(clx, Agent) validateProfile(clx, Agent) - if err := windows.StartService(); err != nil { + isWinService, err := windows.StartService() + if err != nil { return err } - return rke2.Agent(clx, config) + + err = rke2.Agent(clx, config) + if isWinService { + windows.MonitorProcessExit() + } + + return err } diff --git a/pkg/pebinaryexecutor/pebinary.go b/pkg/pebinaryexecutor/pebinary.go index 7c3c88ac99..5a00fb468f 100644 --- a/pkg/pebinaryexecutor/pebinary.go +++ b/pkg/pebinaryexecutor/pebinary.go @@ -6,6 +6,7 @@ package pebinaryexecutor import ( "context" "fmt" + "io" "net/http" "os" "os/exec" @@ -16,9 +17,13 @@ import ( "github.com/Microsoft/hcsshim/hcn" "github.com/k3s-io/helm-controller/pkg/generated/controllers/helm.cattle.io" + "github.com/k3s-io/k3s/pkg/agent/containerd" + "github.com/k3s-io/k3s/pkg/agent/cri" + "github.com/k3s-io/k3s/pkg/agent/cridockerd" "github.com/k3s-io/k3s/pkg/cli/cmds" - daemonconfig "github.com/k3s-io/k3s/pkg/daemons/config" + "github.com/k3s-io/k3s/pkg/daemons/config" "github.com/k3s-io/k3s/pkg/daemons/executor" + "github.com/natefinch/lumberjack" "github.com/rancher/rke2/pkg/bootstrap" "github.com/rancher/rke2/pkg/images" "github.com/rancher/rke2/pkg/logging" @@ -72,7 +77,7 @@ const ( // Bootstrap prepares the binary executor to run components by setting the system default registry // and staging the kubelet and containerd binaries. On servers, it also ensures that manifests are // copied in to place and in sync with the system configuration. -func (p *PEBinaryConfig) Bootstrap(ctx context.Context, nodeConfig *daemonconfig.Node, cfg cmds.Agent) error { +func (p *PEBinaryConfig) Bootstrap(ctx context.Context, nodeConfig *config.Node, cfg cmds.Agent) error { // On servers this is set to an initial value from the CLI when the resolver is created, so that // static pod manifests can be created before the agent bootstrap is complete. The agent itself // really only needs to know about the runtime and pause images, all of which are configured after the @@ -160,9 +165,9 @@ func (p *PEBinaryConfig) Kubelet(ctx context.Context, args []string) error { cleanArgs = append(cleanArgs, arg) } - logrus.Infof("Running RKE2 kubelet %v", cleanArgs) - go func() { + win.ProcessWaitGroup.StartWithContext(ctx, func(ctx context.Context) { for { + logrus.Infof("Running RKE2 kubelet %v", cleanArgs) cniCtx, cancel := context.WithCancel(ctx) if p.CNIName != CNINone { go func() { @@ -179,9 +184,15 @@ func (p *PEBinaryConfig) Kubelet(ctx context.Context, args []string) error { logrus.Errorf("Kubelet exited: %v", err) } cancel() - time.Sleep(5 * time.Second) + + select { + case <-ctx.Done(): + return + default: + time.Sleep(5 * time.Second) + } } - }() + }) return nil } @@ -201,7 +212,7 @@ func (p *PEBinaryConfig) KubeProxy(ctx context.Context, args []string) error { extraArgs := map[string]string{ "network-name": CNIConfig.OverlayNetName, "bind-address": CNIConfig.NodeIP, - "source-vip": vip, + "source-vip": vip, } if err := hcn.DSRSupported(); err == nil { @@ -212,22 +223,110 @@ func (p *PEBinaryConfig) KubeProxy(ctx context.Context, args []string) error { args = append(getArgs(extraArgs), args...) - logrus.Infof("Running RKE2 kube-proxy %s", args) - go func() { + win.ProcessWaitGroup.StartWithContext(ctx, func(ctx context.Context) { outputFile := logging.GetLogger(filepath.Join(p.DataDir, "agent", "logs", "kube-proxy.log"), 50) for { + logrus.Infof("Running RKE2 kube-proxy %s", args) cmd := exec.CommandContext(ctx, filepath.Join("c:\\", p.DataDir, "bin", "kube-proxy.exe"), args...) cmd.Stdout = outputFile cmd.Stderr = outputFile err := cmd.Run() logrus.Errorf("kube-proxy exited: %v", err) - time.Sleep(5 * time.Second) + + select { + case <-ctx.Done(): + return + default: + time.Sleep(5 * time.Second) + } } - }() + }) return nil } +// Docker starts cri-dockerd as implemented in the k3s cridockerd package +func (p *PEBinaryConfig) Docker(ctx context.Context, cfg *config.Node) error { + return cridockerd.Run(ctx, cfg) +} + +// Containerd configures and starts containerd. +func (p *PEBinaryConfig) Containerd(ctx context.Context, cfg *config.Node) error { + args := getContainerdArgs(cfg) + stdOut := io.Writer(os.Stdout) + stdErr := io.Writer(os.Stderr) + + if cfg.Containerd.Log != "" { + logrus.Infof("Logging containerd to %s", cfg.Containerd.Log) + fileOut := &lumberjack.Logger{ + Filename: cfg.Containerd.Log, + MaxSize: 50, + MaxBackups: 3, + MaxAge: 28, + Compress: true, + } + + // If rke2 is started with --debug, write logs to both the log file and stdout/stderr, + // even if a log path is set. + if cfg.Containerd.Debug { + stdOut = io.MultiWriter(stdOut, fileOut) + stdErr = io.MultiWriter(stdErr, fileOut) + } else { + stdOut = fileOut + stdErr = fileOut + } + } + + win.ProcessWaitGroup.StartWithContext(ctx, func(ctx context.Context) { + env := []string{} + cenv := []string{} + + for _, e := range os.Environ() { + pair := strings.SplitN(e, "=", 2) + switch { + case pair[0] == "NOTIFY_SOCKET": + // elide NOTIFY_SOCKET to prevent spurious notifications to systemd + case pair[0] == "CONTAINERD_LOG_LEVEL": + // Turn CONTAINERD_LOG_LEVEL variable into log-level flag + args = append(args, "--log-level", pair[1]) + case strings.HasPrefix(pair[0], "CONTAINERD_"): + // Strip variables with CONTAINERD_ prefix before passing through + // This allows doing things like setting a proxy for image pulls by setting + // CONTAINERD_https_proxy=http://proxy.example.com:8080 + pair[0] = strings.TrimPrefix(pair[0], "CONTAINERD_") + cenv = append(cenv, strings.Join(pair, "=")) + default: + env = append(env, strings.Join(pair, "=")) + } + } + + for { + logrus.Infof("Running containerd %s", config.ArgString(args[1:])) + cmd := exec.CommandContext(ctx, args[0], args[1:]...) + cmd.Stdout = stdOut + cmd.Stderr = stdErr + cmd.Env = append(env, cenv...) + + if err := cmd.Run(); err != nil { + logrus.Errorf("containerd exited: %v", err) + } + + select { + case <-ctx.Done(): + return + default: + time.Sleep(5 * time.Second) + } + } + }) + + if err := cri.WaitForService(ctx, cfg.Containerd.Address, "containerd"); err != nil { + return err + } + + return containerd.PreloadImages(ctx, cfg) +} + // APIServerHandlers isn't supported in the binary executor. func (p *PEBinaryConfig) APIServerHandlers(ctx context.Context) (authenticator.Request, http.Handler, error) { panic("kube-api-server is unsupported on windows") @@ -271,7 +370,15 @@ func addFeatureGate(current, new string) string { return current + "," + new } -// getArgs concerts a map to the correct args list format. +func getContainerdArgs(cfg *config.Node) []string { + args := []string{ + "containerd", + "-c", cfg.Containerd.Config, + } + return args +} + +// getArgs converts a map to the correct args list format. func getArgs(argsMap map[string]string) []string { var args []string for arg, value := range argsMap { @@ -307,7 +414,7 @@ func getCNIPluginName(restConfig *rest.Config) (string, error) { } // setWindowsAgentSpecificSettings configures the correct paths needed for Windows -func setWindowsAgentSpecificSettings(dataDir string, nodeConfig *daemonconfig.Node) { +func setWindowsAgentSpecificSettings(dataDir string, nodeConfig *config.Node) { nodeConfig.AgentConfig.CNIBinDir = filepath.Join("c:\\", dataDir, "bin") nodeConfig.AgentConfig.CNIConfDir = filepath.Join("c:\\", dataDir, "agent", "etc", "cni") } diff --git a/pkg/podexecutor/staticpod.go b/pkg/podexecutor/staticpod.go index 080643059d..a9bffaf70d 100644 --- a/pkg/podexecutor/staticpod.go +++ b/pkg/podexecutor/staticpod.go @@ -16,7 +16,9 @@ import ( "strings" "time" + "github.com/k3s-io/k3s/pkg/agent/containerd" "github.com/k3s-io/k3s/pkg/agent/cri" + "github.com/k3s-io/k3s/pkg/agent/cridockerd" "github.com/k3s-io/k3s/pkg/cli/cmds" daemonconfig "github.com/k3s-io/k3s/pkg/daemons/config" "github.com/k3s-io/k3s/pkg/daemons/executor" @@ -614,6 +616,16 @@ func (s *StaticPodConfig) ETCD(ctx context.Context, args executor.ETCDConfig, ex return staticpod.Run(s.ManifestsDir, spa) } +// Containerd starts the k3s implementation of containerd +func (s *StaticPodConfig) Containerd(ctx context.Context, config *daemonconfig.Node) error { + return containerd.Run(ctx, config) +} + +// Docker starts the k3s implementation of cridockerd +func (s *StaticPodConfig) Docker(ctx context.Context, config *daemonconfig.Node) error { + return cridockerd.Run(ctx, config) +} + // stopEtcd searches the container runtime endpoint for the etcd static pod, and terminates it. func (s *StaticPodConfig) stopEtcd() error { ctx := context.Background() diff --git a/pkg/windows/service_linux.go b/pkg/windows/service_linux.go index f10fab588c..4182795f3d 100644 --- a/pkg/windows/service_linux.go +++ b/pkg/windows/service_linux.go @@ -3,6 +3,8 @@ package windows -func StartService() error { - return nil +func StartService() (bool, error) { + return false, nil } + +func MonitorProcessExit() {} diff --git a/pkg/windows/service_windows.go b/pkg/windows/service_windows.go index 742a41e690..7e735f531e 100644 --- a/pkg/windows/service_windows.go +++ b/pkg/windows/service_windows.go @@ -5,9 +5,6 @@ package windows import ( "os" - "time" - - "golang.org/x/sys/windows" "github.com/k3s-io/k3s/pkg/version" "github.com/pkg/errors" @@ -15,12 +12,17 @@ import ( "github.com/rancher/wins/pkg/profilings" "github.com/rancher/wrangler/pkg/signals" "github.com/sirupsen/logrus" + "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" + "k8s.io/apimachinery/pkg/util/wait" ) type service struct{} -var Service = &service{} +var ( + Service = &service{} + ProcessWaitGroup wait.Group +) func (h *service) Execute(_ []string, requests <-chan svc.ChangeRequest, statuses chan<- svc.Status) (bool, uint32) { statuses <- svc.Status{State: svc.StartPending} @@ -40,7 +42,6 @@ func (h *service) Execute(_ []string, requests <-chan svc.ChangeRequest, statuse } logrus.Infof("Windows Service is shutting down gracefully") - time.Sleep(10 * time.Second) // give context time to cancel statuses <- svc.Status{State: svc.StopPending} statuses <- svc.Status{State: svc.Stopped} return false, 0 @@ -48,22 +49,22 @@ func (h *service) Execute(_ []string, requests <-chan svc.ChangeRequest, statuse } return false, 0 } -func StartService() error { +func StartService() (bool, error) { if ok, err := svc.IsWindowsService(); err != nil || !ok { - return err + return ok, err } // ETW tracing etw, err := logs.NewEtwProviderHook(version.Program) if err != nil { - return errors.Wrap(err, "could not create ETW provider logrus hook") + return false, errors.Wrap(err, "could not create ETW provider logrus hook") } logrus.AddHook(etw) el, err := logs.NewEventLogHook(version.Program) if err != nil { - return errors.Wrap(err, "could not create eventlog logrus hook") + return false, errors.Wrap(err, "could not create eventlog logrus hook") } logrus.AddHook(el) @@ -79,5 +80,10 @@ func StartService() error { } }() - return nil + return true, nil +} + +func MonitorProcessExit() { + logrus.Info("Waiting for all processes to exit...") + ProcessWaitGroup.Wait() } From 0cdd703e227560d181e551e42607ec16556390ec Mon Sep 17 00:00:00 2001 From: Harrison Affel Date: Mon, 12 Feb 2024 14:54:49 -0500 Subject: [PATCH 2/2] bump k3s to `cfc3a124eed6` Signed-off-by: Harrison Affel --- go.mod | 28 ++++++++++++++-------------- go.sum | 34 ++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/go.mod b/go.mod index d09b9c97b4..ba1e3bfb54 100644 --- a/go.mod +++ b/go.mod @@ -99,7 +99,7 @@ require ( github.com/google/go-containerregistry v0.14.0 github.com/iamacarpet/go-win64api v0.0.0-20210311141720-fe38760bed28 github.com/k3s-io/helm-controller v0.15.8 - github.com/k3s-io/k3s v1.29.2-0.20240202025151-c635818956f3 // master + github.com/k3s-io/k3s v1.29.2-0.20240209192806-cfc3a124eed6 // master github.com/libp2p/go-netroute v0.2.1 github.com/natefinch/lumberjack v2.0.0+incompatible github.com/onsi/ginkgo/v2 v2.13.2 @@ -114,8 +114,8 @@ require ( github.com/tigera/operator v1.28.1 github.com/urfave/cli v1.22.14 golang.org/x/sync v0.6.0 - golang.org/x/sys v0.15.0 - google.golang.org/grpc v1.59.0 + golang.org/x/sys v0.16.0 + google.golang.org/grpc v1.60.1 k8s.io/api v0.29.1 k8s.io/apimachinery v0.29.1 k8s.io/apiserver v0.29.1 @@ -190,15 +190,15 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/danwinship/knftables v0.0.13 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/distribution/reference v0.5.0 // indirect github.com/docker/cli v24.0.5+incompatible // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect - github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -210,7 +210,7 @@ require ( github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/flannel-io/flannel v0.24.0 // indirect + github.com/flannel-io/flannel v0.24.2 // indirect github.com/flynn/noise v1.0.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -221,9 +221,9 @@ require ( github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.3-0.20220714215716-96bad1d688c5 // indirect github.com/go-ole/go-ole v1.2.4 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/swag v0.22.4 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect @@ -243,7 +243,7 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/cadvisor v0.48.1 // indirect github.com/google/cel-go v0.17.7 // indirect - github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/gopacket v1.1.19 // indirect @@ -267,7 +267,7 @@ require ( github.com/hashicorp/golang-lru/arc/v2 v2.0.5 // indirect github.com/hashicorp/golang-lru/v2 v2.0.5 // indirect github.com/huin/goupnp v1.2.0 // indirect - github.com/imdario/mergo v0.3.15 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/boxo v0.10.0 // indirect github.com/ipfs/go-cid v0.4.1 // indirect @@ -439,7 +439,7 @@ require ( go.uber.org/zap v1.26.0 // indirect golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.17.0 // indirect - golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect + golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect @@ -451,7 +451,7 @@ require ( golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 // indirect gonum.org/v1/gonum v0.13.0 // indirect google.golang.org/api v0.152.0 // indirect - google.golang.org/appengine v1.6.7 // indirect + google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect @@ -480,7 +480,7 @@ require ( k8s.io/kube-proxy v0.0.0 // indirect k8s.io/kube-scheduler v0.0.0 // indirect k8s.io/kubectl v0.25.4 // indirect - k8s.io/kubelet v0.0.0 // indirect + k8s.io/kubelet v0.28.6 // indirect k8s.io/legacy-cloud-providers v0.0.0 // indirect k8s.io/metrics v0.0.0 // indirect k8s.io/mount-utils v0.29.1 // indirect diff --git a/go.sum b/go.sum index 5a5c6d7fb8..0b472e6692 100644 --- a/go.sum +++ b/go.sum @@ -584,8 +584,9 @@ github.com/danwinship/knftables v0.0.13 h1:89Ieiia6MMfXWQF9dyaou1CwBU8h8sHa2Zo3O github.com/danwinship/knftables v0.0.13/go.mod h1:OzipaBQqkQAIbVnafTGyHgfFbjWTJecrA7/XNLNMO5E= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= @@ -627,8 +628,9 @@ github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= @@ -698,8 +700,8 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flannel-io/flannel v0.24.0 h1:dsVWmcWTn9ujbNfoTR0+Epkqfq1/bGWOCP5vVCTEBLI= -github.com/flannel-io/flannel v0.24.0/go.mod h1:GvvhQS/xd5QM6oc9yeVz8KBbp5hWJZgPtwTKgpuLUPI= +github.com/flannel-io/flannel v0.24.2 h1:dXMRlGvmQ7iPtKuGJifmvpfrME5U3TVWDWZ2L/QqPqc= +github.com/flannel-io/flannel v0.24.2/go.mod h1:GvvhQS/xd5QM6oc9yeVz8KBbp5hWJZgPtwTKgpuLUPI= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= @@ -781,8 +783,9 @@ github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.4-0.20191224164422-1f9748e5f45e/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= @@ -794,8 +797,9 @@ github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHK github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.7/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -901,8 +905,9 @@ github.com/google/certificate-transparency-go v1.1.2-0.20210422104406-9f33727a7a github.com/google/certificate-transparency-go v1.1.2-0.20210511102531-373a877eec92/go.mod h1:kXWPsHVPSKVuxPPG69BRtumCbAW537FydV/GH89oBhM= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -1115,8 +1120,8 @@ github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= -github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -1228,8 +1233,8 @@ github.com/k3s-io/etcd/server/v3 v3.5.9-k3s1 h1:B3039IkTPnwQEt4tIMjC6yd6b1Q3Z9ZZ github.com/k3s-io/etcd/server/v3 v3.5.9-k3s1/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqiAIt65g= github.com/k3s-io/helm-controller v0.15.8 h1:CAMEPmiqf4ugUCpZdICGINthCn+hkG/l1fadn8aVjfQ= github.com/k3s-io/helm-controller v0.15.8/go.mod h1:AYitg40howLjKloL/zdjDDOPL1jg/K5R4af0tQcyPR8= -github.com/k3s-io/k3s v1.29.2-0.20240202025151-c635818956f3 h1:hGzlW1DuCEhreYnpyQOOSPbfNREVkrtwPoLswa0w3jc= -github.com/k3s-io/k3s v1.29.2-0.20240202025151-c635818956f3/go.mod h1:Mk9reZ7/N7FQd1mvdlPKBekDZJ1O4rBKIY2zxaC4u/I= +github.com/k3s-io/k3s v1.29.2-0.20240209192806-cfc3a124eed6 h1:4T6eXmS25mg9c7fMUdI26tQw8MjsHPoTBhOIsG+E2sc= +github.com/k3s-io/k3s v1.29.2-0.20240209192806-cfc3a124eed6/go.mod h1:4doVFTDovESsPc6+Y5DW/SBw2g8fldviloJ/GLITmRE= github.com/k3s-io/kine v0.11.0 h1:7tS0H9yBDxXiy1BgEEkBWLswwG/q4sARPTHdxOMz1qw= github.com/k3s-io/kine v0.11.0/go.mod h1:tjSsWrCetgaGMTfnJW6vzqdT/qOPhF/+nUEaE+eixBA= github.com/k3s-io/klog v1.0.0-k3s2/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= @@ -2265,8 +2270,8 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= -golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= +golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -2616,8 +2621,9 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20230525234035-dd9d682886f9 h1:jLonXEme2DCOtOpnGWxpvzXCE7lc9QmQbjEX8tt3I8g= google.golang.org/genproto v0.0.0-20230525234035-dd9d682886f9/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY=