Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package k0sctl for openSUSE:Factory checked 
in at 2024-09-16 17:41:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/k0sctl (Old)
 and      /work/SRC/openSUSE:Factory/.k0sctl.new.29891 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "k0sctl"

Mon Sep 16 17:41:50 2024 rev:6 rq:1201140 version:0.19.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/k0sctl/k0sctl.changes    2024-07-09 
20:05:51.836794070 +0200
+++ /work/SRC/openSUSE:Factory/.k0sctl.new.29891/k0sctl.changes 2024-09-16 
17:42:31.923708417 +0200
@@ -1,0 +2,20 @@
+Sat Sep 14 13:59:57 UTC 2024 - [email protected]
+
+- Update to version 0.19.0:
+  * Fix links in README (#764)
+  * Bump golang.org/x/text from 0.17.0 to 0.18.0 (#761)
+  * Lint
+  * Reinstall already installed k0s to reconfigure installFlags
+  * Use the correct field in custom binary version check (#759)
+  * Bump github.com/k0sproject/rig from 0.18.6 to 0.18.7 (#757)
+  * Relax version checking when using a custom K0sBinaryPath (#745)
+  * Bump github.com/creasty/defaults from 1.7.0 to 1.8.0 (#754)
+  * Bump k8s.io/client-go from 0.30.3 to 0.31.0 (#753)
+  * Bump github.com/urfave/cli/v2 from 2.27.3 to 2.27.4 (#751)
+  * Bump github.com/adrg/xdg from 0.4.0 to 0.5.0 (#738)
+  * Bump github.com/k0sproject/rig from 0.18.4 to 0.18.6 (#750)
+  * Use amd64 instead of x64 in binary filenames (#746)
+  * Bump github.com/urfave/cli/v2 from 2.27.2 to 2.27.3
+  * Bump k8s.io/client-go from 0.30.2 to 0.30.3
+
+-------------------------------------------------------------------

Old:
----
  k0sctl-0.18.1.obscpio

New:
----
  k0sctl-0.19.0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ k0sctl.spec ++++++
--- /var/tmp/diff_new_pack.VJKMqY/_old  2024-09-16 17:42:34.019795062 +0200
+++ /var/tmp/diff_new_pack.VJKMqY/_new  2024-09-16 17:42:34.035795723 +0200
@@ -20,7 +20,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           k0sctl
-Version:        0.18.1
+Version:        0.19.0
 Release:        0
 Summary:        A bootstrapping and management tool for k0s clusters
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.VJKMqY/_old  2024-09-16 17:42:34.255804818 +0200
+++ /var/tmp/diff_new_pack.VJKMqY/_new  2024-09-16 17:42:34.283805975 +0200
@@ -2,19 +2,21 @@
   <service name="obs_scm" mode="manual">
     <param name="url">https://github.com/k0sproject/k0sctl.git</param>
     <param name="scm">git</param>
-    <param name="revision">v0.18.1</param>
+    <param name="revision">v0.19.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="set_version" mode="manual">
   </service>
-  <service name="tar" mode="buildtime"/>
+  <service name="go_modules" mode="manual">
+  </service>
+  <!-- services below are running at buildtime -->
+  <service name="tar" mode="buildtime">
+  </service>
   <service name="recompress" mode="buildtime">
     <param name="file">*.tar</param>
     <param name="compression">gz</param>
   </service>
-  <service name="go_modules" mode="manual">
-  </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.VJKMqY/_old  2024-09-16 17:42:34.435812259 +0200
+++ /var/tmp/diff_new_pack.VJKMqY/_new  2024-09-16 17:42:34.463813416 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/k0sproject/k0sctl.git</param>
-              <param 
name="changesrevision">53248d6dd0f8635e3e41fa51c116748f5eb246c7</param></service></servicedata>
+              <param 
name="changesrevision">9246ddc823198b572b51fb19bdf5effee4721a9d</param></service></servicedata>
 (No newline at EOF)
 

++++++ k0sctl-0.18.1.obscpio -> k0sctl-0.19.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/k0sctl-0.18.1/.github/actions/smoke-test-cache/action.yaml 
new/k0sctl-0.19.0/.github/actions/smoke-test-cache/action.yaml
--- old/k0sctl-0.18.1/.github/actions/smoke-test-cache/action.yaml      
2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/.github/actions/smoke-test-cache/action.yaml      
2024-09-11 08:57:50.000000000 +0200
@@ -1,4 +1,5 @@
 name: Smoke test cache steps
+description: Cache smoke test binaries
 runs:
   using: composite
   steps:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/.github/workflows/smoke.yml 
new/k0sctl-0.19.0/.github/workflows/smoke.yml
--- old/k0sctl-0.18.1/.github/workflows/smoke.yml       2024-06-28 
12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/.github/workflows/smoke.yml       2024-09-11 
08:57:50.000000000 +0200
@@ -262,6 +262,25 @@
         env:
           LINUX_IMAGE: ${{ matrix.image }}
         run: make smoke-controller-swap
+  
+  smoke-reinstall:
+    strategy:
+      matrix:
+        image:
+          - quay.io/k0sproject/bootloose-alpine3.18
+          - quay.io/k0sproject/bootloose-ubuntu20.04
+
+    name: Reinstall (modify install flags)
+    needs: build
+    runs-on: ubuntu-20.04
+
+    steps:
+      - uses: actions/checkout@v4
+      - uses: ./.github/actions/smoke-test-cache
+      - name: Run smoke tests
+        env:
+          LINUX_IMAGE: ${{ matrix.image }}
+        run: make smoke-reinstall
 
   smoke-init:
     name: Init sub-command smoke test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/Makefile new/k0sctl-0.19.0/Makefile
--- old/k0sctl-0.18.1/Makefile  2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/Makefile  2024-09-11 08:57:50.000000000 +0200
@@ -14,8 +14,8 @@
 k0sctl: $(GO_SRCS)
        go build $(BUILD_FLAGS) -o k0sctl main.go
 
-bin/k0sctl-linux-x64: $(GO_SRCS)
-       GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o 
bin/k0sctl-linux-x64 main.go
+bin/k0sctl-linux-amd64: $(GO_SRCS)
+       GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o 
bin/k0sctl-linux-amd64 main.go
 
 bin/k0sctl-linux-arm64: $(GO_SRCS)
        GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o 
bin/k0sctl-linux-arm64 main.go
@@ -23,16 +23,16 @@
 bin/k0sctl-linux-arm: $(GO_SRCS)
        GOOS=linux GOARCH=arm CGO_ENABLED=0 go build $(BUILD_FLAGS) -o 
bin/k0sctl-linux-arm main.go
 
-bin/k0sctl-win-x64.exe: $(GO_SRCS)
-       GOOS=windows GOARCH=amd64 go build $(BUILD_FLAGS) -o 
bin/k0sctl-win-x64.exe main.go
+bin/k0sctl-win-amd64.exe: $(GO_SRCS)
+       GOOS=windows GOARCH=amd64 go build $(BUILD_FLAGS) -o 
bin/k0sctl-win-amd64.exe main.go
 
-bin/k0sctl-darwin-x64: $(GO_SRCS)
-       GOOS=darwin GOARCH=amd64 go build $(BUILD_FLAGS) -o 
bin/k0sctl-darwin-x64 main.go
+bin/k0sctl-darwin-amd64: $(GO_SRCS)
+       GOOS=darwin GOARCH=amd64 go build $(BUILD_FLAGS) -o 
bin/k0sctl-darwin-amd64 main.go
 
 bin/k0sctl-darwin-arm64: $(GO_SRCS)
        GOOS=darwin GOARCH=arm64 go build $(BUILD_FLAGS) -o 
bin/k0sctl-darwin-arm64 main.go
 
-bins := k0sctl-linux-x64 k0sctl-linux-arm64 k0sctl-linux-arm 
k0sctl-win-x64.exe k0sctl-darwin-x64 k0sctl-darwin-arm64
+bins := k0sctl-linux-amd64 k0sctl-linux-arm64 k0sctl-linux-arm 
k0sctl-win-amd64.exe k0sctl-darwin-amd64 k0sctl-darwin-arm64
 
 bin/checksums.txt: $(addprefix bin/,$(bins))
        sha256sum -b $(addprefix bin/,$(bins)) | sed 's/bin\///' > $@
@@ -51,7 +51,7 @@
 clean:
        rm -rf bin/ k0sctl
 
-smoketests := smoke-basic smoke-basic-rootless smoke-files smoke-upgrade 
smoke-reset smoke-os-override smoke-init smoke-backup-restore smoke-dynamic 
smoke-basic-openssh smoke-dryrun smoke-downloadurl smoke-controller-swap
+smoketests := smoke-basic smoke-basic-rootless smoke-files smoke-upgrade 
smoke-reset smoke-os-override smoke-init smoke-backup-restore smoke-dynamic 
smoke-basic-openssh smoke-dryrun smoke-downloadurl smoke-controller-swap 
smoke-reinstall
 .PHONY: $(smoketests)
 $(smoketests): k0sctl
        $(MAKE) -C smoke-test $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/README.md new/k0sctl-0.19.0/README.md
--- old/k0sctl-0.18.1/README.md 2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/README.md 2024-09-11 08:57:50.000000000 +0200
@@ -108,12 +108,7 @@
 
 ## Development status
 
-K0sctl is ready for use and in continuous development. It is still at a stage 
where maintaining backwards compatibility is not a high priority goal.
-
-Missing major features include at least:
-
-* The released binaries have not been signed
-* The configuration specification and command-line interface options are still 
evolving
+K0sctl is ready for use and in continuous development.
 
 ## Usage
 
@@ -153,7 +148,7 @@
 
 ### `k0sctl backup & restore`
 
-Takes a [backup](https://docs.k0sproject.io/main/backup/) of the cluster 
control plane state into the current working directory.
+Takes a [backup](https://docs.k0sproject.io/stable/backup/) of the cluster 
control plane state into the current working directory.
 
 The files are currently named with a running (unix epoch) timestamp, e.g. 
`k0s_backup_1623220591.tar.gz`.
 
@@ -250,7 +245,7 @@
 
 ###### `spec` &lt;mapping&gt; (required)
 
-The main object definition, see [below](#configuration-spec)
+The main object definition, see [below](#spec-fields)
 
 ###### `metadata` &lt;mapping&gt; (optional)
 
@@ -288,7 +283,7 @@
 One of:
 - `controller` - a controller host
 - `controller+worker` - a controller host that will also run workloads
-- `single` - a [single-node 
cluster](https://docs.k0sproject.io/main/k0s-single-node/) host, the 
configuration can only contain one host
+- `single` - a [single-node 
cluster](https://docs.k0sproject.io/stable/k0s-single-node/) host, the 
configuration can only contain one host
 - `worker` - a worker host
 
 ###### `spec.hosts[*].noTaints` &lt;boolean&gt; (optional) (default: `false`)
@@ -592,11 +587,11 @@
 
 See also:
 
-* [k0s Dynamic 
Configuration](https://docs.k0sproject.io/main/dynamic-configuration/)
+* [k0s Dynamic 
Configuration](https://docs.k0sproject.io/stable/dynamic-configuration/)
 
 ##### `spec.k0s.config` &lt;mapping&gt; (optional) (default: auto-generated)
 
-Embedded k0s cluster configuration. See [k0s configuration 
documentation](https://docs.k0sproject.io/main/configuration/) for details.
+Embedded k0s cluster configuration. See [k0s configuration 
documentation](https://docs.k0sproject.io/stable/configuration/) for details.
 
 When left out, the output of `k0s config create` will be used.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/action/apply.go 
new/k0sctl-0.19.0/action/apply.go
--- old/k0sctl-0.18.1/action/apply.go   2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/action/apply.go   2024-09-11 08:57:50.000000000 +0200
@@ -75,6 +75,7 @@
                &phase.InstallWorkers{},
                &phase.UpgradeControllers{},
                &phase.UpgradeWorkers{NoDrain: a.NoDrain},
+               &phase.Reinstall{},
                &phase.ResetWorkers{NoDrain: a.NoDrain},
                &phase.ResetControllers{NoDrain: a.NoDrain},
                &phase.RunHooks{Stage: "after", Action: "apply"},
@@ -108,7 +109,7 @@
 
        duration := time.Since(start).Truncate(time.Second)
        text := fmt.Sprintf("==> Finished in %s", duration)
-       log.Infof(phase.Colorize.Green(text).String())
+       log.Info(phase.Colorize.Green(text).String())
 
        for _, host := range a.Manager.Config.Spec.Hosts {
                if host.Reset {
@@ -141,8 +142,8 @@
                        cmd.WriteString(a.ConfigPath)
                }
 
-               log.Infof("Tip: To access the cluster you can now fetch the 
admin kubeconfig using:")
-               log.Infof("     " + phase.Colorize.Cyan(cmd.String()).String())
+               log.Info("Tip: To access the cluster you can now fetch the 
admin kubeconfig using:")
+               log.Info("     " + phase.Colorize.Cyan(cmd.String()).String())
        }
 
        return nil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/action/backup.go 
new/k0sctl-0.19.0/action/backup.go
--- old/k0sctl-0.18.1/action/backup.go  2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/action/backup.go  2024-09-11 08:57:50.000000000 +0200
@@ -44,6 +44,6 @@
 
        duration := time.Since(start).Truncate(time.Second)
        text := fmt.Sprintf("==> Finished in %s", duration)
-       log.Infof(phase.Colorize.Green(text).String())
+       log.Info(phase.Colorize.Green(text).String())
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/action/reset.go 
new/k0sctl-0.19.0/action/reset.go
--- old/k0sctl-0.18.1/action/reset.go   2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/action/reset.go   2024-09-11 08:57:50.000000000 +0200
@@ -78,7 +78,7 @@
 
        duration := time.Since(start).Truncate(time.Second)
        text := fmt.Sprintf("==> Finished in %s", duration)
-       log.Infof(phase.Colorize.Green(text).String())
+       log.Info(phase.Colorize.Green(text).String())
 
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/go.mod new/k0sctl-0.19.0/go.mod
--- old/k0sctl-0.18.1/go.mod    2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/go.mod    2024-09-11 08:57:50.000000000 +0200
@@ -9,30 +9,30 @@
        github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // 
indirect
        github.com/ChrisTrenkamp/goxpath v0.0.0-20210404020558-97928f7e12b6 // 
indirect
        github.com/a8m/envsubst v1.4.2
-       github.com/adrg/xdg v0.4.0
+       github.com/adrg/xdg v0.5.0
        github.com/bmatcuk/doublestar/v4 v4.6.1
-       github.com/creasty/defaults v1.7.0
+       github.com/creasty/defaults v1.8.0
        github.com/denisbrodbeck/machineid v1.0.1
        github.com/gofrs/uuid v4.4.0+incompatible // indirect
        github.com/hashicorp/go-version v1.7.0 // indirect
        github.com/k0sproject/dig v0.2.0
-       github.com/k0sproject/rig v0.18.4
+       github.com/k0sproject/rig v0.18.7
        github.com/logrusorgru/aurora v2.0.3+incompatible
        github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 // 
indirect
-       github.com/masterzen/winrm v0.0.0-20231227165926-e811dad5ac77 // 
indirect
+       github.com/masterzen/winrm v0.0.0-20240702205601-3fad6e106085 // 
indirect
        github.com/mattn/go-isatty v0.0.20
        github.com/segmentio/analytics-go v3.1.0+incompatible
        github.com/segmentio/backo-go v1.1.0 // indirect
        github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02
        github.com/sirupsen/logrus v1.9.3
        github.com/stretchr/testify v1.9.0
-       github.com/urfave/cli/v2 v2.27.2
+       github.com/urfave/cli/v2 v2.27.4
        github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
-       golang.org/x/crypto v0.24.0 // indirect
-       golang.org/x/net v0.26.0 // indirect
-       golang.org/x/sys v0.21.0 // indirect
-       golang.org/x/term v0.21.0 // indirect
-       golang.org/x/text v0.16.0
+       golang.org/x/crypto v0.26.0 // indirect
+       golang.org/x/net v0.28.0 // indirect
+       golang.org/x/sys v0.23.0 // indirect
+       golang.org/x/term v0.23.0 // indirect
+       golang.org/x/text v0.18.0
        gopkg.in/yaml.v2 v2.4.0
 )
 
@@ -43,7 +43,7 @@
        github.com/jellydator/validation v1.1.0
        github.com/k0sproject/version v0.6.0
        github.com/sergi/go-diff v1.3.1
-       k8s.io/client-go v0.30.2
+       k8s.io/client-go v0.31.0
 )
 
 require (
@@ -53,8 +53,9 @@
        github.com/bodgit/ntlmssp v0.0.0-20240506230425-31973bb52d9b // indirect
        github.com/bodgit/windows v1.0.1 // indirect
        github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
-       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // 
indirect
        github.com/davidmz/go-pageant v1.0.2 // indirect
+       github.com/fxamacker/cbor/v2 v2.7.0 // indirect
        github.com/gabriel-vasile/mimetype v1.4.4 // indirect
        github.com/go-logr/logr v1.4.2 // indirect
        github.com/go-playground/locales v0.14.1 // indirect
@@ -81,19 +82,19 @@
        github.com/mitchellh/go-homedir v1.1.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
        github.com/modern-go/reflect2 v1.0.2 // indirect
-       github.com/pmezard/go-difflib v1.0.0 // indirect
+       github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 
indirect
        github.com/russross/blackfriday/v2 v2.1.0 // indirect
        github.com/spf13/pflag v1.0.5 // indirect
        github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde // 
indirect
+       github.com/x448/float16 v0.8.4 // indirect
        github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
        golang.org/x/oauth2 v0.21.0 // indirect
        golang.org/x/time v0.5.0 // indirect
-       google.golang.org/protobuf v1.34.2 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       k8s.io/apimachinery v0.30.2 // indirect
+       k8s.io/apimachinery v0.31.0 // indirect
        k8s.io/klog/v2 v2.130.1 // indirect
-       k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect
+       k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
        sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
        sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
        sigs.k8s.io/yaml v1.4.0 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/go.sum new/k0sctl-0.19.0/go.sum
--- old/k0sctl-0.18.1/go.sum    2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/go.sum    2024-09-11 08:57:50.000000000 +0200
@@ -12,8 +12,8 @@
 github.com/a8m/envsubst v1.4.2/go.mod 
h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY=
 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d 
h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod 
h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
-github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
-github.com/adrg/xdg v0.4.0/go.mod 
h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
+github.com/adrg/xdg v0.5.0 h1:dDaZvhMXatArP1NPHhnfaQUqWBLBsmx1h1HXQdMoFCY=
+github.com/adrg/xdg v0.5.0/go.mod 
h1:dDdY4M4DF9Rjy4kHPeNL+ilVF+p2lK8IdM9/rTSGcI4=
 github.com/alessio/shellescape v1.4.2 
h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0=
 github.com/alessio/shellescape v1.4.2/go.mod 
h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30=
 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod 
h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
@@ -32,17 +32,20 @@
 github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
 github.com/creack/pty v1.1.17/go.mod 
h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
-github.com/creasty/defaults v1.7.0 
h1:eNdqZvc5B509z18lD8yc212CAqJNvfT1Jq6L8WowdBA=
-github.com/creasty/defaults v1.7.0/go.mod 
h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
+github.com/creasty/defaults v1.8.0 
h1:z27FJxCAa0JKt3utc0sCImAEb+spPucmKoOdLHvHYKk=
+github.com/creasty/defaults v1.8.0/go.mod 
h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
 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/davidmz/go-pageant v1.0.2 
h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0=
 github.com/davidmz/go-pageant v1.0.2/go.mod 
h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE=
 github.com/denisbrodbeck/machineid v1.0.1 
h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ=
 github.com/denisbrodbeck/machineid v1.0.1/go.mod 
h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
 github.com/emicklei/go-restful/v3 v3.11.0 
h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
 github.com/emicklei/go-restful/v3 v3.11.0/go.mod 
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/fxamacker/cbor/v2 v2.7.0 
h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
+github.com/fxamacker/cbor/v2 v2.7.0/go.mod 
h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
 github.com/gabriel-vasile/mimetype v1.4.4 
h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I=
 github.com/gabriel-vasile/mimetype v1.4.4/go.mod 
h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s=
 github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
@@ -51,8 +54,8 @@
 github.com/go-openapi/jsonpointer v0.19.6/go.mod 
h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
 github.com/go-openapi/jsonreference v0.20.2 
h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
 github.com/go-openapi/jsonreference v0.20.2/go.mod 
h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-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-playground/assert/v2 v2.2.0 
h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
 github.com/go-playground/assert/v2 v2.2.0/go.mod 
h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.14.1 
h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -75,8 +78,8 @@
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
-github.com/google/uuid v1.3.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/securecookie v1.1.1 
h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
 github.com/gorilla/securecookie v1.1.1/go.mod 
h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
 github.com/gorilla/sessions v1.2.1 
h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
@@ -112,8 +115,8 @@
 github.com/json-iterator/go v1.1.12/go.mod 
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 github.com/k0sproject/dig v0.2.0 
h1:cNxEIl96g9kqSMfPSZLhpnZ0P8bWXKv08nxvsMHop5w=
 github.com/k0sproject/dig v0.2.0/go.mod 
h1:rBcqaQlJpcKdt2x/OE/lPvhGU50u/e95CSm5g/r4s78=
-github.com/k0sproject/rig v0.18.4 
h1:HwMqZZJeEZrtzUZuo2KUlIk6hU2ojHF2ibLJFUQ2xYo=
-github.com/k0sproject/rig v0.18.4/go.mod 
h1:MS3VVTFlOUBDnjiVZbwNuyxJF81uQZ73R9ExKlTuBdY=
+github.com/k0sproject/rig v0.18.7 
h1:MFLTVmhj+lGcCHbemwoWorlCD26CwzxhKckec+lGgdc=
+github.com/k0sproject/rig v0.18.7/go.mod 
h1:FS9xKO2a4hco2XthIcXnYBozKSLr/V3tlP+fWi7OVyE=
 github.com/k0sproject/version v0.6.0 
h1:Wi8wu9j+H36+okIQA47o/YHbzNpKeIYj8IjGdJOdqsI=
 github.com/k0sproject/version v0.6.0/go.mod 
h1:5/7Js62gDCLBP6mEs0mUcYEEkYneM5qXDKN/hyFlQTM=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 
h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
@@ -137,8 +140,8 @@
 github.com/mailru/easyjson v0.7.7/go.mod 
h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 
h1:2ZKn+w/BJeL43sCxI2jhPLRv73oVVOjEKZjKkflyqxg=
 github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786/go.mod 
h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc=
-github.com/masterzen/winrm v0.0.0-20231227165926-e811dad5ac77 
h1:psY7rHKhnfqjTEgkleIYpF1vVxVfYsUYFTO/cL5Z6xM=
-github.com/masterzen/winrm v0.0.0-20231227165926-e811dad5ac77/go.mod 
h1:otHfftEJdo9JWGoq9GcJRaeNLp/uhqNq8JOk5lL+8Ks=
+github.com/masterzen/winrm v0.0.0-20240702205601-3fad6e106085 
h1:PiQLLKX4vMYlJImDzJYtQScF2BbQ0GAjPIHCDqzHHHs=
+github.com/masterzen/winrm v0.0.0-20240702205601-3fad6e106085/go.mod 
h1:JajVhkiG2bYSNYYPYuWG7WZHr42CTjMTcCjfInRNCqc=
 github.com/mattn/go-colorable v0.1.2/go.mod 
h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 github.com/mattn/go-colorable v0.1.13 
h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
 github.com/mattn/go-colorable v0.1.13/go.mod 
h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
@@ -160,10 +163,11 @@
 github.com/modern-go/reflect2 v1.0.2/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 
h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod 
h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.10.0 
h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod 
h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 
h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.12.0 
h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod 
h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
 github.com/russross/blackfriday/v2 v2.1.0 
h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod 
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/segmentio/analytics-go v3.1.0+incompatible 
h1:IyiOfUgQFVHvsykKKbdI7ZsH374uv3/DfZUo9+G0Z80=
@@ -192,8 +196,10 @@
 github.com/stretchr/testify v1.9.0/go.mod 
h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde 
h1:AMNpJRc7P+GTwVbl8DkK2I9I8BBUzNiHuH/tlxrpan0=
 github.com/tidwall/transform v0.0.0-20201103190739-32f242e2dbde/go.mod 
h1:MvrEmduDUz4ST5pGZ7CABCnOU5f3ZiOAZzT6b1A6nX8=
-github.com/urfave/cli/v2 v2.27.2 
h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI=
-github.com/urfave/cli/v2 v2.27.2/go.mod 
h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM=
+github.com/urfave/cli/v2 v2.27.4 
h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8=
+github.com/urfave/cli/v2 v2.27.4/go.mod 
h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ=
+github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
+github.com/x448/float16 v0.8.4/go.mod 
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 
h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
 github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod 
h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
 github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c 
h1:3lbZUMbMiGUW/LMkfsEABsc5zNT9+b1CvsJx47JzJ8g=
@@ -207,8 +213,8 @@
 golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod 
h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod 
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.6.0/go.mod 
h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
-golang.org/x/crypto v0.24.0/go.mod 
h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
+golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
+golang.org/x/crypto v0.26.0/go.mod 
h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod 
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
@@ -221,8 +227,8 @@
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
-golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
+golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
+golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
 golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
 golang.org/x/oauth2 v0.21.0/go.mod 
h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -235,27 +241,26 @@
 golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
-golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
+golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
-golang.org/x/term v0.21.0/go.mod 
h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
+golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
+golang.org/x/term v0.23.0/go.mod 
h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
-golang.org/x/text v0.16.0/go.mod 
h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
+golang.org/x/text v0.18.0/go.mod 
h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
 golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
 golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -281,18 +286,18 @@
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI=
-k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI=
-k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg=
-k8s.io/apimachinery v0.30.2/go.mod 
h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
-k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50=
-k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs=
+k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo=
+k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE=
+k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc=
+k8s.io/apimachinery v0.31.0/go.mod 
h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo=
+k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8=
+k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
 k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 
h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
 k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod 
h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
-k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 
h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak=
-k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 
h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
+k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd 
h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod 
h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 sigs.k8s.io/structured-merge-diff/v4 v4.4.1 
h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/gather_k0s_facts.go 
new/k0sctl-0.19.0/phase/gather_k0s_facts.go
--- old/k0sctl-0.18.1/phase/gather_k0s_facts.go 2024-06-28 12:11:27.000000000 
+0200
+++ new/k0sctl-0.19.0/phase/gather_k0s_facts.go 2024-09-11 08:57:50.000000000 
+0200
@@ -74,6 +74,7 @@
                return err
        }
        p.leader = p.Config.Spec.K0sLeader()
+       p.leader.Metadata.IsK0sLeader = true
 
        if id, err := p.Config.Spec.K0s.GetClusterID(p.leader); err == nil {
                p.Config.Spec.K0s.Metadata.ClusterID = id
@@ -271,9 +272,14 @@
 
        h.Metadata.NeedsUpgrade = p.needsUpgrade(h)
 
+       if len(status.Args) > 2 {
+               // status.Args contains the binary path and the role as the 
first two elements, which we can ignore here.
+               h.Metadata.K0sStatusArgs = status.Args[2:]
+       }
+
        log.Infof("%s: is running k0s %s version %s", h, h.Role, 
h.Metadata.K0sRunningVersion)
        if h.IsController() {
-               for _, a := range status.Args {
+               for _, a := range h.Metadata.K0sStatusArgs {
                        if strings.HasPrefix(a, "--enable-dynamic-config") && 
!strings.HasSuffix(a, "false") {
                                if !p.Config.Spec.K0s.DynamicConfig {
                                        log.Warnf("%s: controller has dynamic 
config enabled, but spec.k0s.dynamicConfig was not set in configuration, 
proceeding in dynamic config mode", h)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/install_controllers.go 
new/k0sctl-0.19.0/phase/install_controllers.go
--- old/k0sctl-0.18.1/phase/install_controllers.go      2024-06-28 
12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/phase/install_controllers.go      2024-09-11 
08:57:50.000000000 +0200
@@ -77,7 +77,6 @@
                        log.Warnf("%s: failed to invalidate worker join token: 
%v", p.leader, err)
                }
                _ = p.Wet(h, "overwrite k0s join token file", func() error {
-
                        if err := h.Configurer.WriteFile(h, 
h.K0sJoinTokenPath(), "# overwritten by k0sctl after join\n", "0600"); err != 
nil {
                                log.Warnf("%s: failed to overwrite the join 
token file at %s", h, h.K0sJoinTokenPath())
                        }
@@ -105,7 +104,6 @@
                }
                return nil
        })
-
        if err != nil {
                return err
        }
@@ -162,6 +160,7 @@
                        return err
                }
                h.Metadata.K0sInstalled = true
+               h.Metadata.K0sRunningVersion = p.Config.Spec.K0s.Version
 
                if p.IsWet() {
                        if len(h.Environment) > 0 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/reinstall.go 
new/k0sctl-0.19.0/phase/reinstall.go
--- old/k0sctl-0.18.1/phase/reinstall.go        1970-01-01 01:00:00.000000000 
+0100
+++ new/k0sctl-0.19.0/phase/reinstall.go        2024-09-11 08:57:50.000000000 
+0200
@@ -0,0 +1,137 @@
+package phase
+
+import (
+       "context"
+       "fmt"
+       "math"
+       "strings"
+       "time"
+
+       "github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1"
+       
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
+       "github.com/k0sproject/k0sctl/pkg/node"
+       "github.com/k0sproject/k0sctl/pkg/retry"
+       "github.com/k0sproject/rig/exec"
+       log "github.com/sirupsen/logrus"
+)
+
+type Reinstall struct {
+       GenericPhase
+       hosts cluster.Hosts
+}
+
+// Title for the phase
+func (p *Reinstall) Title() string {
+       return "Reinstall"
+}
+
+// Prepare the phase
+func (p *Reinstall) Prepare(config *v1beta1.Cluster) error {
+       p.Config = config
+       p.hosts = p.Config.Spec.Hosts.Filter(func(h *cluster.Host) bool {
+               return !h.Metadata.K0sInstalled && h.Metadata.K0sRunningVersion 
!= nil && !h.Reset && h.FlagsChanged()
+       })
+
+       return nil
+}
+
+// ShouldRun is true when there are hosts that needs to be reinstalled
+func (p *Reinstall) ShouldRun() bool {
+       return cluster.K0sForceFlagSince.Check(p.Config.Spec.K0s.Version) && 
len(p.hosts) > 0
+}
+
+// Run the phase
+func (p *Reinstall) Run() error {
+       if !cluster.K0sForceFlagSince.Check(p.Config.Spec.K0s.Version) {
+               log.Warnf("k0s version %s does not support install --force 
flag, installFlags won't be reconfigured", p.Config.Spec.K0s.Version)
+               return nil
+       }
+       controllers := p.hosts.Controllers()
+       if len(controllers) > 0 {
+               log.Infof("Reinstalling %d controllers sequentially", 
len(controllers))
+               err := controllers.Each(func(h *cluster.Host) error {
+                       return p.reinstall(h)
+               })
+               if err != nil {
+                       return err
+               }
+       }
+
+       workers := p.hosts.Workers()
+       if len(workers) == 0 {
+               return nil
+       }
+
+       concurrentReinstalls := int(math.Floor(float64(len(p.hosts)) * 0.10))
+       if concurrentReinstalls == 0 {
+               concurrentReinstalls = 1
+       }
+
+       log.Infof("Reinstalling max %d workers in parallel", 
concurrentReinstalls)
+
+       return p.hosts.BatchedParallelEach(concurrentReinstalls, p.reinstall)
+}
+
+func (p *Reinstall) reinstall(h *cluster.Host) error {
+       if p.Config.Spec.K0s.DynamicConfig && h.Role != "worker" {
+               h.InstallFlags.AddOrReplace("--enable-dynamic-config")
+       }
+
+       h.InstallFlags.AddOrReplace("--force")
+
+       cmd, err := h.K0sInstallCommand()
+       if err != nil {
+               return err
+       }
+       log.Infof("%s: reinstalling k0s", h)
+       err = p.Wet(h, fmt.Sprintf("reinstall k0s using `%s", 
strings.ReplaceAll(cmd, h.Configurer.K0sBinaryPath(), "k0s")), func() error {
+               if err := h.Exec(cmd, exec.Sudo(h)); err != nil {
+                       return fmt.Errorf("failed to reinstall k0s: %w", err)
+               }
+               return nil
+       })
+       if err != nil {
+               return err
+       }
+
+       err = p.Wet(h, "restart k0s service", func() error {
+               if err := h.Configurer.RestartService(h, h.K0sServiceName()); 
err != nil {
+                       return fmt.Errorf("failed to restart k0s: %w", err)
+               }
+               log.Infof("%s: waiting for the k0s service to start", h)
+               if err := retry.Timeout(context.TODO(), retry.DefaultTimeout, 
node.ServiceRunningFunc(h, h.K0sServiceName())); err != nil {
+                       return fmt.Errorf("k0s did not restart: %w", err)
+               }
+               return nil
+       })
+       if err != nil {
+               return fmt.Errorf("restart after reinstall: %w", err)
+       }
+
+       if h != p.Config.Spec.K0sLeader() {
+               return nil
+       }
+
+       if NoWait || !p.IsWet() {
+               log.Warnf("%s: skipping scheduler and system pod checks because 
--no-wait given", h)
+               return nil
+       }
+
+       log.Infof("%s: waiting for the scheduler to become ready", h)
+       if err := retry.Timeout(context.TODO(), retry.DefaultTimeout, 
node.ScheduledEventsAfterFunc(h, time.Now())); err != nil {
+               if !Force {
+                       return fmt.Errorf("failed to observe scheduling events 
after api start-up, you can ignore this check by using --force: %w", err)
+               }
+               log.Warnf("%s: failed to observe scheduling events after api 
start-up: %s", h, err)
+       }
+
+       log.Infof("%s: waiting for system pods to become ready", h)
+       if err := retry.Timeout(context.TODO(), retry.DefaultTimeout, 
node.SystemPodsRunningFunc(h)); err != nil {
+               if !Force {
+                       return fmt.Errorf("all system pods not running after 
api start-up, you can ignore this check by using --force: %w", err)
+               }
+               log.Warnf("%s: failed to observe system pods running after api 
start-up: %s", h, err)
+       }
+
+       return nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/upgrade_controllers.go 
new/k0sctl-0.19.0/phase/upgrade_controllers.go
--- old/k0sctl-0.18.1/phase/upgrade_controllers.go      2024-06-28 
12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/phase/upgrade_controllers.go      2024-09-11 
08:57:50.000000000 +0200
@@ -9,6 +9,7 @@
        
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
        "github.com/k0sproject/k0sctl/pkg/node"
        "github.com/k0sproject/k0sctl/pkg/retry"
+       "github.com/k0sproject/rig/exec"
        log "github.com/sirupsen/logrus"
 )
 
@@ -95,6 +96,27 @@
                        }
                }
 
+               err = p.Wet(h, "reinstall k0s service", func() error {
+                       if p.Config.Spec.K0s.DynamicConfig {
+                               
h.InstallFlags.AddOrReplace("--enable-dynamic-config")
+                       }
+
+                       h.InstallFlags.AddOrReplace("--force")
+
+                       cmd, err := h.K0sInstallCommand()
+                       if err != nil {
+                               return err
+                       }
+                       if err := h.Exec(cmd, exec.Sudo(h)); err != nil {
+                               return fmt.Errorf("failed to reinstall k0s: 
%w", err)
+                       }
+                       return nil
+               })
+               if err != nil {
+                       return err
+               }
+               h.Metadata.K0sInstalled = true
+
                log.Debugf("%s: restart service", h)
                err = p.Wet(h, "start k0s service with the new binary", func() 
error {
                        if err := h.Configurer.StartService(h, 
h.K0sServiceName()); err != nil {
@@ -119,6 +141,8 @@
                                return fmt.Errorf("kube api did not become 
ready: %w", err)
                        }
                }
+
+               h.Metadata.K0sRunningVersion = p.Config.Spec.K0s.Version
        }
 
        leader := p.Config.Spec.K0sLeader()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/upgrade_workers.go 
new/k0sctl-0.19.0/phase/upgrade_workers.go
--- old/k0sctl-0.18.1/phase/upgrade_workers.go  2024-06-28 12:11:27.000000000 
+0200
+++ new/k0sctl-0.19.0/phase/upgrade_workers.go  2024-09-11 08:57:50.000000000 
+0200
@@ -9,6 +9,7 @@
        
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
        "github.com/k0sproject/k0sctl/pkg/node"
        "github.com/k0sproject/k0sctl/pkg/retry"
+       "github.com/k0sproject/rig/exec"
        log "github.com/sirupsen/logrus"
 )
 
@@ -182,6 +183,23 @@
                }
        }
 
+       err = p.Wet(h, "reinstall k0s service", func() error {
+               h.InstallFlags.AddOrReplace("--force")
+
+               cmd, err := h.K0sInstallCommand()
+               if err != nil {
+                       return err
+               }
+               if err := h.Exec(cmd, exec.Sudo(h)); err != nil {
+                       return fmt.Errorf("failed to reinstall k0s: %w", err)
+               }
+               return nil
+       })
+       if err != nil {
+               return err
+       }
+       h.Metadata.K0sInstalled = true
+
        log.Debugf("%s: restart service", h)
        err = p.Wet(h, "restart k0s service", func() error {
                if err := h.Configurer.StartService(h, h.K0sServiceName()); err 
!= nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/phase/validate_hosts.go 
new/k0sctl-0.19.0/phase/validate_hosts.go
--- old/k0sctl-0.18.1/phase/validate_hosts.go   2024-06-28 12:11:27.000000000 
+0200
+++ new/k0sctl-0.19.0/phase/validate_hosts.go   2024-09-11 08:57:50.000000000 
+0200
@@ -4,6 +4,7 @@
        "fmt"
 
        
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
+       log "github.com/sirupsen/logrus"
 )
 
 // ValidateHosts performs remote OS detection
@@ -48,6 +49,7 @@
 
        return p.parallelDo(
                p.Config.Spec.Hosts,
+               p.warnK0sBinaryPath,
                p.validateUniqueHostname,
                p.validateUniqueMachineID,
                p.validateUniquePrivateAddress,
@@ -55,6 +57,14 @@
        )
 }
 
+func (p *ValidateHosts) warnK0sBinaryPath(h *cluster.Host) error {
+       if h.K0sBinaryPath != "" {
+               log.Warnf("%s: k0s binary path is set to %q, version checking 
for the host is disabled. The k0s version for other hosts is %s.", h, 
h.K0sBinaryPath, p.Config.Spec.K0s.Version)
+       }
+
+       return nil
+}
+
 func (p *ValidateHosts) validateUniqueHostname(h *cluster.Host) error {
        if p.hncount[h.Metadata.Hostname] > 1 {
                return fmt.Errorf("hostname is not unique: %s", 
h.Metadata.Hostname)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/k0sctl-0.18.1/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go 
new/k0sctl-0.19.0/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go
--- old/k0sctl-0.18.1/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go     
2024-06-28 12:11:27.000000000 +0200
+++ new/k0sctl-0.19.0/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster/host.go     
2024-09-11 08:57:50.000000000 +0200
@@ -6,6 +6,7 @@
        gos "os"
        gopath "path"
        "regexp"
+       "sort"
        "strconv"
        "strings"
        "time"
@@ -23,7 +24,7 @@
        log "github.com/sirupsen/logrus"
 )
 
-var k0sForceFlagSince = version.MustConstraint(">= v1.27.4+k0s.0")
+var K0sForceFlagSince = version.MustConstraint(">= v1.27.4+k0s.0")
 
 // Host contains all the needed details to work with hosts
 type Host struct {
@@ -183,6 +184,7 @@
        K0sNewConfig      string
        K0sJoinToken      string
        K0sJoinTokenID    string
+       K0sStatusArgs     []string
        Arch              string
        IsK0sLeader       bool
        Hostname          string
@@ -334,7 +336,7 @@
                }
        }
 
-       if flags.Include("--force") && h.Metadata.K0sBinaryVersion != nil && 
!k0sForceFlagSince.Check(h.Metadata.K0sBinaryVersion) {
+       if flags.Include("--force") && h.Metadata.K0sBinaryVersion != nil && 
!K0sForceFlagSince.Check(h.Metadata.K0sBinaryVersion) {
                log.Warnf("%s: k0s version %s does not support the --force 
flag, ignoring it", h, h.Metadata.K0sBinaryVersion)
                flags.Delete("--force")
        }
@@ -399,7 +401,8 @@
        if err != nil {
                return fmt.Errorf("failed to get updated k0s binary version: 
%w", err)
        }
-       if !version.Equal(updatedVersion) {
+       // verify the installed version matches the expected version, unless a 
custom k0sbinarypath is used
+       if h.K0sBinaryPath == "" && !version.Equal(updatedVersion) {
                return fmt.Errorf("updated k0s binary version is %s not %s", 
updatedVersion, version)
        }
 
@@ -568,3 +571,121 @@
        }
        return builder.String()
 }
+
+var flagParseRe = regexp.MustCompile(`--?([\w\-]+)(?:[=\s](\S+))?`)
+
+// FlagsChanged returns true when the flags have changed by comparing the 
host.Metadata.K0sStatusArgs to what host.InstallFlags would produce
+func (h *Host) FlagsChanged() bool {
+       var formattedFlags []string
+
+       cmd, err := h.K0sInstallCommand()
+       if err != nil {
+               log.Warnf("%s: could not get install command: %s", h, err)
+               return false
+       }
+       flags, err := shellSplit(cmd)
+       if err != nil {
+               log.Warnf("%s: could not split install command: %s", h, err)
+               return false
+       }
+       if len(flags) < 4 {
+               // ["k0s", "install", <role>, <flags..>]
+               log.Debugf("%s: no installFlags", h)
+               return false
+       }
+       flags = flags[3:] // discard the first 3 elements
+
+       // format the flags the same way as spf13/cobra does in k0s
+       for i := 0; i < len(flags); i++ {
+               flag := flags[i]
+               var key string
+               var value string
+               match := flagParseRe.FindStringSubmatch(flag)
+               if len(match) < 2 {
+                       log.Warnf("%s: could not parse flag: %s", h, flag)
+                       continue
+               }
+
+               key = match[1]
+
+               if len(match) > 2 && len(match[2]) > 0 {
+                       value = match[2]
+               } else if len(flags) > i+1 && !strings.HasPrefix(flags[i+1], 
"-") {
+                       value = flags[i+1]
+                       i++
+               } else {
+                       value = "true"
+               }
+               if s, err := strconv.Unquote(value); err == nil {
+                       value = s
+               }
+               formattedFlags = append(formattedFlags, fmt.Sprintf("--%s=%s", 
key, value))
+       }
+
+       k0sArgs := h.Metadata.K0sStatusArgs
+       if len(k0sArgs) != len(formattedFlags) {
+               log.Debugf("%s: installFlags seem to have changed because of 
different length: %d %v vs %d %v", h, len(k0sArgs), k0sArgs, 
len(formattedFlags), formattedFlags)
+               return true
+       }
+       sort.Strings(formattedFlags)
+       sort.Strings(k0sArgs)
+       for i := range formattedFlags {
+               if formattedFlags[i] != k0sArgs[i] {
+                       log.Debugf("%s: installFlags seem to have changed 
because of different flags: %v vs %v", h, formattedFlags, k0sArgs)
+                       return true
+               }
+       }
+
+       log.Debugf("%s: installFlags have not changed", h)
+
+       return false
+}
+
+// Split splits the input string respecting shell-like quoted segments -- 
borrowed from rig v2 until migration
+func shellSplit(input string) ([]string, error) { //nolint:cyclop
+       var segments []string
+
+       currentSegment := &strings.Builder{}
+
+       var inDoubleQuotes, inSingleQuotes, isEscaped bool
+
+       for i := range len(input) {
+               currentChar := input[i]
+
+               if isEscaped {
+                       currentSegment.WriteByte(currentChar)
+                       isEscaped = false
+                       continue
+               }
+
+               switch {
+               case currentChar == '\\' && !inSingleQuotes:
+                       isEscaped = true
+               case currentChar == '"' && !inSingleQuotes:
+                       inDoubleQuotes = !inDoubleQuotes
+               case currentChar == '\'' && !inDoubleQuotes:
+                       inSingleQuotes = !inSingleQuotes
+               case currentChar == ' ' && !inDoubleQuotes && !inSingleQuotes:
+                       // Space outside quotes; delimiter for a new segment
+                       segments = append(segments, currentSegment.String())
+                       currentSegment.Reset()
+               default:
+                       currentSegment.WriteByte(currentChar)
+               }
+       }
+
+       if inDoubleQuotes || inSingleQuotes {
+               return nil, fmt.Errorf("split `%q`: mismatched quotes", input)
+       }
+
+       if isEscaped {
+               return nil, fmt.Errorf("split `%q`: trailing backslash", input)
+       }
+
+       // Add the last segment if present
+       if currentSegment.Len() > 0 {
+               segments = append(segments, currentSegment.String())
+       }
+
+       return segments, nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/smoke-test/Makefile 
new/k0sctl-0.19.0/smoke-test/Makefile
--- old/k0sctl-0.18.1/smoke-test/Makefile       2024-06-28 12:11:27.000000000 
+0200
+++ new/k0sctl-0.19.0/smoke-test/Makefile       2024-09-11 08:57:50.000000000 
+0200
@@ -31,6 +31,9 @@
 smoke-dynamic: $(bootloose) id_rsa_k0s k0sctl
        ./smoke-dynamic.sh
 
+smoke-reinstall: $(bootloose) id_rsa_k0s k0sctl
+       ./smoke-reinstall.sh
+
 smoke-files: $(bootloose) id_rsa_k0s k0sctl
        ./smoke-files.sh
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/k0sctl-0.18.1/smoke-test/k0sctl-installflags.yaml.tpl 
new/k0sctl-0.19.0/smoke-test/k0sctl-installflags.yaml.tpl
--- old/k0sctl-0.18.1/smoke-test/k0sctl-installflags.yaml.tpl   1970-01-01 
01:00:00.000000000 +0100
+++ new/k0sctl-0.19.0/smoke-test/k0sctl-installflags.yaml.tpl   2024-09-11 
08:57:50.000000000 +0200
@@ -0,0 +1,26 @@
+apiVersion: k0sctl.k0sproject.io/v1beta1
+kind: cluster
+spec:
+  hosts:
+    - role: controller
+      uploadBinary: true
+      installFlags:
+        - "${K0S_CONTROLLER_FLAG}"
+      ssh:
+        address: "127.0.0.1"
+        port: 9022
+        keyPath: ./id_rsa_k0s
+    - role: worker
+      uploadBinary: true
+      installFlags:
+        - "${K0S_WORKER_FLAG}"
+      ssh:
+        address: "127.0.0.1"
+        port: 9023
+        keyPath: ./id_rsa_k0s
+  k0s:
+    version: "${K0S_VERSION}"
+    config:
+      spec:
+        telemetry:
+          enabled: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/k0sctl-0.18.1/smoke-test/smoke-reinstall.sh 
new/k0sctl-0.19.0/smoke-test/smoke-reinstall.sh
--- old/k0sctl-0.18.1/smoke-test/smoke-reinstall.sh     1970-01-01 
01:00:00.000000000 +0100
+++ new/k0sctl-0.19.0/smoke-test/smoke-reinstall.sh     2024-09-11 
08:57:50.000000000 +0200
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+
+K0SCTL_CONFIG="k0sctl-installflags.yaml"
+
+export K0S_CONTROLLER_FLAG="--labels=smoke-stage=1"
+export K0S_WORKER_FLAG="--labels=smoke-stage=1"
+envsubst < "k0sctl-installflags.yaml.tpl" > "${K0SCTL_CONFIG}"
+
+set -e
+
+. ./smoke.common.sh
+trap cleanup EXIT
+
+deleteCluster
+createCluster
+
+remoteCommand() {
+  local userhost="$1"
+  shift
+  echo "* Running command on ${userhost}: $*"
+  bootloose ssh "${userhost}" -- "$*"
+}
+
+echo "Installing ${K0S_VERSION}"
+../k0sctl apply --config "${K0SCTL_CONFIG}" --debug
+remoteCommand "root@manager0" "k0s status -o json | grep -q -- 
${K0S_CONTROLLER_FLAG}"
+remoteCommand "root@worker0" "k0s status -o json | grep -q -- 
${K0S_WORKER_FLAG}"
+
+export K0S_CONTROLLER_FLAG="--labels=smoke-stage=2" 
+export K0S_WORKER_FLAG="--labels=smoke-stage=2" 
+envsubst < "k0sctl-installflags.yaml.tpl" > "${K0SCTL_CONFIG}"
+
+echo "Re-applying ${K0S_VERSION} with modified installFlags"
+../k0sctl apply --config "${K0SCTL_CONFIG}" --debug
+remoteCommand "root@manager0" "k0s status -o json | grep -q -- 
${K0S_CONTROLLER_FLAG}"
+remoteCommand "root@worker0" "k0s status -o json | grep -q -- 
${K0S_WORKER_FLAG}"

++++++ k0sctl.obsinfo ++++++
--- /var/tmp/diff_new_pack.VJKMqY/_old  2024-09-16 17:42:35.191843510 +0200
+++ /var/tmp/diff_new_pack.VJKMqY/_new  2024-09-16 17:42:35.219844668 +0200
@@ -1,5 +1,5 @@
 name: k0sctl
-version: 0.18.1
-mtime: 1719569487
-commit: 53248d6dd0f8635e3e41fa51c116748f5eb246c7
+version: 0.19.0
+mtime: 1726037870
+commit: 9246ddc823198b572b51fb19bdf5effee4721a9d
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/k0sctl/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.k0sctl.new.29891/vendor.tar.gz differ: char 5, line 
1

Reply via email to