diff --git a/cmd/talosctl/cmd/talos/conformance.go b/cmd/talosctl/cmd/talos/conformance.go index 322b32eb47..fd61810430 100644 --- a/cmd/talosctl/cmd/talos/conformance.go +++ b/cmd/talosctl/cmd/talos/conformance.go @@ -11,7 +11,7 @@ import ( "github.com/spf13/cobra" "github.com/siderolabs/talos/pkg/cluster" - "github.com/siderolabs/talos/pkg/cluster/sonobuoy" + "github.com/siderolabs/talos/pkg/cluster/hydrophone" "github.com/siderolabs/talos/pkg/machinery/client" ) @@ -50,9 +50,9 @@ var conformanceKubernetesCmd = &cobra.Command{ switch conformanceKubernetesCmdFlags.mode { case "fast": - return sonobuoy.FastConformance(ctx, &state) + return hydrophone.FastConformance(ctx, &state) case "certified": - return sonobuoy.CertifiedConformance(ctx, &state) + return hydrophone.CertifiedConformance(ctx, &state) default: return fmt.Errorf("unsupported conformance mode %v", conformanceKubernetesCmdFlags.mode) } diff --git a/cmd/talosctl/cmd/talos/health.go b/cmd/talosctl/cmd/talos/health.go index db55f8a9d2..695b52458f 100644 --- a/cmd/talosctl/cmd/talos/health.go +++ b/cmd/talosctl/cmd/talos/health.go @@ -18,7 +18,7 @@ import ( "github.com/siderolabs/talos/cmd/talosctl/pkg/talos/helpers" "github.com/siderolabs/talos/pkg/cluster" "github.com/siderolabs/talos/pkg/cluster/check" - "github.com/siderolabs/talos/pkg/cluster/sonobuoy" + "github.com/siderolabs/talos/pkg/cluster/hydrophone" clusterapi "github.com/siderolabs/talos/pkg/machinery/api/cluster" "github.com/siderolabs/talos/pkg/machinery/client" "github.com/siderolabs/talos/pkg/machinery/config/machine" @@ -207,10 +207,10 @@ func runE2E() error { checkCtx, checkCtxCancel := context.WithTimeout(ctx, healthCmdFlags.clusterWaitTimeout) defer checkCtxCancel() - options := sonobuoy.DefaultOptions() + options := hydrophone.DefaultOptions() options.UseSpinner = true - return sonobuoy.Run(checkCtx, state, options) + return hydrophone.Run(checkCtx, state, options) }) } diff --git a/go.mod b/go.mod index 2d1865be59..0f690eb316 100644 --- a/go.mod +++ b/go.mod @@ -155,7 +155,6 @@ require ( github.com/u-root/u-root v0.14.0 github.com/ulikunitz/xz v0.5.12 github.com/vishvananda/netlink v1.2.1-beta.2 - github.com/vmware-tanzu/sonobuoy v0.57.1 github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3 github.com/vultr/metadata v1.1.0 go.etcd.io/etcd/api/v3 v3.5.14 @@ -177,6 +176,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 k8s.io/klog/v2 v2.120.1 kernel.org/pub/linux/libs/security/libcap/cap v1.2.70 + sigs.k8s.io/hydrophone v0.6.0 sigs.k8s.io/yaml v1.4.0 ) @@ -210,7 +210,6 @@ require ( github.com/aws/aws-sdk-go-v2/service/sts v1.28.11 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/briandowns/spinner v1.19.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cilium/ebpf v0.12.3 // indirect @@ -231,7 +230,7 @@ require ( github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.2 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -240,9 +239,9 @@ require ( github.com/go-errors/errors v1.4.2 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.19.6 // indirect - github.com/go-openapi/jsonreference v0.20.2 // indirect - github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/jsonpointer v0.20.2 // indirect + github.com/go-openapi/jsonreference v0.20.4 // indirect + github.com/go-openapi/swag v0.22.9 // indirect github.com/go-resty/resty/v2 v2.9.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect @@ -253,17 +252,15 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/gorilla/mux v1.8.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/gosuri/uilive v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect - github.com/imdario/mergo v0.3.13 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jonboulle/clockwork v0.2.2 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -271,8 +268,8 @@ require ( github.com/json-iterator/go v1.1.12 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lmittmann/tint v1.0.4 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect @@ -283,7 +280,6 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/spdystream v0.2.0 // indirect @@ -301,29 +297,21 @@ require ( github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 // indirect github.com/opencontainers/selinux v1.11.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.15 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.19.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.54.0 // indirect - github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect - github.com/sethgrid/pester v1.2.0 // indirect github.com/siderolabs/protoenc v0.2.1 // indirect github.com/siderolabs/tcpproxy v0.1.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.14.0 // indirect - github.com/subosito/gotenv v1.4.1 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect github.com/u-root/uio v0.0.0-20240209044354-b3d14b93376a // indirect github.com/vbatts/tar-split v0.11.3 // indirect @@ -352,11 +340,9 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240521202816-d264139d666e // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect k8s.io/cli-runtime v0.30.1 // indirect - k8s.io/klog v1.0.0 // indirect - k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/kube-openapi v0.0.0-20240429181424-4a129a0ff6f9 // indirect k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect kernel.org/pub/linux/libs/security/libcap/psx v1.2.70 // indirect rsc.io/qr v0.2.0 // indirect diff --git a/go.sum b/go.sum index b94f3126dc..d8421ac52b 100644 --- a/go.sum +++ b/go.sum @@ -127,8 +127,6 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1U github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/briandowns/spinner v1.19.0 h1:s8aq38H+Qju89yhp89b4iIiMzMm8YN3p6vGpwyh/a8E= -github.com/briandowns/spinner v1.19.0/go.mod h1:mQak9GHqbspjC/5iUx3qMlIho8xBS/ppAL/hX5SmPJU= github.com/brianvoe/gofakeit/v6 v6.24.0 h1:74yq7RRz/noddscZHRS2T84oHZisW9muwbb8sRnU52A= github.com/brianvoe/gofakeit/v6 v6.24.0/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= @@ -197,7 +195,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -226,8 +223,8 @@ github.com/ecks/uefi v0.0.0-20221116212947-caef65d070eb h1:LZBZtPpqHDydudNAs2sHm github.com/ecks/uefi v0.0.0-20221116212947-caef65d070eb/go.mod h1:jP/WitZVr91050NiqxEEp0ynBFbP2eUQC0CnxWPlQTA= github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -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/emicklei/go-restful/v3 v3.11.2 h1:1onLa9DcsMYO9P+CXaL0dStDqQ2EHHXLiz+BtnqkLAU= +github.com/emicklei/go-restful/v3 v3.11.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -238,7 +235,6 @@ github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lSh github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -268,18 +264,17 @@ github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -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/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/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= +github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= +github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU= +github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= +github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= +github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= github.com/go-resty/resty/v2 v2.9.1 h1:PIgGx4VrHvag0juCJ4dDv3MiFRlDmP0vicBucwf+gLM= github.com/go-resty/resty/v2 v2.9.1/go.mod h1:4/GYJVjh9nhkhGR6AUNW3XhpDYNUr+Uvy9gV/VGZIy4= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -384,11 +379,9 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopacket/gopacket v1.2.0 h1:eXbzFad7f73P1n2EJHQlsKuvIMJjVXK5tXoSca78I3A= github.com/gopacket/gopacket v1.2.0/go.mod h1:BrAKEy5EOGQ76LSqh7DMAr7z0NNPdczWm2GxCG7+I8M= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/gosuri/uilive v0.0.4 h1:hUEBpQDj8D8jXgtCdBu7sWsy5sbW/5GhuO8KBwJ2jyY= github.com/gosuri/uilive v0.0.4/go.mod h1:V/epo5LjjlDE5RJUcqx8dbw+zc93y5Ya3yg8tfZ74VI= github.com/gosuri/uiprogress v0.0.1 h1:0kpv/XY/qTmFWl/SkaJykZXrBBzwwadmW8fRb7RJSxw= @@ -416,8 +409,6 @@ github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mO github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hetznercloud/hcloud-go/v2 v2.9.0 h1:s0N6R7Zoi2DPfMtUF5o9VeUBzTtHVY6MIkHOQnfu/AY= github.com/hetznercloud/hcloud-go/v2 v2.9.0/go.mod h1:qtW/TuU7Bs16ibXl/ktJarWqU2LwHr7eGlwoilHxtgg= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= @@ -428,8 +419,8 @@ github.com/hugelgupf/vmtest v0.0.0-20240216064925-0561770280a1 h1:jWoR2Yqg8tzM0v github.com/hugelgupf/vmtest v0.0.0-20240216064925-0561770280a1/go.mod h1:B63hDJMhTupLWCHwopAyEo7wRFowx9kOc8m8j1sfOqE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +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.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/insomniacslk/dhcp v0.0.0-20240529192340-51bc6136a0a6 h1:dh8D8FksyMhD64mRMbUhZHWYJfNoNMCxfVq6eexleMw= @@ -461,7 +452,6 @@ github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuV github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -474,18 +464,16 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhn github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/linode/go-metadata v0.2.0 h1:hlWzkYLa80ikA0NmFX2hcwhcnWFol8F3UIvJnOgdKw4= github.com/linode/go-metadata v0.2.0/go.mod h1:XraDbSwms0+CtA7/Qh7agkSvGDc6H0s782kpX9MdMu0= +github.com/lmittmann/tint v1.0.4 h1:LeYihpJ9hyGvE0w+K2okPTGUdVLfng1+nDNVR4vWISc= +github.com/lmittmann/tint v1.0.4/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/martinlindhe/base36 v1.1.1 h1:1F1MZ5MGghBXDZ2KJ3QfxmiydlWOGB8HCEtkap5NkVg= github.com/martinlindhe/base36 v1.1.1/go.mod h1:vMS8PaZ5e/jV9LwFKlm0YLnXl/hpOihiBxKkIoc3g08= -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= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= @@ -528,8 +516,6 @@ github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= @@ -586,8 +572,6 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/packethost/packngo v0.31.0 h1:LLH90ardhULWbagBIc3I3nl2uU75io0a7AwY6hyi0S4= github.com/packethost/packngo v0.31.0/go.mod h1:Io6VJqzkiqmIEQbpOjeIw9v8q9PfcTEq8TEY/tMQsfw= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -603,8 +587,9 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/planetscale/vtprotobuf v0.6.0 h1:nBeETjudeJ5ZgBHUz1fVHvbqUKnYOXNhsIEabROxmNA= github.com/planetscale/vtprotobuf v0.6.0/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -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/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/pmorjan/kmod v1.1.1 h1:Vfw6bMaOg/sYSBCqJPT9TbqHHf5zK00GbaL5JQLO4r0= github.com/pmorjan/kmod v1.1.1/go.mod h1:jR4fVosEpQ6b5U0rpxaqoShTDPvCjLIP8vEESZyvnqQ= github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= @@ -616,8 +601,6 @@ github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= -github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/rivo/tview v0.0.0-20240524063012-037df494fb76 h1:iqvDlgyjmqleATtFbA7c14djmPh2n4mCYUv7JlD/ruA= github.com/rivo/tview v0.0.0-20240524063012-037df494fb76/go.mod h1:02iFIz7K/A9jGCvrizLPvoqr4cEIx7q54RH5Qudkrss= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -639,14 +622,10 @@ github.com/safchain/ethtool v0.3.0 h1:gimQJpsI6sc1yIqP/y8GYgiXn/NjgvpM0RNoWLVVmP github.com/safchain/ethtool v0.3.0/go.mod h1:SA9BwrgyAqNo7M+uaL6IYbxpm5wk3L7Mm6ocLW+CJUs= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= -github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= -github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 h1:yGAraK1uUjlhSXgNMIy8o/J4LFNcy7yeipBqt9N9mVg= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sethgrid/pester v1.2.0 h1:adC9RS29rRUef3rIKWPOuP1Jm3/MmB6ke+OhE5giENI= -github.com/sethgrid/pester v1.2.0/go.mod h1:hEUINb4RqvDxtoCaU0BNT/HV4ig5kfgOasrf1xcvr0A= github.com/siderolabs/coredns v1.11.53 h1:HoRPGey3HNj409+15OGnP9Jt4NNpRKsm7izjc/M/G20= github.com/siderolabs/coredns v1.11.53/go.mod h1:2bxje5r6+o9rO0k7bEb5BitqPz8YUYaIY8iJHD1ELtE= github.com/siderolabs/crypto v0.4.4 h1:Q6EDBMR2Ub2oAZW5Xl8lrKB27bM3Sn8Gkfw3rngco5U= @@ -717,16 +696,10 @@ github.com/smira/kobject v0.0.0-20240304111826-49c8d4613389 h1:f/5NRv5IGZxbjBhc5 github.com/smira/kobject v0.0.0-20240304111826-49c8d4613389/go.mod h1:+SexPO1ZvdbbWUdUnyXEWv3+4NwHZjKhxOmQqHY4Pqc= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -744,8 +717,6 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/u-root/u-root v0.14.0 h1:Ka4T10EEML7dQ5XDvO9c3MBN8z4nuSnGjcd1jmU2ivg= @@ -765,8 +736,6 @@ github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhg github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= -github.com/vmware-tanzu/sonobuoy v0.57.1 h1:3P2/P5WOJhyspsCkx58eDr0hsBmy8AJS1KYzjo5Epic= -github.com/vmware-tanzu/sonobuoy v0.57.1/go.mod h1:TevlYITSKi7JvgRPhShECtQiJpDErY+8FHehlkgen9c= github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3 h1:v6jG/tdl4O07LNVp74Nt7/OyL+1JsIW1M2f/nSvQheY= github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3/go.mod h1:CSBTxrhePCm0cmXNKDGeu+6bOQzpaEklfCqEpn89JWk= github.com/vultr/metadata v1.1.0 h1:RUjCnH5Mdlz7uuyfb1jOZNkU72zl/HwK76jLzVFdiOo= @@ -970,7 +939,6 @@ golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1231,8 +1199,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1262,12 +1228,10 @@ k8s.io/component-base v0.30.1 h1:bvAtlPh1UrdaZL20D9+sWxsJljMi0QZ3Lmw+kmZAaxQ= k8s.io/component-base v0.30.1/go.mod h1:e/X9kDiOebwlI41AvBHuWdqFriSRrX50CdwA9TFaHLI= k8s.io/cri-api v0.30.1 h1:AUM78wiC56B1WJ2c795AS0IG5T57CkEdkn0IuC+miAE= k8s.io/cri-api v0.30.1/go.mod h1://4/umPJSW1ISNSNng4OwjpkvswJOQwU8rnkvO8P+xg= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.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/kube-openapi v0.0.0-20240429181424-4a129a0ff6f9 h1:lH3XTpxLt0yaXfYJLGG5RIpAuLggqT+O+ftDUthow5Y= +k8s.io/kube-openapi v0.0.0-20240429181424-4a129a0ff6f9/go.mod h1:dy4HhRmt5t7TKtz58bHo6toj0Mh90vD85Jv88Mnmulo= k8s.io/kube-scheduler v0.30.1 h1:bH7Ie+gSDHas0BVjtdEY87zGLCPA2WMZ+TV4/7lqXg0= k8s.io/kube-scheduler v0.30.1/go.mod h1:nAiJHoSyc3/XBUGE24MYcoSiDMuUhabmKVD0KTjQdus= k8s.io/kubectl v0.30.1 h1:sHFIRI3oP0FFZmBAVEE8ErjnTyXDPkBcvO88mH9RjuY= @@ -1287,6 +1251,8 @@ rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY= rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/hydrophone v0.6.0 h1:HQArrBxpxT71Lj38mE2f5yFCg9/vJkDXkeI3Y4+1BgY= +sigs.k8s.io/hydrophone v0.6.0/go.mod h1:37gV+UYy35Pz3Zrm5IdN9mKtryU0LSfbMidtuvdI3Nk= 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/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= diff --git a/internal/integration/provision/provision.go b/internal/integration/provision/provision.go index 1ac3e24289..65a87e61ec 100644 --- a/internal/integration/provision/provision.go +++ b/internal/integration/provision/provision.go @@ -31,8 +31,8 @@ import ( "github.com/siderolabs/talos/internal/integration/base" "github.com/siderolabs/talos/pkg/cluster/check" + "github.com/siderolabs/talos/pkg/cluster/hydrophone" "github.com/siderolabs/talos/pkg/cluster/kubernetes" - "github.com/siderolabs/talos/pkg/cluster/sonobuoy" machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine" talosclient "github.com/siderolabs/talos/pkg/machinery/client" clientconfig "github.com/siderolabs/talos/pkg/machinery/client/config" @@ -128,7 +128,7 @@ type BaseSuite struct { // SetupSuite ... func (suite *BaseSuite) SetupSuite() { // timeout for the whole test - suite.ctx, suite.ctxCancel = context.WithTimeout(context.Background(), 50*time.Minute) + suite.ctx, suite.ctxCancel = context.WithTimeout(context.Background(), time.Hour) var err error @@ -630,8 +630,8 @@ func (suite *BaseSuite) setupCluster(options clusterOptions) { // runE2E runs e2e test on the cluster. func (suite *BaseSuite) runE2E(k8sVersion string) { - options := sonobuoy.DefaultOptions() + options := hydrophone.DefaultOptions() options.KubernetesVersion = k8sVersion - suite.Assert().NoError(sonobuoy.Run(suite.ctx, suite.clusterAccess, options)) + suite.Assert().NoError(hydrophone.Run(suite.ctx, suite.clusterAccess, options)) } diff --git a/pkg/cluster/hydrophone/hydrophone.go b/pkg/cluster/hydrophone/hydrophone.go new file mode 100644 index 0000000000..065e23770a --- /dev/null +++ b/pkg/cluster/hydrophone/hydrophone.go @@ -0,0 +1,271 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package hydrophone provides functions to run Kubernetes e2e tests. +package hydrophone + +import ( + "context" + "fmt" + "os" + "path/filepath" + "strings" + "time" + + "github.com/blang/semver/v4" + yaml "gopkg.in/yaml.v3" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes" + "sigs.k8s.io/hydrophone/pkg/common" + "sigs.k8s.io/hydrophone/pkg/conformance" + "sigs.k8s.io/hydrophone/pkg/conformance/client" + "sigs.k8s.io/hydrophone/pkg/types" + + "github.com/siderolabs/talos/pkg/cluster" + "github.com/siderolabs/talos/pkg/machinery/constants" +) + +// Options for the tests. +type Options struct { + RunTests []string + Parallel bool + + RunTimeout time.Duration + DeleteTimeout time.Duration + + KubernetesVersion string + + UseSpinner bool + RetrieveResults bool + + ResultsPath string +} + +// DefaultOptions with hand-picked tests, timeouts, etc. +func DefaultOptions() *Options { + return &Options{ + RunTests: []string{ // list of tests to cover basic kubernetes operations + "Pods should be submitted and removed", + "Services should serve a basic endpoint from pods", + "Services should be able to change the type from ExternalName to ClusterIP", + }, + + RunTimeout: 10 * time.Minute, + DeleteTimeout: 3 * time.Minute, + + KubernetesVersion: constants.DefaultKubernetesVersion, + } +} + +// FastConformance runs conformance suite in two passes: parallel + serial for non parallel-safe tests. +func FastConformance(ctx context.Context, cluster cluster.K8sProvider) error { + optionsList := []Options{ + { + RunTests: []string{`\[Conformance\]`}, + Parallel: true, + + RunTimeout: time.Hour, + DeleteTimeout: 5 * time.Minute, + + KubernetesVersion: constants.DefaultKubernetesVersion, + + UseSpinner: true, + }, + { + RunTests: []string{`\[Serial\].*\[Conformance\]`}, + Parallel: false, + + RunTimeout: time.Hour, + DeleteTimeout: 5 * time.Minute, + + KubernetesVersion: constants.DefaultKubernetesVersion, + + UseSpinner: true, + }, + } + + for _, options := range optionsList { + if err := Run(ctx, cluster, &options); err != nil { + return err + } + } + + return nil +} + +// CertifiedConformance runs conformance suite in certified mode collecting all the results. +func CertifiedConformance(ctx context.Context, cluster cluster.K8sProvider) error { + options := Options{ + RunTests: []string{`\[Conformance\]`}, + + Parallel: false, + + RunTimeout: 2 * time.Hour, + DeleteTimeout: 5 * time.Minute, + + KubernetesVersion: constants.DefaultKubernetesVersion, + RetrieveResults: true, + + UseSpinner: true, + } + + k8sVersion, err := semver.ParseTolerant(options.KubernetesVersion) + if err != nil { + return err + } + + options.ResultsPath = fmt.Sprintf("v%d.%d/talos", k8sVersion.Major, k8sVersion.Minor) + + if err = os.MkdirAll(options.ResultsPath, 0o755); err != nil { + return err + } + + return Run(ctx, cluster, &options) +} + +func ensureNamespaceDeleted(ctx context.Context, clientset *kubernetes.Clientset, namespace string, timeout time.Duration) error { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + + watcher, err := clientset.CoreV1().Namespaces().Watch(ctx, metav1.ListOptions{ + FieldSelector: fields.OneTermEqualSelector("metadata.name", namespace).String(), + }) + if err != nil { + return err + } + + defer watcher.Stop() + + _, err = clientset.CoreV1().Namespaces().Get(ctx, namespace, metav1.GetOptions{}) + if err != nil { + if apierrors.IsNotFound(err) { + return nil // already deleted + } + + return err + } + + for { + select { + case <-ctx.Done(): + return ctx.Err() + case event := <-watcher.ResultChan(): + if event.Type == watch.Error { + return fmt.Errorf("error watching pod: %v", event.Object) + } + + if event.Type == watch.Deleted { + return nil + } + } + } +} + +// Run the e2e test against cluster with provided options. +// +//nolint:gocyclo +func Run(ctx context.Context, cluster cluster.K8sProvider, options *Options) error { + cfg, err := cluster.K8sRestConfig(ctx) + if err != nil { + return fmt.Errorf("error getting kubernetes config: %w", err) + } + + // reset timeout to prevent log streaming from timing out + cfg.Timeout = 0 + + config := types.NewDefaultConfiguration() + config.ConformanceImage = fmt.Sprintf("registry.k8s.io/conformance:v%s", options.KubernetesVersion) + config.OutputDir = options.ResultsPath + + if options.Parallel { + config.Parallel = 4 + } + + clientset, err := cluster.K8sClient(ctx) + if err != nil { + return fmt.Errorf("error getting kubernetes client: %w", err) + } + + testRunner := conformance.NewTestRunner(config, clientset) + testClient := client.NewClient(cfg, clientset, config.Namespace) + + cleanup := func() error { + if err := testRunner.Cleanup(ctx); err != nil { + return fmt.Errorf("failed to cleanup: %w", err) + } + + if err := ensureNamespaceDeleted(ctx, clientset, config.Namespace, options.DeleteTimeout); err != nil { + return fmt.Errorf("failed to delete namespace: %w", err) + } + + return nil + } + + defer cleanup() //nolint:errcheck + + if err = cleanup(); err != nil { + return err + } + + verboseGinkgo := config.Verbosity >= 6 + showSpinner := !verboseGinkgo && config.Verbosity > 2 && options.UseSpinner && os.Getenv("CI") == "" + + fmt.Printf("running conformance tests version %s\n", options.KubernetesVersion) + fmt.Printf("running tests: %s\n", strings.Join(options.RunTests, "|")) + + if err := testRunner.Deploy(ctx, strings.Join(options.RunTests, "|"), verboseGinkgo, config.StartupTimeout); err != nil { + return fmt.Errorf("failed to deploy tests: %w", err) + } + + before := time.Now() + + var spinner *common.Spinner + + if showSpinner { + spinner = common.NewSpinner(os.Stdout) + spinner.Start() + } + + // PrintE2ELogs is a long running method + if err := testClient.PrintE2ELogs(ctx); err != nil { + return fmt.Errorf("failed to get test logs: %w", err) + } + + if showSpinner { + spinner.Stop() + } + + fmt.Printf("tests finished after %v.\n", time.Since(before).Round(time.Second)) + + exitCode, err := testClient.FetchExitCode(ctx) + if err != nil { + return fmt.Errorf("failed to determine exit code: %w", err) + } + + if exitCode == 0 { + fmt.Println("tests completed successfully") + } else { + return fmt.Errorf("tests failed: code %d", exitCode) + } + + if options.RetrieveResults { + if err := testClient.FetchFiles(ctx, config.OutputDir); err != nil { + return fmt.Errorf("failed to download results: %w", err) + } + + productInfo, err := yaml.Marshal(talos) + if err != nil { + return fmt.Errorf("error marshaling product info: %w", err) + } + + if err = os.WriteFile(filepath.Join(options.ResultsPath, "PRODUCT.yaml"), productInfo, 0o644); err != nil { + return err + } + } + + return cleanup() +} diff --git a/pkg/cluster/sonobuoy/product.go b/pkg/cluster/hydrophone/product.go similarity index 98% rename from pkg/cluster/sonobuoy/product.go rename to pkg/cluster/hydrophone/product.go index 003e945e1d..f946723535 100644 --- a/pkg/cluster/sonobuoy/product.go +++ b/pkg/cluster/hydrophone/product.go @@ -2,7 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. -package sonobuoy +package hydrophone import "github.com/siderolabs/talos/pkg/machinery/version" diff --git a/pkg/cluster/sonobuoy/sonobuoy.go b/pkg/cluster/sonobuoy/sonobuoy.go deleted file mode 100644 index 8d3a053de2..0000000000 --- a/pkg/cluster/sonobuoy/sonobuoy.go +++ /dev/null @@ -1,343 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -// Package sonobuoy provides functions to run Kubernetes e2e tests. -package sonobuoy - -import ( - "archive/tar" - "compress/gzip" - "context" - "errors" - "fmt" - "io" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/blang/semver/v4" - "github.com/vmware-tanzu/sonobuoy/cmd/sonobuoy/app" - "github.com/vmware-tanzu/sonobuoy/pkg/client" - "github.com/vmware-tanzu/sonobuoy/pkg/config" - sonodynamic "github.com/vmware-tanzu/sonobuoy/pkg/dynamic" - yaml "gopkg.in/yaml.v3" - - "github.com/siderolabs/talos/pkg/cluster" - "github.com/siderolabs/talos/pkg/machinery/constants" -) - -// Options for the tests. -type Options struct { - RunTests []string - Parallel bool - - RunTimeout time.Duration - DeleteTimeout time.Duration - - KubernetesVersion string - - UseSpinner bool - RetrieveResults bool - - ResultsPath string -} - -// DefaultOptions with hand-picked tests, timeouts, etc. -func DefaultOptions() *Options { - return &Options{ - RunTests: []string{ // list of tests to cover basic kubernetes operations - "Pods should be submitted and removed", - "Services should serve a basic endpoint from pods", - "Services should be able to change the type from ExternalName to ClusterIP", - }, - - RunTimeout: 10 * time.Minute, - DeleteTimeout: 3 * time.Minute, - - KubernetesVersion: constants.DefaultKubernetesVersion, - } -} - -// FastConformance runs conformance suite in two passes: parallel + serial for non parallel-safe tests. -func FastConformance(ctx context.Context, cluster cluster.K8sProvider) error { - optionsList := []Options{ - { - RunTests: []string{`\[Conformance\]`}, - Parallel: true, - - RunTimeout: time.Hour, - DeleteTimeout: 5 * time.Minute, - - KubernetesVersion: constants.DefaultKubernetesVersion, - }, - { - RunTests: []string{`\[Serial\].*\[Conformance\]`}, - Parallel: false, - - RunTimeout: time.Hour, - DeleteTimeout: 5 * time.Minute, - - KubernetesVersion: constants.DefaultKubernetesVersion, - }, - } - - for _, options := range optionsList { - if err := Run(ctx, cluster, &options); err != nil { - return err - } - } - - return nil -} - -// CertifiedConformance runs conformance suite in certified mode collecting all the results. -func CertifiedConformance(ctx context.Context, cluster cluster.K8sProvider) error { - options := Options{ - RunTests: []string{`\[Conformance\]`}, - Parallel: false, - - RunTimeout: 2 * time.Hour, - DeleteTimeout: 5 * time.Minute, - - KubernetesVersion: constants.DefaultKubernetesVersion, - RetrieveResults: true, - } - - k8sVersion, err := semver.ParseTolerant(options.KubernetesVersion) - if err != nil { - return err - } - - options.ResultsPath = fmt.Sprintf("v%d.%d/talos", k8sVersion.Major, k8sVersion.Minor) - - if err = os.MkdirAll(options.ResultsPath, 0o755); err != nil { - return err - } - - return Run(ctx, cluster, &options) -} - -// Run the e2e test against cluster with provided options. -// -//nolint:gocyclo,cyclop -func Run(ctx context.Context, cluster cluster.K8sProvider, options *Options) error { - var waitOutput string - - if options.UseSpinner { - waitOutput = string(app.SpinnerOutputMode) - } else { - waitOutput = string(app.SilentOutputMode) - } - - cfg, err := cluster.K8sRestConfig(ctx) - if err != nil { - return fmt.Errorf("error getting kubernetes config: %w", err) - } - - skc, err := sonodynamic.NewAPIHelperFromRESTConfig(cfg) - if err != nil { - return fmt.Errorf("couldn't get sonobuoy api helper: %w", err) - } - - e2ePassed := false - - sclient, err := client.NewSonobuoyClient(cfg, skc) - if err != nil { - return fmt.Errorf("error building sonobuoy client: %w", err) - } - - logReader, err := sclient.LogReader(&client.LogConfig{ - Namespace: config.DefaultNamespace, - Follow: true, - Plugin: "e2e", - }) - if err != nil { - return fmt.Errorf("error setting up log reader: %w", err) - } - - logF, err := os.CreateTemp("", "talos") - if err != nil { - return fmt.Errorf("error creating temporary file for logs: %w", err) - } - - defer logF.Close() //nolint:errcheck - - go func() { - io.Copy(logF, logReader) //nolint:errcheck - }() - - cleanup := func() error { - os.Remove(logF.Name()) //nolint:errcheck - - return sclient.Delete(&client.DeleteConfig{ - Namespace: config.DefaultNamespace, - DeleteAll: true, - Wait: options.DeleteTimeout, - WaitOutput: waitOutput, - }) - } - - defer cleanup() //nolint:errcheck - - runConfig := client.NewRunConfig() - runConfig.Wait = options.RunTimeout - runConfig.WaitOutput = waitOutput - - runConfig.DynamicPlugins = []string{"e2e"} - runConfig.PluginEnvOverrides = map[string]map[string]string{ - "e2e": { - "E2E_FOCUS": strings.Join(options.RunTests, "|"), - "E2E_PARALLEL": strconv.FormatBool(options.Parallel), - "E2E_EXTRA_ARGS": "--ginkgo.v", - }, - } - runConfig.KubeVersion = fmt.Sprintf("v%s", options.KubernetesVersion) - - if err = sclient.Run(runConfig); err != nil { - return fmt.Errorf("sonobuoy run failed: %w", err) - } - - status, err := sclient.GetStatus(&client.StatusConfig{ - Namespace: config.DefaultNamespace, - }) - if err != nil { - return fmt.Errorf("error getting test status: %w", err) - } - - for _, pluginStatus := range status.Plugins { - if pluginStatus.Plugin == "e2e" { - fmt.Print("e2e status ") - - for label, count := range pluginStatus.ResultStatusCounts { - fmt.Printf("%s:%d ", label, count) - } - - fmt.Println() - - if pluginStatus.ResultStatus == "passed" { - e2ePassed = true - - break - } - - fmt.Println("\ne2e plugin logs:") - - logF.Seek(0, io.SeekStart) //nolint:errcheck - io.Copy(os.Stdout, logF) //nolint:errcheck - - return fmt.Errorf("e2e plugin status: %q", pluginStatus.ResultStatus) - } - } - - if !e2ePassed { - return errors.New("missing e2e plugin status") - } - - if options.RetrieveResults { - resultR, errCh, err := sclient.RetrieveResults(&client.RetrieveConfig{ - Namespace: config.DefaultNamespace, - Path: config.AggregatorResultsPath, - }) - if err != nil { - return fmt.Errorf("error retrieving results: %w", err) - } - - if resultR == nil { - return errors.New("no result reader") - } - - gzipR, err := gzip.NewReader(resultR) - if err != nil { - return err - } - - defer gzipR.Close() //nolint:errcheck - - tarR := tar.NewReader(gzipR) - - for { - var header *tar.Header - - header, err = tarR.Next() - if err != nil { - if err == io.EOF { - break - } - - return err - } - - matched, _ := filepath.Match("*_sonobuoy_*.tar.gz", header.Name) //nolint:errcheck - - if !matched { - continue - } - - var innerGzipR *gzip.Reader - - innerGzipR, err = gzip.NewReader(tarR) - if err != nil { - return err - } - - defer innerGzipR.Close() //nolint:errcheck - - innnerTarR := tar.NewReader(innerGzipR) - - for { - header, err = innnerTarR.Next() - if err != nil { - if err == io.EOF { - break - } - - return err - } - - writeFile := func(name string) error { - var data []byte - - data, err = io.ReadAll(innnerTarR) - if err != nil { - return err - } - - return os.WriteFile(filepath.Join(options.ResultsPath, name), data, 0o644) - } - - switch header.Name { - case "plugins/e2e/results/global/junit_01.xml": - if err = writeFile("junit_01.xml"); err != nil { - return err - } - case "plugins/e2e/results/global/e2e.log": - if err = writeFile("e2e.log"); err != nil { - return err - } - } - } - } - - select { - case err = <-errCh: - if err != nil { - return err - } - default: - } - - productInfo, err := yaml.Marshal(talos) - if err != nil { - return fmt.Errorf("error marshaling product info: %w", err) - } - - if err = os.WriteFile(filepath.Join(options.ResultsPath, "PRODUCT.yaml"), productInfo, 0o644); err != nil { - return err - } - } - - return cleanup() -} diff --git a/pkg/provision/providers/vm/process.go b/pkg/provision/providers/vm/process.go index 1bfa49db74..daddb879e8 100644 --- a/pkg/provision/providers/vm/process.go +++ b/pkg/provision/providers/vm/process.go @@ -47,8 +47,11 @@ func StopProcessByPidfile(pidPath string) error { // wait for the process to exit, this is using (unreliable and slow) polling return retry.Constant(30*time.Second, retry.WithUnits(100*time.Millisecond)).Retry(func() error { - err = proc.Signal(syscall.Signal(0)) - if err == nil { + // wait for the process if it's our child, we should clean up zombies, but if it's not our child, it would return ECHILD + proc.Wait() //nolint:errcheck + + signalErr := proc.Signal(syscall.Signal(0)) + if signalErr == nil { return retry.ExpectedErrorf("process %d still running", pid) }