From a52d3cda3b2eecc8aabf64b99a3ded0dad7e84c3 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Thu, 21 Sep 2023 14:42:16 +0400 Subject: [PATCH] chore: update gen and COSI runtime No actual changes, adapting to use new APIs. Signed-off-by: Andrey Smirnov --- cmd/installer/cmd/imager/root.go | 4 +- cmd/talosctl/cmd/mgmt/cluster/show.go | 8 +-- cmd/talosctl/cmd/mgmt/gen/config.go | 7 +-- cmd/talosctl/cmd/mgmt/loadbalancer_launch.go | 4 +- cmd/talosctl/cmd/talos/etcd.go | 6 +-- cmd/talosctl/cmd/talos/events.go | 4 +- cmd/talosctl/cmd/talos/get.go | 6 +-- cmd/talosctl/cmd/talos/logs.go | 4 +- cmd/talosctl/cmd/talos/root.go | 2 +- cmd/talosctl/cmd/talos/upgrade.go | 4 +- go.mod | 28 +++++----- go.sum | 52 +++++++++--------- go.work | 2 +- internal/app/apid/pkg/director/director.go | 4 +- .../server/v1alpha1/v1alpha1_cluster.go | 11 ++-- .../server/v1alpha1/v1alpha1_monitoring.go | 4 +- .../server/v1alpha1/v1alpha1_server.go | 14 ++--- .../app/machined/pkg/adapters/k8s/manifest.go | 4 +- .../pkg/adapters/network/wireguard_spec.go | 6 +-- .../controllers/cluster/affiliate_merge.go | 11 ++-- .../pkg/controllers/cluster/cluster.go | 2 +- .../controllers/cluster/discovery_service.go | 10 ++-- .../pkg/controllers/cluster/endpoint.go | 9 ++-- .../pkg/controllers/cluster/endpoint_test.go | 4 +- .../controllers/cluster/local_affiliate.go | 20 +++---- .../cluster/local_affiliate_test.go | 8 +-- .../pkg/controllers/cluster/member.go | 13 ++--- .../pkg/controllers/config/acquire_test.go | 30 ++++++++--- .../controllers/cri/seccomp_profile_file.go | 2 +- .../pkg/controllers/etcd/advertised_peer.go | 4 +- .../app/machined/pkg/controllers/etcd/spec.go | 6 +-- .../controllers/files/cri_registry_config.go | 4 +- .../pkg/controllers/k8s/address_filter.go | 2 +- .../pkg/controllers/k8s/control_plane.go | 4 +- .../k8s/control_plane_static_pod.go | 8 +-- .../k8s/control_plane_static_pod_test.go | 4 +- .../controllers/k8s/extra_manifest_test.go | 4 +- .../pkg/controllers/k8s/kubelet_config.go | 4 +- .../pkg/controllers/k8s/kubelet_service.go | 13 +++-- .../pkg/controllers/k8s/kubelet_spec.go | 11 ++-- .../machined/pkg/controllers/k8s/kubeprism.go | 6 +-- .../controllers/k8s/kubeprism_endpoints.go | 2 +- .../pkg/controllers/k8s/manifest_apply.go | 6 +-- .../pkg/controllers/k8s/manifest_test.go | 4 +- .../pkg/controllers/k8s/node_apply.go | 10 ++-- .../pkg/controllers/k8s/node_apply_test.go | 6 +-- .../pkg/controllers/k8s/node_cordoned_spec.go | 2 +- .../pkg/controllers/k8s/node_status.go | 2 +- .../machined/pkg/controllers/k8s/nodeip.go | 4 +- .../pkg/controllers/k8s/static_endpoint.go | 4 +- .../pkg/controllers/k8s/static_pod_server.go | 2 +- .../serviceaccount/crd_controller.go | 7 +-- .../pkg/controllers/kubespan/endpoint.go | 13 ++--- .../pkg/controllers/kubespan/kubespan_test.go | 4 +- .../pkg/controllers/kubespan/manager.go | 2 +- .../pkg/controllers/kubespan/peer_spec.go | 16 +++--- .../controllers/network/address_merge_test.go | 4 +- .../pkg/controllers/network/device_config.go | 12 ++--- .../pkg/controllers/network/link_spec_test.go | 6 +-- .../pkg/controllers/network/node_address.go | 4 +- .../pkg/controllers/network/operator/dhcp4.go | 8 +-- .../pkg/controllers/network/operator/dhcp6.go | 6 +-- .../controllers/network/operator_config.go | 4 +- .../network/operator_vip_config.go | 4 +- .../machined/pkg/controllers/network/probe.go | 4 +- .../pkg/controllers/network/resolver_spec.go | 4 +- .../pkg/controllers/network/status.go | 4 +- .../controllers/network/timeserver_config.go | 2 +- .../pkg/controllers/runtime/cri_image_gc.go | 4 +- .../controllers/runtime/cri_image_gc_test.go | 9 ++-- .../pkg/controllers/runtime/kmsg_log.go | 9 ++-- .../controllers/runtime/kmsg_log_config.go | 7 +-- .../runtime/kmsg_log_config_test.go | 6 +-- .../pkg/controllers/runtime/machine_status.go | 8 +-- .../runtime/machine_status_publisher.go | 4 +- .../runtime/machine_status_test.go | 4 +- .../controllers/runtime/maintenance_config.go | 4 +- .../runtime/maintenance_service.go | 4 +- .../pkg/controllers/siderolink/manager.go | 4 +- .../pkg/controllers/time/sync_test.go | 2 +- .../v1alpha1/platform/equinixmetal/equinix.go | 2 +- .../v1alpha1/platform/metal/url/url.go | 6 +-- .../v1alpha1/platform/nocloud/metadata.go | 2 +- .../v1alpha1/platform/openstack/openstack.go | 2 +- .../v1alpha1/platform/vmware/metadata.go | 2 +- .../v1alpha1/v1alpha1_sequencer_tasks.go | 7 +-- .../runtime/v1alpha2/v1alpha2_controller.go | 4 +- .../app/machined/pkg/system/events/events.go | 4 +- .../machined/pkg/system/events/events_test.go | 4 +- .../app/machined/pkg/system/health/status.go | 2 +- .../app/machined/pkg/system/service_runner.go | 5 +- .../app/machined/pkg/system/services/etcd.go | 6 +-- internal/app/machined/pkg/system/system.go | 4 +- internal/app/poweroff/main.go | 6 +-- internal/app/storaged/server.go | 4 +- internal/app/wrapperd/main.go | 4 +- internal/integration/api/discovery.go | 16 +++--- internal/integration/api/reset.go | 6 +-- internal/integration/api/resources.go | 8 +-- internal/integration/base/cluster.go | 2 +- internal/integration/base/k8s.go | 4 +- internal/integration/cli/dmesg.go | 4 +- .../provision/k8s_compatibility.go | 7 +++ internal/integration/provision/upgrade.go | 4 +- internal/pkg/configuration/configuration.go | 4 +- internal/pkg/dashboard/apidata/node.go | 6 +-- .../pkg/dashboard/components/components.go | 4 +- internal/pkg/dashboard/components/graphs.go | 4 +- .../pkg/dashboard/components/networkinfo.go | 6 +-- internal/pkg/dashboard/dashboard.go | 6 +-- internal/pkg/discovery/registry/kubernetes.go | 8 +-- internal/pkg/etcd/certs.go | 4 +- internal/pkg/etcd/endpoints.go | 2 +- internal/pkg/logind/logind.go | 2 +- internal/pkg/meta/internal/adv/talos/talos.go | 5 +- .../pkg/meta/internal/adv/talos/talos_test.go | 2 +- internal/pkg/meta/meta_test.go | 2 +- internal/pkg/ntp/ntp.go | 2 +- internal/pkg/secureboot/uki/generate.go | 6 +-- internal/pkg/tui/installer/connection.go | 2 +- pkg/archiver/tar.go | 2 +- pkg/chunker/stream/stream.go | 4 +- pkg/cluster/check/check.go | 8 +-- pkg/cluster/check/discovery.go | 6 +-- pkg/cluster/check/etcd.go | 6 +-- pkg/cluster/check/kubernetes.go | 2 +- pkg/cluster/check/nodes.go | 4 +- pkg/cluster/cluster.go | 8 +-- pkg/cluster/kubernetes/kubelet.go | 2 +- pkg/cluster/support.go | 2 +- pkg/conditions/files.go | 4 +- pkg/machinery/client/connection.go | 4 +- pkg/machinery/client/resolver/roundrobin.go | 4 +- pkg/machinery/client/resources.go | 8 ++- .../config/configpatcher/strategic.go | 4 +- pkg/machinery/config/container/container.go | 5 +- pkg/machinery/config/generate/generate.go | 2 +- .../v1alpha1/v1alpha1_apiserverconfig.go | 6 +-- .../types/v1alpha1/v1alpha1_clusterconfig.go | 4 +- .../v1alpha1_controllermanagerconfig.go | 4 +- .../config/types/v1alpha1/v1alpha1_kernel.go | 4 +- .../config/types/v1alpha1/v1alpha1_logging.go | 4 +- .../types/v1alpha1/v1alpha1_provider.go | 33 ++++++------ .../v1alpha1/v1alpha1_schedulerconfig.go | 4 +- .../types/v1alpha1/v1alpha1_unstructured.go | 3 +- pkg/machinery/go.mod | 27 +++++----- pkg/machinery/go.sum | 54 +++++++++---------- pkg/machinery/meta/meta.go | 4 +- pkg/machinery/resources/k8s/endpoint.go | 4 +- .../resources/network/node_address.go | 7 +-- pkg/machinery/resources/secrets/cert_sans.go | 4 +- pkg/provision/internal/inmemhttp/inmemhttp.go | 3 +- pkg/provision/providers/qemu/launch.go | 4 +- pkg/provision/providers/vm/dhcpd.go | 6 +-- pkg/provision/providers/vm/loadbalancer.go | 6 +-- pkg/provision/providers/vm/network.go | 4 +- 156 files changed, 514 insertions(+), 490 deletions(-) create mode 100644 internal/integration/provision/k8s_compatibility.go diff --git a/cmd/installer/cmd/imager/root.go b/cmd/installer/cmd/imager/root.go index 11ec38c18..5462d66cd 100644 --- a/cmd/installer/cmd/imager/root.go +++ b/cmd/installer/cmd/imager/root.go @@ -10,7 +10,7 @@ import ( "os" "runtime" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" "gopkg.in/yaml.v3" @@ -71,7 +71,7 @@ var rootCmd = &cobra.Command{ }, } - prof.Input.SystemExtensions = slices.Map( + prof.Input.SystemExtensions = xslices.Map( cmdFlags.SystemExtensionImages, func(imageRef string) profile.ContainerAsset { return profile.ContainerAsset{ diff --git a/cmd/talosctl/cmd/mgmt/cluster/show.go b/cmd/talosctl/cmd/mgmt/cluster/show.go index e6dbc3bd7..7599c4414 100644 --- a/cmd/talosctl/cmd/mgmt/cluster/show.go +++ b/cmd/talosctl/cmd/mgmt/cluster/show.go @@ -14,7 +14,7 @@ import ( "text/tabwriter" "github.com/dustin/go-humanize" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" "github.com/siderolabs/talos/pkg/cli" @@ -55,11 +55,11 @@ func showCluster(cluster provision.Cluster) error { fmt.Fprintf(w, "NAME\t%s\n", cluster.Info().ClusterName) fmt.Fprintf(w, "NETWORK NAME\t%s\n", cluster.Info().Network.Name) - cidrs := slices.Map(cluster.Info().Network.CIDRs, netip.Prefix.String) + cidrs := xslices.Map(cluster.Info().Network.CIDRs, netip.Prefix.String) fmt.Fprintf(w, "NETWORK CIDR\t%s\n", strings.Join(cidrs, ",")) - gateways := slices.Map(cluster.Info().Network.GatewayAddrs, netip.Addr.String) + gateways := xslices.Map(cluster.Info().Network.GatewayAddrs, netip.Addr.String) fmt.Fprintf(w, "NETWORK GATEWAY\t%s\n", strings.Join(gateways, ",")) fmt.Fprintf(w, "NETWORK MTU\t%d\n", cluster.Info().Network.MTU) @@ -93,7 +93,7 @@ func showCluster(cluster provision.Cluster) error { disk = humanize.Bytes(node.DiskSize) } - ips := slices.Map(node.IPs, netip.Addr.String) + ips := xslices.Map(node.IPs, netip.Addr.String) fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n", node.Name, diff --git a/cmd/talosctl/cmd/mgmt/gen/config.go b/cmd/talosctl/cmd/mgmt/gen/config.go index 98de192c1..de833d161 100644 --- a/cmd/talosctl/cmd/mgmt/gen/config.go +++ b/cmd/talosctl/cmd/mgmt/gen/config.go @@ -9,10 +9,11 @@ import ( "net/url" "os" "path/filepath" + "slices" "strings" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" sideronet "github.com/siderolabs/net" "github.com/spf13/cobra" "gopkg.in/yaml.v3" @@ -277,7 +278,7 @@ func validateFlags() error { var err error for _, outputType := range genConfigCmdFlags.outputTypes { - if !slices.Contains(allOutputTypes, func(t string) bool { + if !slices.ContainsFunc(allOutputTypes, func(t string) bool { return t == outputType }) { err = multierror.Append(err, fmt.Errorf("invalid output type: %q", outputType)) @@ -288,7 +289,7 @@ func validateFlags() error { } func writeConfigBundle(configBundle *bundle.Bundle, outputPaths configOutputPaths, commentsFlags encoder.CommentsFlags) error { - outputTypesSet := slices.ToSet(genConfigCmdFlags.outputTypes) + outputTypesSet := xslices.ToSet(genConfigCmdFlags.outputTypes) if _, ok := outputTypesSet[controlPlaneOutputType]; ok { data, err := configBundle.Serialize(commentsFlags, machine.TypeControlPlane) diff --git a/cmd/talosctl/cmd/mgmt/loadbalancer_launch.go b/cmd/talosctl/cmd/mgmt/loadbalancer_launch.go index c15eb9de8..1fb2fdf9d 100644 --- a/cmd/talosctl/cmd/mgmt/loadbalancer_launch.go +++ b/cmd/talosctl/cmd/mgmt/loadbalancer_launch.go @@ -7,7 +7,7 @@ package mgmt import ( "fmt" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-loadbalancer/loadbalancer" "github.com/spf13/cobra" "go.uber.org/zap" @@ -33,7 +33,7 @@ var loadbalancerLaunchCmd = &cobra.Command{ lb := loadbalancer.TCP{Logger: makeLogger()} for _, port := range loadbalancerLaunchCmdFlags.ports { - upstreams := slices.Map(loadbalancerLaunchCmdFlags.upstreams, func(upstream string) string { + upstreams := xslices.Map(loadbalancerLaunchCmdFlags.upstreams, func(upstream string) string { return fmt.Sprintf("%s:%d", upstream, port) }) diff --git a/cmd/talosctl/cmd/talos/etcd.go b/cmd/talosctl/cmd/talos/etcd.go index 86b1184fa..6672b102e 100644 --- a/cmd/talosctl/cmd/talos/etcd.go +++ b/cmd/talosctl/cmd/talos/etcd.go @@ -14,7 +14,7 @@ import ( "text/tabwriter" "github.com/dustin/go-humanize" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" snapshot "go.etcd.io/etcd/etcdutl/v3/snapshot" "google.golang.org/grpc/codes" @@ -98,7 +98,7 @@ var etcdAlarmListCmd = &cobra.Command{ cli.Warning("%s", err) } - return displayAlarms(slices.Map(response.Messages, func(v *machine.EtcdAlarm) alarmMessage { + return displayAlarms(xslices.Map(response.Messages, func(v *machine.EtcdAlarm) alarmMessage { return v })) }) @@ -120,7 +120,7 @@ var etcdAlarmDisarmCmd = &cobra.Command{ cli.Warning("%s", err) } - return displayAlarms(slices.Map(response.Messages, func(v *machine.EtcdAlarmDisarm) alarmMessage { + return displayAlarms(xslices.Map(response.Messages, func(v *machine.EtcdAlarmDisarm) alarmMessage { return v })) }) diff --git a/cmd/talosctl/cmd/talos/events.go b/cmd/talosctl/cmd/talos/events.go index 216198e74..86c4b3fdf 100644 --- a/cmd/talosctl/cmd/talos/events.go +++ b/cmd/talosctl/cmd/talos/events.go @@ -13,7 +13,7 @@ import ( "text/tabwriter" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" "github.com/siderolabs/talos/cmd/talosctl/pkg/talos/helpers" @@ -100,7 +100,7 @@ var eventsCmd = &cobra.Command{ msg.GetStage().String(), fmt.Sprintf("ready: %v, unmet conditions: %v", msg.GetStatus().Ready, - slices.Map(msg.GetStatus().GetUnmetConditions(), + xslices.Map(msg.GetStatus().GetUnmetConditions(), func(c *machine.MachineStatusEvent_MachineStatus_UnmetCondition) string { return c.Name }, diff --git a/cmd/talosctl/cmd/talos/get.go b/cmd/talosctl/cmd/talos/get.go index d4a110f4d..84cdb1cd7 100644 --- a/cmd/talosctl/cmd/talos/get.go +++ b/cmd/talosctl/cmd/talos/get.go @@ -239,7 +239,7 @@ func completeResourceDefinition(withAliases bool) ([]string, cobra.ShellCompDire return err } - for iter := safe.IteratorFromList(items); iter.Next(); { + for iter := items.Iterator(); iter.Next(); { if withAliases { result = append(result, iter.Value().TypedSpec().Aliases...) } @@ -296,9 +296,7 @@ func CompleteNodes(*cobra.Command, []string, string) ([]string, cobra.ShellCompD return err } - it := safe.IteratorFromList(items) - - for it.Next() { + for it := items.Iterator(); it.Next(); { if hostname := it.Value().TypedSpec().Hostname; hostname != "" { nodes = append(nodes, hostname) } diff --git a/cmd/talosctl/cmd/talos/logs.go b/cmd/talosctl/cmd/talos/logs.go index 1583c6300..cd644d47a 100644 --- a/cmd/talosctl/cmd/talos/logs.go +++ b/cmd/talosctl/cmd/talos/logs.go @@ -13,7 +13,7 @@ import ( "sync" criconstants "github.com/containerd/containerd/pkg/cri/constants" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" "google.golang.org/grpc/codes" @@ -136,7 +136,7 @@ func (slicer *lineSlicer) chopper(r io.Reader, hostname string) { for scanner.Scan() { line := scanner.Bytes() - line = slices.Copy(line, len(line)) + line = xslices.CopyN(line, len(line)) slicer.respCh <- &common.Data{ Metadata: &common.Metadata{ diff --git a/cmd/talosctl/cmd/talos/root.go b/cmd/talosctl/cmd/talos/root.go index c985f94c3..c74c0b267 100644 --- a/cmd/talosctl/cmd/talos/root.go +++ b/cmd/talosctl/cmd/talos/root.go @@ -8,12 +8,12 @@ import ( "context" "fmt" "io" + "slices" "sort" "strings" criconstants "github.com/containerd/containerd/pkg/cri/constants" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" "github.com/spf13/cobra" "google.golang.org/grpc" "google.golang.org/grpc/codes" diff --git a/cmd/talosctl/cmd/talos/upgrade.go b/cmd/talosctl/cmd/talos/upgrade.go index 454819db1..b1afce7a7 100644 --- a/cmd/talosctl/cmd/talos/upgrade.go +++ b/cmd/talosctl/cmd/talos/upgrade.go @@ -14,7 +14,7 @@ import ( "time" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/spf13/cobra" "google.golang.org/grpc" "google.golang.org/grpc/peer" @@ -152,7 +152,7 @@ func init() { return machine.UpgradeRequest_RebootMode_value[rebootModes[i]] < machine.UpgradeRequest_RebootMode_value[rebootModes[j]] }) - rebootModes = slices.Map(rebootModes, strings.ToLower) + rebootModes = xslices.Map(rebootModes, strings.ToLower) upgradeCmd.Flags().StringVarP(&upgradeCmdFlags.upgradeImage, "image", "i", fmt.Sprintf("%s/%s/installer:%s", images.Registry, images.Username, version.Trim(version.Tag)), diff --git a/go.mod b/go.mod index 9d0497119..874283c27 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/siderolabs/talos -go 1.21 +go 1.21.1 replace ( // Use nested module. @@ -38,7 +38,7 @@ require ( github.com/containernetworking/cni v1.1.2 github.com/containernetworking/plugins v1.3.0 github.com/coreos/go-iptables v0.7.0 - github.com/cosi-project/runtime v0.3.1 + github.com/cosi-project/runtime v0.3.9 github.com/docker/distribution v2.8.2+incompatible github.com/docker/docker v24.0.5+incompatible github.com/docker/go-connections v0.4.0 @@ -94,7 +94,7 @@ require ( github.com/siderolabs/crypto v0.4.1 github.com/siderolabs/discovery-api v0.1.3 github.com/siderolabs/discovery-client v0.1.5 - github.com/siderolabs/gen v0.4.5 + github.com/siderolabs/gen v0.4.7 github.com/siderolabs/go-blockdevice v0.4.6 github.com/siderolabs/go-circular v0.1.0 github.com/siderolabs/go-cmd v0.1.1 @@ -127,16 +127,16 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.9 go.etcd.io/etcd/client/v3 v3.5.9 go.etcd.io/etcd/etcdutl/v3 v3.5.9 - go.uber.org/zap v1.25.0 + go.uber.org/zap v1.26.0 go4.org/netipx v0.0.0-20230728184502-ec4c8b891b28 - golang.org/x/net v0.14.0 + golang.org/x/net v0.15.0 golang.org/x/sync v0.3.0 - golang.org/x/sys v0.11.0 - golang.org/x/term v0.11.0 - golang.org/x/text v0.12.0 + golang.org/x/sys v0.12.0 + golang.org/x/term v0.12.0 + golang.org/x/text v0.13.0 golang.org/x/time v0.3.0 golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6 - google.golang.org/grpc v1.58.0 + google.golang.org/grpc v1.58.1 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v3 v3.0.1 k8s.io/klog/v2 v2.100.1 @@ -153,7 +153,7 @@ require ( github.com/Microsoft/hcsshim v0.9.9 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect - github.com/ProtonMail/gopenpgp/v2 v2.7.2 // indirect + github.com/ProtonMail/gopenpgp/v2 v2.7.3 // indirect github.com/adrg/xdg v0.4.0 // indirect github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 // indirect github.com/aws/aws-sdk-go-v2 v1.21.0 // indirect @@ -210,7 +210,7 @@ require ( github.com/gorilla/mux v1.8.0 // 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.16.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-envparse v0.1.0 github.com/hashicorp/go-immutable-radix v1.3.1 // indirect @@ -292,15 +292,15 @@ require ( go.opentelemetry.io/otel/trace v1.10.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.12.0 // indirect + golang.org/x/crypto v0.13.0 // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/oauth2 v0.10.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/tools v0.11.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard v0.0.0-20230325221338-052af4a8072b // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index b5cbdf283..de4f61310 100644 --- a/go.sum +++ b/go.sum @@ -92,8 +92,8 @@ github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwC github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= -github.com/ProtonMail/gopenpgp/v2 v2.7.2 h1:mIwxSUPezxNYq0RA5106VPWyKC+Ly3FvBUnBJh/7GWw= -github.com/ProtonMail/gopenpgp/v2 v2.7.2/go.mod h1:IhkNEDaxec6NyzSI0PlxapinnwPVIESk8/76da3Ct3g= +github.com/ProtonMail/gopenpgp/v2 v2.7.3 h1:AJu1OI/1UWVYZl6QcCLKGu9OTngS2r52618uGlje84I= +github.com/ProtonMail/gopenpgp/v2 v2.7.3/go.mod h1:IhkNEDaxec6NyzSI0PlxapinnwPVIESk8/76da3Ct3g= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -331,8 +331,8 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosi-project/runtime v0.3.1 h1:dRGKOlEDKjvuC+VIG4N2Z5iAftaqgS1h3ttmvbK4nMk= -github.com/cosi-project/runtime v0.3.1/go.mod h1:Q+oiWic2l6TaGuIWtUo0E9tL2RDT2APHvjUc/mJtn24= +github.com/cosi-project/runtime v0.3.9 h1:tQu+vr1/HonI4Th8fnZbSUvzU635d2a3gWLv/PnBN3g= +github.com/cosi-project/runtime v0.3.9/go.mod h1:kLIIwnTlUnVPhZZN82esCuyvD23eNJkOcnjWE7i+qBk= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= @@ -624,8 +624,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2 h1:dygLcbEBA+t/P7ck6a8AkXv6juQ4cK0RHBoh32jxhHM= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2/go.mod h1:Ap9RLCIJVtgQg1/BBgVEfypOAySvvlcpcVQkSzJCH4Y= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -1010,8 +1010,8 @@ github.com/siderolabs/discovery-api v0.1.3 h1:37ue+0w2A7Q2FrhyuDbfdhL4VPvDTpCzUY github.com/siderolabs/discovery-api v0.1.3/go.mod h1:fC6DOJwYQy2QsMCLLTvoScKmBCMNza+VwK2/RHLsoHU= github.com/siderolabs/discovery-client v0.1.5 h1:CyaOOynanZdB29v46lyEOaNfPoBnKjjEBwdYbyCZEh4= github.com/siderolabs/discovery-client v0.1.5/go.mod h1:XFSNX7ADu+4r3j/m299V6pP7f4vEDnSJJhgc5yZE73g= -github.com/siderolabs/gen v0.4.5 h1:rwXUVJlL7hYza1LrSVXfT905ZC9Rgei37jMKKs/+eP0= -github.com/siderolabs/gen v0.4.5/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= +github.com/siderolabs/gen v0.4.7 h1:lM69UYggT7yzpubf7hEFaNujPdY55Y9zvQf/NC18GvA= +github.com/siderolabs/gen v0.4.7/go.mod h1:4PBYMdXxTg292IDRq4CGn5AymyDxJVEDvobVKDqFBEA= github.com/siderolabs/go-api-signature v0.2.6 h1:X4Q+J7CmyfUHKUR+4x4RqmmSSksQ2pYGDajwVX8ZaJ0= github.com/siderolabs/go-api-signature v0.2.6/go.mod h1:jt7azUqWctrkn7XuTPunfkWllvGPIfRJW8AS3OVkiqE= github.com/siderolabs/go-blockdevice v0.4.6 h1:yfxFYzXezzszB0mSF2ZG8jPPampoNXa9r8W8nM0IoZI= @@ -1229,8 +1229,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= go4.org/netipx v0.0.0-20230728184502-ec4c8b891b28 h1:zLxFnORHDFTSkJPawMU7LzsuGQJ4MUFS653jJHpORow= go4.org/netipx v0.0.0-20230728184502-ec4c8b891b28/go.mod h1:TQvodOM+hJTioNQJilmLXu08JNb8i+ccq418+KWu1/Y= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1253,8 +1253,8 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1348,8 +1348,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1359,8 +1359,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1477,8 +1477,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1487,8 +1487,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1502,8 +1502,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1661,8 +1661,8 @@ google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1688,8 +1688,8 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= -google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.1 h1:OL+Vz23DTtrrldqHK49FUOPHyY75rvFqJfXC84NYW58= +google.golang.org/grpc v1.58.1/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/go.work b/go.work index 4087dd574..c726fb0e5 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.21 +go 1.21.1 use ( . diff --git a/internal/app/apid/pkg/director/director.go b/internal/app/apid/pkg/director/director.go index 2ef2f2a47..773f0fe80 100644 --- a/internal/app/apid/pkg/director/director.go +++ b/internal/app/apid/pkg/director/director.go @@ -8,9 +8,9 @@ package director import ( "context" "regexp" + "slices" "strings" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/grpc-proxy/proxy" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -129,7 +129,7 @@ func (r *Router) aggregateDirector(targets []string) (proxy.Mode, []proxy.Backen // StreamedDetector implements proxy.StreamedDetector. func (r *Router) StreamedDetector(fullMethodName string) bool { - return slices.Contains(r.streamedMatchers, func(regex *regexp.Regexp) bool { return regex.MatchString(fullMethodName) }) + return slices.ContainsFunc(r.streamedMatchers, func(regex *regexp.Regexp) bool { return regex.MatchString(fullMethodName) }) } // RegisterStreamedRegex register regex for streamed method. diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go index 2e98c99c7..51cd14873 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go @@ -10,10 +10,11 @@ import ( "fmt" "log" "net/netip" + "slices" "strings" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/grpc/metadata" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -64,7 +65,7 @@ func (s *Server) HealthCheck(in *clusterapi.HealthCheckRequest, srv clusterapi.C Info: clusterInfo, } - nodeInternalIPs := slices.Map(clusterInfo.Nodes(), func(info cluster.NodeInfo) string { + nodeInternalIPs := xslices.Map(clusterInfo.Nodes(), func(info cluster.NodeInfo) string { return info.InternalIP.String() }) @@ -109,10 +110,10 @@ func (cl *clusterState) NodesByType(t machine.Type) []cluster.NodeInfo { func (cl *clusterState) String() string { return fmt.Sprintf("control plane: %q, worker: %q", - slices.Map(cl.nodeInfosByType[machine.TypeControlPlane], func(info cluster.NodeInfo) string { + xslices.Map(cl.nodeInfosByType[machine.TypeControlPlane], func(info cluster.NodeInfo) string { return info.InternalIP.String() }), - slices.Map(cl.nodeInfosByType[machine.TypeWorker], func(info cluster.NodeInfo) string { + xslices.Map(cl.nodeInfosByType[machine.TypeWorker], func(info cluster.NodeInfo) string { return info.InternalIP.String() })) } @@ -237,7 +238,7 @@ func getDiscoveryMemberList(ctx context.Context, runtime runtime.Runtime) ([]*cl result := make([]*clusterres.Member, 0, list.Len()) - for iter := safe.IteratorFromList(list); iter.Next(); { + for iter := list.Iterator(); iter.Next(); { result = append(result, iter.Value()) } diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_monitoring.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_monitoring.go index 8eb3d190b..11650e451 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_monitoring.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_monitoring.go @@ -13,7 +13,7 @@ import ( "github.com/prometheus/procfs" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/protobuf/types/known/emptypb" "github.com/siderolabs/talos/pkg/machinery/api/machine" @@ -188,7 +188,7 @@ func (s *Server) CPUInfo(ctx context.Context, in *emptypb.Empty) (*machine.CPUIn reply := &machine.CPUInfoResponse{ Messages: []*machine.CPUsInfo{ { - CpuInfo: slices.Map(info, translateCPUInfo), + CpuInfo: xslices.Map(info, translateCPUInfo), }, }, } diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go index f159ccb61..9728b550c 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go @@ -36,7 +36,7 @@ import ( "github.com/nberlee/go-netstat/netstat" "github.com/prometheus/procfs" "github.com/rs/xid" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-blockdevice/blockdevice/partition/gpt" bddisk "github.com/siderolabs/go-blockdevice/blockdevice/util/disk" "github.com/siderolabs/go-kmsg" @@ -552,7 +552,7 @@ func (opt *ResetOptions) GetSystemDiskTargets() []runtime.PartitionTarget { return nil } - return slices.Map(opt.systemDiskTargets, func(t *installer.Target) runtime.PartitionTarget { return t }) + return xslices.Map(opt.systemDiskTargets, func(t *installer.Target) runtime.PartitionTarget { return t }) } // Reset resets the node. @@ -579,7 +579,7 @@ func (s *Server) Reset(ctx context.Context, in *machine.ResetRequest) (reply *ma return nil, err } - disks := slices.ToMap(diskList, func(disk *bddisk.Disk) (string, *bddisk.Disk) { + disks := xslices.ToMap(diskList, func(disk *bddisk.Disk) (string, *bddisk.Disk) { return disk.DeviceName, disk }) @@ -661,7 +661,7 @@ func (s *Server) ServiceList(ctx context.Context, in *emptypb.Empty) (result *ma result = &machine.ServiceListResponse{ Messages: []*machine.ServiceList{ { - Services: slices.Map(services, (*system.ServiceRunner).AsProto), + Services: xslices.Map(services, (*system.ServiceRunner).AsProto), }, }, } @@ -1706,8 +1706,8 @@ func (s *Server) EtcdMemberList(ctx context.Context, in *machine.EtcdMemberListR return &machine.EtcdMemberListResponse{ Messages: []*machine.EtcdMembers{ { - LegacyMembers: slices.Map(resp.Members, (*etcdserverpb.Member).GetName), - Members: slices.Map(resp.Members, func(member *etcdserverpb.Member) *machine.EtcdMember { + LegacyMembers: xslices.Map(resp.Members, (*etcdserverpb.Member).GetName), + Members: xslices.Map(resp.Members, func(member *etcdserverpb.Member) *machine.EtcdMember { return &machine.EtcdMember{ Id: member.GetID(), Hostname: member.GetName(), @@ -1954,7 +1954,7 @@ func mapAlarms(alarms []*etcdserverpb.AlarmMember) []*machine.EtcdMemberAlarm { } } - return slices.Map(alarms, func(alarm *etcdserverpb.AlarmMember) *machine.EtcdMemberAlarm { + return xslices.Map(alarms, func(alarm *etcdserverpb.AlarmMember) *machine.EtcdMemberAlarm { return &machine.EtcdMemberAlarm{ MemberId: alarm.MemberID, Alarm: mapAlarmType(alarm.Alarm), diff --git a/internal/app/machined/pkg/adapters/k8s/manifest.go b/internal/app/machined/pkg/adapters/k8s/manifest.go index fd0468b79..993f30b6c 100644 --- a/internal/app/machined/pkg/adapters/k8s/manifest.go +++ b/internal/app/machined/pkg/adapters/k8s/manifest.go @@ -11,7 +11,7 @@ import ( "fmt" "io" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/yaml" @@ -95,7 +95,7 @@ func (a manifest) SetYAML(yamlBytes []byte) error { // Objects returns list of unstructured object. func (a manifest) Objects() []*unstructured.Unstructured { - return slices.Map(a.Manifest.TypedSpec().Items, func(item k8s.SingleManifest) *unstructured.Unstructured { + return xslices.Map(a.Manifest.TypedSpec().Items, func(item k8s.SingleManifest) *unstructured.Unstructured { return &unstructured.Unstructured{Object: item.Object} }) } diff --git a/internal/app/machined/pkg/adapters/network/wireguard_spec.go b/internal/app/machined/pkg/adapters/network/wireguard_spec.go index 7da025fdd..84759b03b 100644 --- a/internal/app/machined/pkg/adapters/network/wireguard_spec.go +++ b/internal/app/machined/pkg/adapters/network/wireguard_spec.go @@ -8,7 +8,7 @@ import ( "net" "net/netip" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "go4.org/netipx" "golang.zx2c4.com/wireguard/wgctrl/wgtypes" @@ -96,7 +96,7 @@ func (a wireguardSpec) Encode(existing *network.WireguardSpec) (*wgtypes.Config, PresharedKey: presharedKey, PersistentKeepaliveInterval: &peer.PersistentKeepaliveInterval, ReplaceAllowedIPs: true, - AllowedIPs: slices.Map(peer.AllowedIPs, func(peerIP netip.Prefix) net.IPNet { + AllowedIPs: xslices.Map(peer.AllowedIPs, func(peerIP netip.Prefix) net.IPNet { return *netipx.PrefixIPNet(peerIP) }), }) @@ -190,7 +190,7 @@ func (a wireguardSpec) Decode(dev *wgtypes.Device, isStatus bool) { } spec.Peers[i].PersistentKeepaliveInterval = dev.Peers[i].PersistentKeepaliveInterval - spec.Peers[i].AllowedIPs = slices.Map(dev.Peers[i].AllowedIPs, func(peerIP net.IPNet) netip.Prefix { + spec.Peers[i].AllowedIPs = xslices.Map(dev.Peers[i].AllowedIPs, func(peerIP net.IPNet) netip.Prefix { res, _ := netipx.FromStdIPNet(&peerIP) return res diff --git a/internal/app/machined/pkg/controllers/cluster/affiliate_merge.go b/internal/app/machined/pkg/controllers/cluster/affiliate_merge.go index 5088e3018..955da6e6b 100644 --- a/internal/app/machined/pkg/controllers/cluster/affiliate_merge.go +++ b/internal/app/machined/pkg/controllers/cluster/affiliate_merge.go @@ -11,7 +11,6 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/channel" "go.uber.org/zap" "github.com/siderolabs/talos/pkg/machinery/resources/cluster" @@ -51,8 +50,10 @@ func (ctrl *AffiliateMergeController) Outputs() []controller.Output { //nolint:gocyclo func (ctrl *AffiliateMergeController) Run(ctx context.Context, r controller.Runtime, _ *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } rawAffiliates, err := safe.ReaderList[*cluster.Affiliate](ctx, r, resource.NewMetadata(cluster.RawNamespaceName, cluster.AffiliateType, "", resource.VersionUndefined)) @@ -62,7 +63,7 @@ func (ctrl *AffiliateMergeController) Run(ctx context.Context, r controller.Runt mergedAffiliates := make(map[resource.ID]*cluster.AffiliateSpec, rawAffiliates.Len()) - for it := safe.IteratorFromList(rawAffiliates); it.Next(); { + for it := rawAffiliates.Iterator(); it.Next(); { affiliateSpec := it.Value().TypedSpec() id := affiliateSpec.NodeID @@ -95,7 +96,7 @@ func (ctrl *AffiliateMergeController) Run(ctx context.Context, r controller.Runt return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { diff --git a/internal/app/machined/pkg/controllers/cluster/cluster.go b/internal/app/machined/pkg/controllers/cluster/cluster.go index cba608334..4303d4fc8 100644 --- a/internal/app/machined/pkg/controllers/cluster/cluster.go +++ b/internal/app/machined/pkg/controllers/cluster/cluster.go @@ -27,7 +27,7 @@ func cleanupAffiliates(ctx context.Context, ctrl controller.Controller, r contro return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { continue diff --git a/internal/app/machined/pkg/controllers/cluster/discovery_service.go b/internal/app/machined/pkg/controllers/cluster/discovery_service.go index 6c52d0a2f..aac5da450 100644 --- a/internal/app/machined/pkg/controllers/cluster/discovery_service.go +++ b/internal/app/machined/pkg/controllers/cluster/discovery_service.go @@ -19,7 +19,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/discovery-api/api/v1alpha1/client/pb" discoveryclient "github.com/siderolabs/discovery-client/pkg/client" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -327,7 +327,7 @@ func (ctrl *DiscoveryServiceController) Run(ctx context.Context, r controller.Ru } func pbAffiliate(affiliate *cluster.AffiliateSpec) *pb.Affiliate { - addresses := slices.Map(affiliate.Addresses, func(address netip.Addr) []byte { + addresses := xslices.Map(affiliate.Addresses, func(address netip.Addr) []byte { return takeResult(address.MarshalBinary()) }) @@ -337,7 +337,7 @@ func pbAffiliate(affiliate *cluster.AffiliateSpec) *pb.Affiliate { kubeSpan = &pb.KubeSpan{ PublicKey: affiliate.KubeSpan.PublicKey, Address: takeResult(affiliate.KubeSpan.Address.MarshalBinary()), - AdditionalAddresses: slices.Map(affiliate.KubeSpan.AdditionalAddresses, func(address netip.Prefix) *pb.IPPrefix { + AdditionalAddresses: xslices.Map(affiliate.KubeSpan.AdditionalAddresses, func(address netip.Prefix) *pb.IPPrefix { return &pb.IPPrefix{ Bits: uint32(address.Bits()), Ip: takeResult(address.Addr().MarshalBinary()), @@ -371,7 +371,7 @@ func pbEndpoints(affiliate *cluster.AffiliateSpec) []*pb.Endpoint { return nil } - return slices.Map(affiliate.KubeSpan.Endpoints, func(endpoint netip.AddrPort) *pb.Endpoint { + return xslices.Map(affiliate.KubeSpan.Endpoints, func(endpoint netip.AddrPort) *pb.Endpoint { return &pb.Endpoint{ Port: uint32(endpoint.Port()), Ip: takeResult(endpoint.Addr().MarshalBinary()), @@ -386,7 +386,7 @@ func pbOtherEndpoints(otherEndpointsList safe.List[*kubespan.Endpoint]) []discov result := make([]discoveryclient.Endpoint, 0, otherEndpointsList.Len()) - for it := safe.IteratorFromList(otherEndpointsList); it.Next(); { + for it := otherEndpointsList.Iterator(); it.Next(); { endpoint := it.Value().TypedSpec() result = append(result, discoveryclient.Endpoint{ diff --git a/internal/app/machined/pkg/controllers/cluster/endpoint.go b/internal/app/machined/pkg/controllers/cluster/endpoint.go index 939fcec6a..3ef228702 100644 --- a/internal/app/machined/pkg/controllers/cluster/endpoint.go +++ b/internal/app/machined/pkg/controllers/cluster/endpoint.go @@ -13,7 +13,6 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/channel" "go.uber.org/zap" "github.com/siderolabs/talos/pkg/machinery/config/machine" @@ -53,8 +52,10 @@ func (ctrl *EndpointController) Outputs() []controller.Output { // Run implements controller.Controller interface. func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } memberList, err := safe.ReaderListAll[*cluster.Member](ctx, r) @@ -64,7 +65,7 @@ func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, l var endpoints []netip.Addr - for it := safe.IteratorFromList(memberList); it.Next(); { + for it := memberList.Iterator(); it.Next(); { member := it.Value().TypedSpec() if !(member.MachineType == machine.TypeControlPlane || member.MachineType == machine.TypeInit) { diff --git a/internal/app/machined/pkg/controllers/cluster/endpoint_test.go b/internal/app/machined/pkg/controllers/cluster/endpoint_test.go index 18b3b02fc..09101f0e9 100644 --- a/internal/app/machined/pkg/controllers/cluster/endpoint_test.go +++ b/internal/app/machined/pkg/controllers/cluster/endpoint_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/cosi-project/runtime/pkg/resource" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -71,7 +71,7 @@ func (suite *EndpointSuite) TestReconcileDefault() { "fd50:8d60:4238:6302:f857:23ff:fe21:d1e0", "fd50:8d60:4238:6302:f857:23ff:fe21:d1e1", }, - slices.Map(spec.Addresses, netip.Addr.String), + xslices.Map(spec.Addresses, netip.Addr.String), ) }) } diff --git a/internal/app/machined/pkg/controllers/cluster/local_affiliate.go b/internal/app/machined/pkg/controllers/cluster/local_affiliate.go index f5e8d97ea..96570f294 100644 --- a/internal/app/machined/pkg/controllers/cluster/local_affiliate.go +++ b/internal/app/machined/pkg/controllers/cluster/local_affiliate.go @@ -8,13 +8,13 @@ import ( "context" "fmt" "net/netip" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/net" "go.uber.org/zap" @@ -115,8 +115,10 @@ func (ctrl *LocalAffiliateController) Outputs() []controller.Output { //nolint:gocyclo,cyclop func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } // mandatory resources to be fetched @@ -249,7 +251,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt spec.KubeSpan.AdditionalAddresses = nil } - endpointIPs := slices.Filter(currentNodeIPs, func(ip netip.Addr) bool { + endpointIPs := xslices.Filter(currentNodeIPs, func(ip netip.Addr) bool { if ip == spec.KubeSpan.Address { // skip kubespan local address return false @@ -264,10 +266,10 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt }) // mix in discovered public IPs - for iter := safe.IteratorFromList(discoveredPublicIPs); iter.Next(); { + for iter := discoveredPublicIPs.Iterator(); iter.Next(); { addr := iter.Value().TypedSpec().Address.Addr() - if slices.Contains(endpointIPs, func(a netip.Addr) bool { return addr == a }) { + if slices.ContainsFunc(endpointIPs, func(a netip.Addr) bool { return addr == a }) { // this address is already published continue } @@ -283,7 +285,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt } } - spec.KubeSpan.Endpoints = slices.Map(endpointIPs, func(addr netip.Addr) netip.AddrPort { + spec.KubeSpan.Endpoints = xslices.Map(endpointIPs, func(addr netip.Addr) netip.AddrPort { return netip.AddrPortFrom(addr, constants.KubeSpanDefaultPort) }) } @@ -302,7 +304,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { diff --git a/internal/app/machined/pkg/controllers/cluster/local_affiliate_test.go b/internal/app/machined/pkg/controllers/cluster/local_affiliate_test.go index 79b191e3a..c43e42912 100644 --- a/internal/app/machined/pkg/controllers/cluster/local_affiliate_test.go +++ b/internal/app/machined/pkg/controllers/cluster/local_affiliate_test.go @@ -9,7 +9,7 @@ import ( "net/netip" "testing" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -49,7 +49,7 @@ func (suite *LocalAffiliateSuite) TestGeneration() { "10.5.0.1", "192.168.192.168", "2001:123:4567::1", - }, slices.Map(spec.Addresses, netip.Addr.String)) + }, xslices.Map(spec.Addresses, netip.Addr.String)) asrt.Equal("example1", spec.Hostname) asrt.Equal("example1.com", spec.Nodename) asrt.Equal(machine.TypeWorker, spec.MachineType) @@ -120,7 +120,7 @@ func (suite *LocalAffiliateSuite) TestGeneration() { "1.1.1.1:51820", "[2001:123:4567::1]:51820", }, - slices.Map(spec.KubeSpan.Endpoints, netip.AddrPort.String), + xslices.Map(spec.KubeSpan.Endpoints, netip.AddrPort.String), ) }) @@ -162,7 +162,7 @@ func (suite *LocalAffiliateSuite) TestCPGeneration() { "10.5.0.1", "192.168.192.168", "2001:123:4567::1", - }, slices.Map(spec.Addresses, netip.Addr.String)) + }, xslices.Map(spec.Addresses, netip.Addr.String)) asrt.Equal("example1", spec.Hostname) asrt.Equal("example1.com", spec.Nodename) asrt.Equal(machine.TypeControlPlane, spec.MachineType) diff --git a/internal/app/machined/pkg/controllers/cluster/member.go b/internal/app/machined/pkg/controllers/cluster/member.go index 9060571cb..b559b607d 100644 --- a/internal/app/machined/pkg/controllers/cluster/member.go +++ b/internal/app/machined/pkg/controllers/cluster/member.go @@ -7,12 +7,11 @@ package cluster import ( "context" "fmt" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" "go.uber.org/zap" "github.com/siderolabs/talos/pkg/machinery/resources/cluster" @@ -52,8 +51,10 @@ func (ctrl *MemberController) Outputs() []controller.Output { //nolint:gocyclo func (ctrl *MemberController) Run(ctx context.Context, r controller.Runtime, _ *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } affiliates, err := safe.ReaderListAll[*cluster.Affiliate](ctx, r) @@ -63,7 +64,7 @@ func (ctrl *MemberController) Run(ctx context.Context, r controller.Runtime, _ * touchedIDs := make(map[resource.ID]struct{}) - for it := safe.IteratorFromList(affiliates); it.Next(); { + for it := affiliates.Iterator(); it.Next(); { affiliateSpec := it.Value().TypedSpec() if affiliateSpec.Nodename == "" { // not a cluster member @@ -94,7 +95,7 @@ func (ctrl *MemberController) Run(ctx context.Context, r controller.Runtime, _ * return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { diff --git a/internal/app/machined/pkg/controllers/config/acquire_test.go b/internal/app/machined/pkg/controllers/config/acquire_test.go index db0042c51..21b80c1d3 100644 --- a/internal/app/machined/pkg/controllers/config/acquire_test.go +++ b/internal/app/machined/pkg/controllers/config/acquire_test.go @@ -13,6 +13,7 @@ import ( "net/url" "os" "path/filepath" + "slices" "sync" "testing" "time" @@ -20,8 +21,6 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/resource/rtestutils" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -186,8 +185,13 @@ func (suite *AcquireSuite) triggerAcquire() { } func (suite *AcquireSuite) waitForConfig() config.Provider { - cfg, ok := channel.RecvWithContext(suite.Ctx(), suite.configSetter.cfgCh) - suite.Require().True(ok) + var cfg config.Provider + + select { + case cfg = <-suite.configSetter.cfgCh: + case <-suite.Ctx().Done(): + suite.Require().Fail("timed out waiting for config") + } status := v1alpha1.NewAcquireConfigStatus() rtestutils.AssertResources(suite.Ctx(), suite.T(), suite.State(), []resource.ID{status.Metadata().ID()}, func(*v1alpha1.AcquireConfigStatus, *assert.Assertions) {}) @@ -256,8 +260,13 @@ func (suite *AcquireSuite) TestFromDiskToMaintenance() { suite.triggerAcquire() - cfg, ok := channel.RecvWithContext(suite.Ctx(), suite.configSetter.cfgCh) - suite.Require().True(ok) + var cfg config.Provider + + select { + case cfg = <-suite.configSetter.cfgCh: + case <-suite.Ctx().Done(): + suite.Require().Fail("timed out waiting for config") + } suite.Require().Equal(cfg.SideroLink().APIUrl().Host, "siderolink.api") @@ -372,8 +381,13 @@ func (suite *AcquireSuite) TestFromPlatformToMaintenance() { suite.triggerAcquire() - cfg, ok := channel.RecvWithContext(suite.Ctx(), suite.configSetter.cfgCh) - suite.Require().True(ok) + var cfg config.Provider + + select { + case cfg = <-suite.configSetter.cfgCh: + case <-suite.Ctx().Done(): + suite.Require().Fail("timed out waiting for config") + } suite.Require().Equal(cfg.SideroLink().APIUrl().Host, "siderolink.api") diff --git a/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go b/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go index d704dae37..ec935b354 100644 --- a/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go +++ b/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go @@ -114,7 +114,7 @@ func (ctrl *SeccompProfileFileController) Run(ctx context.Context, r controller. touchedIDs := make(map[string]struct{}, list.Len()) - for iter := safe.IteratorFromList(list); iter.Next(); { + for iter := list.Iterator(); iter.Next(); { profile := iter.Value() profileName := profile.TypedSpec().Name diff --git a/internal/app/machined/pkg/controllers/etcd/advertised_peer.go b/internal/app/machined/pkg/controllers/etcd/advertised_peer.go index 174937d41..d3a84c059 100644 --- a/internal/app/machined/pkg/controllers/etcd/advertised_peer.go +++ b/internal/app/machined/pkg/controllers/etcd/advertised_peer.go @@ -15,7 +15,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.etcd.io/etcd/api/v3/etcdserverpb" "go.uber.org/zap" @@ -147,7 +147,7 @@ func (ctrl *AdvertisedPeerController) updateAdvertisedPeers(ctx context.Context, return fmt.Errorf("local member not found in member list") } - newPeerURLs := slices.Map(advertisedAddresses, func(addr netip.Addr) string { + newPeerURLs := xslices.Map(advertisedAddresses, func(addr netip.Addr) string { return fmt.Sprintf("https://%s", nethelpers.JoinHostPort(addr.String(), constants.EtcdPeerPort)) }) currentPeerURLs := localMember.PeerURLs diff --git a/internal/app/machined/pkg/controllers/etcd/spec.go b/internal/app/machined/pkg/controllers/etcd/spec.go index 504c7b632..7c7c34cb1 100644 --- a/internal/app/machined/pkg/controllers/etcd/spec.go +++ b/internal/app/machined/pkg/controllers/etcd/spec.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/net" "go.uber.org/zap" @@ -128,11 +128,11 @@ func (ctrl *SpecController) Run(ctx context.Context, r controller.Runtime, logge advertisedCIDRs := make([]string, 0, len(advertiseValidSubnets)+len(etcdConfig.TypedSpec().AdvertiseExcludeSubnets)) advertisedCIDRs = append(advertisedCIDRs, advertiseValidSubnets...) - advertisedCIDRs = append(advertisedCIDRs, slices.Map(etcdConfig.TypedSpec().AdvertiseExcludeSubnets, func(cidr string) string { return "!" + cidr })...) + advertisedCIDRs = append(advertisedCIDRs, xslices.Map(etcdConfig.TypedSpec().AdvertiseExcludeSubnets, func(cidr string) string { return "!" + cidr })...) listenCIDRs := make([]string, 0, len(etcdConfig.TypedSpec().ListenValidSubnets)+len(etcdConfig.TypedSpec().ListenExcludeSubnets)) listenCIDRs = append(listenCIDRs, etcdConfig.TypedSpec().ListenValidSubnets...) - listenCIDRs = append(listenCIDRs, slices.Map(etcdConfig.TypedSpec().ListenExcludeSubnets, func(cidr string) string { return "!" + cidr })...) + listenCIDRs = append(listenCIDRs, xslices.Map(etcdConfig.TypedSpec().ListenExcludeSubnets, func(cidr string) string { return "!" + cidr })...) defaultListenAddress := netip.AddrFrom4([4]byte{0, 0, 0, 0}) loopbackAddress := netip.AddrFrom4([4]byte{127, 0, 0, 1}) diff --git a/internal/app/machined/pkg/controllers/files/cri_registry_config.go b/internal/app/machined/pkg/controllers/files/cri_registry_config.go index 75f05e171..e50cc09d1 100644 --- a/internal/app/machined/pkg/controllers/files/cri_registry_config.go +++ b/internal/app/machined/pkg/controllers/files/cri_registry_config.go @@ -16,7 +16,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" "golang.org/x/sys/unix" @@ -162,7 +162,7 @@ func (ctrl *CRIRegistryConfigController) syncHosts(shadowPath string, criHosts * return err } - fileListMap := slices.ToSetFunc(fileList, fs.DirEntry.Name) + fileListMap := xslices.ToSetFunc(fileList, fs.DirEntry.Name) for _, file := range directory.Files { delete(fileListMap, file.Name) diff --git a/internal/app/machined/pkg/controllers/k8s/address_filter.go b/internal/app/machined/pkg/controllers/k8s/address_filter.go index 2108facc9..b1484d0c1 100644 --- a/internal/app/machined/pkg/controllers/k8s/address_filter.go +++ b/internal/app/machined/pkg/controllers/k8s/address_filter.go @@ -8,12 +8,12 @@ import ( "context" "fmt" "net/netip" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" diff --git a/internal/app/machined/pkg/controllers/k8s/control_plane.go b/internal/app/machined/pkg/controllers/k8s/control_plane.go index d171661b4..bd19282e5 100644 --- a/internal/app/machined/pkg/controllers/k8s/control_plane.go +++ b/internal/app/machined/pkg/controllers/k8s/control_plane.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller/generic" "github.com/cosi-project/runtime/pkg/controller/generic/transform" "github.com/siderolabs/gen/optional" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "go.uber.org/zap" v1 "k8s.io/api/core/v1" @@ -332,7 +332,7 @@ func NewControlPlaneExtraManifestsController() *ControlPlaneExtraManifestsContro } func convertVolumes(volumes []talosconfig.VolumeMount) []k8s.ExtraVolume { - return slices.Map(volumes, func(v talosconfig.VolumeMount) k8s.ExtraVolume { + return xslices.Map(volumes, func(v talosconfig.VolumeMount) k8s.ExtraVolume { return k8s.ExtraVolume{ Name: v.Name(), HostPath: v.HostPath(), diff --git a/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod.go b/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod.go index 04d4f9eb9..e8bf180b4 100644 --- a/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod.go +++ b/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod.go @@ -16,7 +16,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" v1 "k8s.io/api/core/v1" @@ -235,7 +235,7 @@ func (ctrl *ControlPlaneStaticPodController) teardownAll(ctx context.Context, r } func volumeMounts(volumes []k8s.ExtraVolume) []v1.VolumeMount { - return slices.Map(volumes, func(vol k8s.ExtraVolume) v1.VolumeMount { + return xslices.Map(volumes, func(vol k8s.ExtraVolume) v1.VolumeMount { return v1.VolumeMount{ Name: vol.Name, MountPath: vol.MountPath, @@ -245,7 +245,7 @@ func volumeMounts(volumes []k8s.ExtraVolume) []v1.VolumeMount { } func volumes(volumes []k8s.ExtraVolume) []v1.Volume { - return slices.Map(volumes, func(vol k8s.ExtraVolume) v1.Volume { + return xslices.Map(volumes, func(vol k8s.ExtraVolume) v1.Volume { return v1.Volume{ Name: vol.Name, VolumeSource: v1.VolumeSource{ @@ -265,7 +265,7 @@ func envVars(environment map[string]string) []v1.EnvVar { keys := maps.Keys(environment) sort.Strings(keys) - return slices.Map(keys, func(key string) v1.EnvVar { + return xslices.Map(keys, func(key string) v1.EnvVar { // Kubernetes supports variable references in variable values, so escape '$' to prevent that. return v1.EnvVar{ Name: key, diff --git a/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod_test.go b/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod_test.go index dc8f34dea..4077848f7 100644 --- a/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod_test.go +++ b/internal/app/machined/pkg/controllers/k8s/control_plane_static_pod_test.go @@ -20,7 +20,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" v1 "k8s.io/api/core/v1" @@ -92,7 +92,7 @@ func (suite *ControlPlaneStaticPodSuite) assertControlPlaneStaticPods(manifests return err } - ids := slices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) + ids := xslices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) if !reflect.DeepEqual(manifests, ids) { return retry.ExpectedError(fmt.Errorf("expected %q, got %q", manifests, ids)) diff --git a/internal/app/machined/pkg/controllers/k8s/extra_manifest_test.go b/internal/app/machined/pkg/controllers/k8s/extra_manifest_test.go index a645f8bae..72863bc6c 100644 --- a/internal/app/machined/pkg/controllers/k8s/extra_manifest_test.go +++ b/internal/app/machined/pkg/controllers/k8s/extra_manifest_test.go @@ -20,7 +20,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" @@ -78,7 +78,7 @@ func (suite *ExtraManifestSuite) assertExtraManifests(manifests []string) error return err } - ids := slices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) + ids := xslices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) if !reflect.DeepEqual(manifests, ids) { return retry.ExpectedError(fmt.Errorf("expected %q, got %q", manifests, ids)) diff --git a/internal/app/machined/pkg/controllers/k8s/kubelet_config.go b/internal/app/machined/pkg/controllers/k8s/kubelet_config.go index bf5e85a90..92a6a8eaa 100644 --- a/internal/app/machined/pkg/controllers/k8s/kubelet_config.go +++ b/internal/app/machined/pkg/controllers/k8s/kubelet_config.go @@ -14,8 +14,8 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/gen/optional" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/gen/xerrors" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -65,7 +65,7 @@ func NewKubeletConfigController() *KubeletConfigController { return fmt.Errorf("error building DNS service IPs: %w", err) } - kubeletConfig.ClusterDNS = slices.Map(addrs, netip.Addr.String) + kubeletConfig.ClusterDNS = xslices.Map(addrs, netip.Addr.String) } kubeletConfig.ClusterDomain = cfgProvider.Cluster().Network().DNSDomain() diff --git a/internal/app/machined/pkg/controllers/k8s/kubelet_service.go b/internal/app/machined/pkg/controllers/k8s/kubelet_service.go index 71e9f4dd9..9ebd5155b 100644 --- a/internal/app/machined/pkg/controllers/k8s/kubelet_service.go +++ b/internal/app/machined/pkg/controllers/k8s/kubelet_service.go @@ -22,7 +22,6 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/channel" "github.com/siderolabs/gen/optional" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -93,8 +92,10 @@ func (ctrl *KubeletServiceController) Run(ctx context.Context, r controller.Runt } for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } _, err := r.Get(ctx, resource.NewMetadata(files.NamespaceName, files.EtcFileStatusType, "machine-id", resource.VersionUndefined)) @@ -143,8 +144,10 @@ func (ctrl *KubeletServiceController) Run(ctx context.Context, r controller.Runt r.QueueReconcile() for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } cfg, err := safe.ReaderGetByID[*k8s.KubeletSpec](ctx, r, k8s.KubeletID) diff --git a/internal/app/machined/pkg/controllers/k8s/kubelet_spec.go b/internal/app/machined/pkg/controllers/k8s/kubelet_spec.go index 3684defeb..e4accb534 100644 --- a/internal/app/machined/pkg/controllers/k8s/kubelet_spec.go +++ b/internal/app/machined/pkg/controllers/k8s/kubelet_spec.go @@ -15,8 +15,7 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -79,8 +78,10 @@ func (ctrl *KubeletSpecController) Outputs() []controller.Output { //nolint:gocyclo func (ctrl *KubeletSpecController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } cfg, err := safe.ReaderGetByID[*k8s.KubeletConfig](ctx, r, k8s.KubeletID) @@ -140,7 +141,7 @@ func (ctrl *KubeletSpecController) Run(ctx context.Context, r controller.Runtime return fmt.Errorf("error getting node IPs: %w", nodeErr) } - nodeIPsString := slices.Map(nodeIP.TypedSpec().Addresses, netip.Addr.String) + nodeIPsString := xslices.Map(nodeIP.TypedSpec().Addresses, netip.Addr.String) args["node-ip"] = strings.Join(nodeIPsString, ",") } diff --git a/internal/app/machined/pkg/controllers/k8s/kubeprism.go b/internal/app/machined/pkg/controllers/k8s/kubeprism.go index 293c0b3c4..26dad0fce 100644 --- a/internal/app/machined/pkg/controllers/k8s/kubeprism.go +++ b/internal/app/machined/pkg/controllers/k8s/kubeprism.go @@ -14,7 +14,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-loadbalancer/controlplane" "github.com/siderolabs/go-loadbalancer/upstream" "github.com/siderolabs/go-pointer" @@ -172,7 +172,7 @@ func (ctrl *KubePrismController) writeKubePrismStatus( return fmt.Errorf("error listing KubePrism resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if ctrl.lb == nil || res.Metadata().ID() != k8s.KubePrismStatusesID { @@ -219,7 +219,7 @@ func (ctrl *KubePrismController) startKubePrism(lbCfg *k8s.KubePrismConfig, logg } func makeEndpoints(spec *k8s.KubePrismConfigSpec) []string { - return slices.Map(spec.Endpoints, func(e k8s.KubePrismEndpoint) string { + return xslices.Map(spec.Endpoints, func(e k8s.KubePrismEndpoint) string { return net.JoinHostPort(e.Host, strconv.FormatUint(uint64(e.Port), 10)) }) } diff --git a/internal/app/machined/pkg/controllers/k8s/kubeprism_endpoints.go b/internal/app/machined/pkg/controllers/k8s/kubeprism_endpoints.go index 7a089bf96..2468c4100 100644 --- a/internal/app/machined/pkg/controllers/k8s/kubeprism_endpoints.go +++ b/internal/app/machined/pkg/controllers/k8s/kubeprism_endpoints.go @@ -63,7 +63,7 @@ func NewKubePrismEndpointsController() *KubePrismEndpointsController { }) } - for it := safe.IteratorFromList(members); it.Next(); { + for it := members.Iterator(); it.Next(); { memberSpec := it.Value().TypedSpec() if len(memberSpec.Addresses) > 0 && memberSpec.ControlPlane != nil { diff --git a/internal/app/machined/pkg/controllers/k8s/manifest_apply.go b/internal/app/machined/pkg/controllers/k8s/manifest_apply.go index b4f7fbbe3..01b3e5040 100644 --- a/internal/app/machined/pkg/controllers/k8s/manifest_apply.go +++ b/internal/app/machined/pkg/controllers/k8s/manifest_apply.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -166,7 +166,7 @@ func (ctrl *ManifestApplyController) Run(ctx context.Context, r controller.Runti if err = r.Modify(ctx, k8s.NewManifestStatus(k8s.ControlPlaneNamespaceName), func(r resource.Resource) error { status := r.(*k8s.ManifestStatus).TypedSpec() - status.ManifestsApplied = slices.Map(manifests.Items, func(m resource.Resource) string { + status.ManifestsApplied = xslices.Map(manifests.Items, func(m resource.Resource) string { return m.Metadata().ID() }) @@ -182,7 +182,7 @@ func (ctrl *ManifestApplyController) Run(ctx context.Context, r controller.Runti //nolint:gocyclo,cyclop func (ctrl *ManifestApplyController) apply(ctx context.Context, logger *zap.Logger, mapper *restmapper.DeferredDiscoveryRESTMapper, dyn dynamic.Interface, manifests resource.List) error { // flatten list of objects to be applied - objects := slices.FlatMap(manifests.Items, func(m resource.Resource) []*unstructured.Unstructured { + objects := xslices.FlatMap(manifests.Items, func(m resource.Resource) []*unstructured.Unstructured { return k8sadapter.Manifest(m.(*k8s.Manifest)).Objects() }) diff --git a/internal/app/machined/pkg/controllers/k8s/manifest_test.go b/internal/app/machined/pkg/controllers/k8s/manifest_test.go index e1d86718e..f273fbd42 100644 --- a/internal/app/machined/pkg/controllers/k8s/manifest_test.go +++ b/internal/app/machined/pkg/controllers/k8s/manifest_test.go @@ -19,7 +19,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -79,7 +79,7 @@ func (suite *ManifestSuite) assertManifests(manifests []string) error { return err } - ids := slices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) + ids := xslices.Map(resources.Items, func(r resource.Resource) string { return r.Metadata().ID() }) if !reflect.DeepEqual(manifests, ids) { return retry.ExpectedError(fmt.Errorf("expected %q, got %q", manifests, ids)) diff --git a/internal/app/machined/pkg/controllers/k8s/node_apply.go b/internal/app/machined/pkg/controllers/k8s/node_apply.go index 1cef0d61d..08f047bd9 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_apply.go +++ b/internal/app/machined/pkg/controllers/k8s/node_apply.go @@ -16,7 +16,7 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/go-retry/retry" "go.uber.org/zap" @@ -115,7 +115,7 @@ func (ctrl *NodeApplyController) getNodeLabelSpecs(ctx context.Context, r contro result := make(map[string]string, items.Len()) - for iter := safe.IteratorFromList(items); iter.Next(); { + for iter := items.Iterator(); iter.Next(); { result[iter.Value().TypedSpec().Key] = iter.Value().TypedSpec().Value } @@ -130,7 +130,7 @@ func (ctrl *NodeApplyController) getNodeTaintSpecs(ctx context.Context, r contro result := make([]k8s.NodeTaintSpecSpec, 0, items.Len()) - for iter := safe.IteratorFromList(items); iter.Next(); { + for iter := items.Iterator(); iter.Next(); { result = append(result, *iter.Value().TypedSpec()) } @@ -248,7 +248,7 @@ func umarshalOwnedAnnotation(node *v1.Node, annotation string) (map[string]struc } } - ownedMap := slices.ToSet(owned) + ownedMap := xslices.ToSet(owned) if ownedMap == nil { ownedMap = map[string]struct{}{} } @@ -400,7 +400,7 @@ func (ctrl *NodeApplyController) ApplyTaints(logger *zap.Logger, node *v1.Node, } // remove taints which are owned but are not in the spec - node.Spec.Taints = slices.FilterInPlace(node.Spec.Taints, + node.Spec.Taints = xslices.FilterInPlace(node.Spec.Taints, func(nodeTaint v1.Taint) bool { if _, owned := ownedTaints[nodeTaint.Key]; !owned { return true diff --git a/internal/app/machined/pkg/controllers/k8s/node_apply_test.go b/internal/app/machined/pkg/controllers/k8s/node_apply_test.go index d0140e5a7..1a68a4f72 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_apply_test.go +++ b/internal/app/machined/pkg/controllers/k8s/node_apply_test.go @@ -9,7 +9,7 @@ import ( "testing" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/stretchr/testify/assert" "go.uber.org/zap/zaptest" v1 "k8s.io/api/core/v1" @@ -120,7 +120,7 @@ func TestApplyLabels(t *testing.T) { node := &v1.Node{} node.Labels = tt.inputLabels - ownedLabels := slices.ToSet(tt.ownedLabels) + ownedLabels := xslices.ToSet(tt.ownedLabels) if ownedLabels == nil { ownedLabels = map[string]struct{}{} } @@ -305,7 +305,7 @@ func TestApplyTaints(t *testing.T) { node := &v1.Node{} node.Spec.Taints = tt.inputTaints - ownedTaints := slices.ToSet(tt.ownedTaints) + ownedTaints := xslices.ToSet(tt.ownedTaints) if ownedTaints == nil { ownedTaints = map[string]struct{}{} } diff --git a/internal/app/machined/pkg/controllers/k8s/node_cordoned_spec.go b/internal/app/machined/pkg/controllers/k8s/node_cordoned_spec.go index b79ce50f4..5ee2fabb8 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_cordoned_spec.go +++ b/internal/app/machined/pkg/controllers/k8s/node_cordoned_spec.go @@ -93,7 +93,7 @@ func (ctrl *NodeCordonedSpecController) Run(ctx context.Context, r controller.Ru return fmt.Errorf("error getting node cordoned specs: %w", err) } - for iter := safe.IteratorFromList(nodeCordoned); iter.Next(); { + for iter := nodeCordoned.Iterator(); iter.Next(); { if err = r.Destroy(ctx, iter.Value().Metadata()); err != nil { return fmt.Errorf("error destroying node cordoned spec: %w", err) } diff --git a/internal/app/machined/pkg/controllers/k8s/node_status.go b/internal/app/machined/pkg/controllers/k8s/node_status.go index b7a11aa80..65f4f2747 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_status.go +++ b/internal/app/machined/pkg/controllers/k8s/node_status.go @@ -179,7 +179,7 @@ func (ctrl *NodeStatusController) Run(ctx context.Context, r controller.Runtime, return fmt.Errorf("error listing node statuses: %w", err) } - for iter := safe.IteratorFromList(items); iter.Next(); { + for iter := items.Iterator(); iter.Next(); { if _, touched := touchedIDs[iter.Value().Metadata().ID()]; touched { continue } diff --git a/internal/app/machined/pkg/controllers/k8s/nodeip.go b/internal/app/machined/pkg/controllers/k8s/nodeip.go index 3c0edf4b1..3eecb245b 100644 --- a/internal/app/machined/pkg/controllers/k8s/nodeip.go +++ b/internal/app/machined/pkg/controllers/k8s/nodeip.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/net" "go.uber.org/zap" @@ -102,7 +102,7 @@ func (ctrl *NodeIPController) Run(ctx context.Context, r controller.Runtime, log cidrs := make([]string, 0, len(cfgSpec.ValidSubnets)+len(cfgSpec.ExcludeSubnets)) cidrs = append(cidrs, cfgSpec.ValidSubnets...) - cidrs = append(cidrs, slices.Map(cfgSpec.ExcludeSubnets, func(cidr string) string { return "!" + cidr })...) + cidrs = append(cidrs, xslices.Map(cfgSpec.ExcludeSubnets, func(cidr string) string { return "!" + cidr })...) ips, err := net.FilterIPs(addrs, cidrs) if err != nil { diff --git a/internal/app/machined/pkg/controllers/k8s/static_endpoint.go b/internal/app/machined/pkg/controllers/k8s/static_endpoint.go index 293f903f4..2255987e8 100644 --- a/internal/app/machined/pkg/controllers/k8s/static_endpoint.go +++ b/internal/app/machined/pkg/controllers/k8s/static_endpoint.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -82,7 +82,7 @@ func (ctrl *StaticEndpointController) Run(ctx context.Context, r controller.Runt return fmt.Errorf("error resolving %q: %w", cpHostname, err) } - addrs = slices.Map(addrs, netip.Addr.Unmap) + addrs = xslices.Map(addrs, netip.Addr.Unmap) if err = safe.WriterModify(ctx, r, k8s.NewEndpoint(k8s.ControlPlaneNamespaceName, k8s.ControlPlaneKubernetesEndpointsID), func(endpoint *k8s.Endpoint) error { endpoint.TypedSpec().Addresses = addrs diff --git a/internal/app/machined/pkg/controllers/k8s/static_pod_server.go b/internal/app/machined/pkg/controllers/k8s/static_pod_server.go index 2c80fc9e1..937641343 100644 --- a/internal/app/machined/pkg/controllers/k8s/static_pod_server.go +++ b/internal/app/machined/pkg/controllers/k8s/static_pod_server.go @@ -109,7 +109,7 @@ func (ctrl *StaticPodServerController) buildPodList(ctx context.Context, r contr touchedPodIDs := map[string]struct{}{} - for iter := safe.IteratorFromList(staticPods); iter.Next(); { + for iter := staticPods.Iterator(); iter.Next(); { id := iter.Value().Metadata().ID() version := iter.Value().Metadata().Version().String() diff --git a/internal/app/machined/pkg/controllers/kubeaccess/serviceaccount/crd_controller.go b/internal/app/machined/pkg/controllers/kubeaccess/serviceaccount/crd_controller.go index 546c2da3f..07f94ff70 100644 --- a/internal/app/machined/pkg/controllers/kubeaccess/serviceaccount/crd_controller.go +++ b/internal/app/machined/pkg/controllers/kubeaccess/serviceaccount/crd_controller.go @@ -13,12 +13,13 @@ import ( "errors" "fmt" "reflect" + "slices" "sort" "sync" "time" "github.com/siderolabs/crypto/x509" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" taloskubernetes "github.com/siderolabs/go-kubernetes/kubernetes" "go.uber.org/zap" corev1 "k8s.io/api/core/v1" @@ -155,7 +156,7 @@ func NewCRDController( controller := CRDController{ talosCA: talosCA, allowedNamespaces: allowedNamespaces, - allowedRoles: slices.ToSet(allowedRoles), + allowedRoles: xslices.ToSet(allowedRoles), dynamicInformerFactory: dynamicInformerFactory, kubeInformerFactory: kubeInformerFactory, kubeClient: kubeCli, @@ -353,7 +354,7 @@ func (t *CRDController) syncHandler(ctx context.Context, key string) error { desiredRoleSet, _ := role.Parse(desiredRoles) - if !slices.Contains(t.allowedNamespaces, func(allowedNS string) bool { + if !slices.ContainsFunc(t.allowedNamespaces, func(allowedNS string) bool { return allowedNS == namespace }) { msg := fmt.Sprintf(messageNamespaceNotAllowed, namespace) diff --git a/internal/app/machined/pkg/controllers/kubespan/endpoint.go b/internal/app/machined/pkg/controllers/kubespan/endpoint.go index f4f9e9ff4..f1c097e61 100644 --- a/internal/app/machined/pkg/controllers/kubespan/endpoint.go +++ b/internal/app/machined/pkg/controllers/kubespan/endpoint.go @@ -11,7 +11,6 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/channel" "github.com/siderolabs/gen/value" "go.uber.org/zap" @@ -58,8 +57,10 @@ func (ctrl *EndpointController) Outputs() []controller.Output { //nolint:gocyclo func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } peerStatuses, err := safe.ReaderListAll[*kubespan.PeerStatus](ctx, r) @@ -75,7 +76,7 @@ func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, l // build lookup table of affiliate's kubespan public key back to affiliate ID affiliateLookup := make(map[string]string) - for it := safe.IteratorFromList(affiliates); it.Next(); { + for it := affiliates.Iterator(); it.Next(); { affiliate := it.Value().TypedSpec() if affiliate.KubeSpan.PublicKey != "" { @@ -86,7 +87,7 @@ func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, l // for every kubespan peer, if it's up and has endpoint, harvest that endpoint touchedIDs := make(map[resource.ID]struct{}) - for it := safe.IteratorFromList(peerStatuses); it.Next(); { + for it := peerStatuses.Iterator(); it.Next(); { res := it.Value() peerStatus := res.TypedSpec() @@ -123,7 +124,7 @@ func (ctrl *EndpointController) Run(ctx context.Context, r controller.Runtime, l return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { diff --git a/internal/app/machined/pkg/controllers/kubespan/kubespan_test.go b/internal/app/machined/pkg/controllers/kubespan/kubespan_test.go index ebbeba50f..70ef70cd3 100644 --- a/internal/app/machined/pkg/controllers/kubespan/kubespan_test.go +++ b/internal/app/machined/pkg/controllers/kubespan/kubespan_test.go @@ -17,7 +17,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" @@ -66,7 +66,7 @@ func (suite *KubeSpanSuite) assertResourceIDs(md resource.Metadata, expectedIDs return err } - actualIDs := slices.Map(l.Items, func(r resource.Resource) string { return r.Metadata().ID() }) + actualIDs := xslices.Map(l.Items, func(r resource.Resource) string { return r.Metadata().ID() }) sort.Strings(expectedIDs) diff --git a/internal/app/machined/pkg/controllers/kubespan/manager.go b/internal/app/machined/pkg/controllers/kubespan/manager.go index c3c9826ec..598cda75a 100644 --- a/internal/app/machined/pkg/controllers/kubespan/manager.go +++ b/internal/app/machined/pkg/controllers/kubespan/manager.go @@ -10,12 +10,12 @@ import ( "fmt" "net/netip" "os" + "slices" "time" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/gen/value" "github.com/siderolabs/go-pointer" "go.uber.org/zap" diff --git a/internal/app/machined/pkg/controllers/kubespan/peer_spec.go b/internal/app/machined/pkg/controllers/kubespan/peer_spec.go index ec1264bc8..b9388bdfb 100644 --- a/internal/app/machined/pkg/controllers/kubespan/peer_spec.go +++ b/internal/app/machined/pkg/controllers/kubespan/peer_spec.go @@ -7,13 +7,13 @@ package kubespan import ( "context" "fmt" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" "go4.org/netipx" @@ -69,8 +69,10 @@ func (ctrl *PeerSpecController) Outputs() []controller.Output { //nolint:gocyclo,cyclop func (ctrl *PeerSpecController) Run(ctx context.Context, r controller.Runtime, logger *zap.Logger) error { for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok && ctx.Err() != nil { - return nil //nolint:nilerr + select { + case <-ctx.Done(): + return nil + case <-r.EventCh(): } cfg, err := safe.ReaderGetByID[*kubespan.Config](ctx, r, kubespan.ConfigID) @@ -96,7 +98,7 @@ func (ctrl *PeerSpecController) Run(ctx context.Context, r controller.Runtime, l peerIPSets := make(map[string]*netipx.IPSet, affiliates.Len()) affiliateLoop: - for it := safe.IteratorFromList(affiliates); it.Next(); { + for it := affiliates.Iterator(); it.Next(); { affiliate := it.Value() if affiliate.Metadata().ID() == localAffiliateID { @@ -183,7 +185,7 @@ func (ctrl *PeerSpecController) Run(ctx context.Context, r controller.Runtime, l return fmt.Errorf("error listing resources: %w", err) } - for it := safe.IteratorFromList(list); it.Next(); { + for it := list.Iterator(); it.Next(); { res := it.Value() if res.Metadata().Owner() != ctrl.Name() { @@ -203,5 +205,5 @@ func (ctrl *PeerSpecController) Run(ctx context.Context, r controller.Runtime, l // dumpSet converts IPSet to a form suitable for logging. func dumpSet(set *netipx.IPSet) []string { - return slices.Map(set.Ranges(), netipx.IPRange.String) + return xslices.Map(set.Ranges(), netipx.IPRange.String) } diff --git a/internal/app/machined/pkg/controllers/network/address_merge_test.go b/internal/app/machined/pkg/controllers/network/address_merge_test.go index e6ff36f87..bb6e52330 100644 --- a/internal/app/machined/pkg/controllers/network/address_merge_test.go +++ b/internal/app/machined/pkg/controllers/network/address_merge_test.go @@ -20,7 +20,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -293,7 +293,7 @@ func assertResources[R rtestutils.ResourceWithRD]( ctx, t, state, - slices.Map(requiredIDs, func(id string) resource.ID { return id }), + xslices.Map(requiredIDs, func(id string) resource.ID { return id }), check, opts..., ) diff --git a/internal/app/machined/pkg/controllers/network/device_config.go b/internal/app/machined/pkg/controllers/network/device_config.go index 66ef0298d..6c9d3262b 100644 --- a/internal/app/machined/pkg/controllers/network/device_config.go +++ b/internal/app/machined/pkg/controllers/network/device_config.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" glob "github.com/ryanuber/go-glob" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -112,7 +112,7 @@ func (ctrl *DeviceConfigController) Run(ctx context.Context, r controller.Runtim continue } - out = slices.Map(matched, func(device *v1alpha1.Device) talosconfig.Device { return device }) + out = xslices.Map(matched, func(device *v1alpha1.Device) talosconfig.Device { return device }) } else if device.Bond() != nil && len(device.Bond().Selectors()) > 0 { dev := device.(*v1alpha1.Device).DeepCopy() device = dev @@ -180,18 +180,18 @@ func (ctrl *DeviceConfigController) expandBondSelector(device *v1alpha1.Device, for _, selector := range device.Bond().Selectors() { matches = append(matches, // filter out bond device itself, as it will inherit the MAC address of the first link - slices.Filter( + xslices.Filter( ctrl.selectDevices(selector, links), func(link *network.LinkStatus) bool { return link.Metadata().ID() != device.Interface() })...) } - device.DeviceBond.BondInterfaces = slices.Map(matches, func(link *network.LinkStatus) string { return link.Metadata().ID() }) + device.DeviceBond.BondInterfaces = xslices.Map(matches, func(link *network.LinkStatus) string { return link.Metadata().ID() }) if len(device.DeviceBond.BondInterfaces) == 0 { return fmt.Errorf("no matching network device for defined bond selectors: %v", - slices.Map(device.Bond().Selectors(), + xslices.Map(device.Bond().Selectors(), func(selector talosconfig.NetworkDeviceSelector) string { return fmt.Sprintf("%+v", selector) }, @@ -207,7 +207,7 @@ func (ctrl *DeviceConfigController) expandBondSelector(device *v1alpha1.Device, func (ctrl *DeviceConfigController) selectDevices(selector talosconfig.NetworkDeviceSelector, links safe.List[*network.LinkStatus]) []*network.LinkStatus { var result []*network.LinkStatus - for iter := safe.IteratorFromList(links); iter.Next(); { + for iter := links.Iterator(); iter.Next(); { linkStatus := iter.Value().TypedSpec() match := false diff --git a/internal/app/machined/pkg/controllers/network/link_spec_test.go b/internal/app/machined/pkg/controllers/network/link_spec_test.go index 70da2fb86..89c0b60c5 100644 --- a/internal/app/machined/pkg/controllers/network/link_spec_test.go +++ b/internal/app/machined/pkg/controllers/network/link_spec_test.go @@ -21,7 +21,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -954,7 +954,7 @@ func TestSortBonds(t *testing.T) { } func toResources(slice []network.LinkSpecSpec) []resource.Resource { - return slices.Map(slice, func(spec network.LinkSpecSpec) resource.Resource { + return xslices.Map(slice, func(spec network.LinkSpecSpec) resource.Resource { link := network.NewLinkSpec(network.NamespaceName, "bar") *link.TypedSpec() = spec @@ -963,7 +963,7 @@ func toResources(slice []network.LinkSpecSpec) []resource.Resource { } func toSpecs(slice []resource.Resource) []network.LinkSpecSpec { - return slices.Map(slice, func(r resource.Resource) network.LinkSpecSpec { + return xslices.Map(slice, func(r resource.Resource) network.LinkSpecSpec { v := r.Spec().(*network.LinkSpecSpec) //nolint:errcheck return *v diff --git a/internal/app/machined/pkg/controllers/network/node_address.go b/internal/app/machined/pkg/controllers/network/node_address.go index f1fbbf06b..38b829621 100644 --- a/internal/app/machined/pkg/controllers/network/node_address.go +++ b/internal/app/machined/pkg/controllers/network/node_address.go @@ -8,11 +8,11 @@ import ( "context" "fmt" "net/netip" + "slices" "sort" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/gen/value" "go.uber.org/zap" @@ -168,7 +168,7 @@ func (ctrl *NodeAddressController) Run(ctx context.Context, r controller.Runtime // we should start handing default address updates, but for now we're not ready // // at the same time check that recorded default address is still on the host, if it's not => replace it - if len(spec.Addresses) > 0 && slices.Contains(current, func(addr netip.Prefix) bool { return spec.Addresses[0] == addr }) { + if len(spec.Addresses) > 0 && slices.ContainsFunc(current, func(addr netip.Prefix) bool { return spec.Addresses[0] == addr }) { return nil } diff --git a/internal/app/machined/pkg/controllers/network/operator/dhcp4.go b/internal/app/machined/pkg/controllers/network/operator/dhcp4.go index d7f2c7e90..4b885d6d5 100644 --- a/internal/app/machined/pkg/controllers/network/operator/dhcp4.go +++ b/internal/app/machined/pkg/controllers/network/operator/dhcp4.go @@ -19,7 +19,7 @@ import ( "github.com/insomniacslk/dhcp/dhcpv4" "github.com/insomniacslk/dhcp/dhcpv4/nclient4" "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "go.uber.org/zap" "go4.org/netipx" @@ -237,7 +237,7 @@ func (d *DHCP4) Run(ctx context.Context, notifyCh chan<- struct{}) { d.lease = nil d.logger.Debug("restarting DHCP sequence due to hostname change", - zap.Strings("dhcp_hostname", slices.Map(d.hostname, func(spec network.HostnameSpecSpec) string { + zap.Strings("dhcp_hostname", xslices.Map(d.hostname, func(spec network.HostnameSpecSpec) string { return spec.Hostname })), ) @@ -422,7 +422,7 @@ func (d *DHCP4) parseNetworkConfigFromAck(ack *dhcpv4.DHCPv4, useHostname bool) d.resolvers = []network.ResolverSpecSpec{ { - DNSServers: slices.Map(ack.DNS(), convertIP), + DNSServers: xslices.Map(ack.DNS(), convertIP), ConfigLayer: network.ConfigOperator, }, } @@ -439,7 +439,7 @@ func (d *DHCP4) parseNetworkConfigFromAck(ack *dhcpv4.DHCPv4, useHostname bool) d.timeservers = []network.TimeServerSpecSpec{ { - NTPServers: slices.Map(ack.NTPServers(), convertIP), + NTPServers: xslices.Map(ack.NTPServers(), convertIP), ConfigLayer: network.ConfigOperator, }, } diff --git a/internal/app/machined/pkg/controllers/network/operator/dhcp6.go b/internal/app/machined/pkg/controllers/network/operator/dhcp6.go index b8e588f0a..9be946a6c 100644 --- a/internal/app/machined/pkg/controllers/network/operator/dhcp6.go +++ b/internal/app/machined/pkg/controllers/network/operator/dhcp6.go @@ -18,7 +18,7 @@ import ( "github.com/insomniacslk/dhcp/dhcpv6" "github.com/insomniacslk/dhcp/dhcpv6/nclient6" "github.com/jsimonetti/rtnetlink" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "go.uber.org/zap" "go4.org/netipx" @@ -184,7 +184,7 @@ func (d *DHCP6) parseReply(reply *dhcpv6.Message) (leaseTime time.Duration) { d.resolvers = []network.ResolverSpecSpec{ { - DNSServers: slices.Map(reply.Options.DNS(), convertIP), + DNSServers: xslices.Map(reply.Options.DNS(), convertIP), ConfigLayer: network.ConfigOperator, }, } @@ -213,7 +213,7 @@ func (d *DHCP6) parseReply(reply *dhcpv6.Message) (leaseTime time.Duration) { d.timeservers = []network.TimeServerSpecSpec{ { - NTPServers: slices.Map(reply.Options.NTPServers(), convertIP), + NTPServers: xslices.Map(reply.Options.NTPServers(), convertIP), ConfigLayer: network.ConfigOperator, }, } diff --git a/internal/app/machined/pkg/controllers/network/operator_config.go b/internal/app/machined/pkg/controllers/network/operator_config.go index 506fa5f38..b7d91eec8 100644 --- a/internal/app/machined/pkg/controllers/network/operator_config.go +++ b/internal/app/machined/pkg/controllers/network/operator_config.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" @@ -118,7 +118,7 @@ func (ctrl *OperatorConfigController) Run(ctx context.Context, r controller.Runt } } - devices := slices.Map(items.Items, func(item resource.Resource) talosconfig.Device { + devices := xslices.Map(items.Items, func(item resource.Resource) talosconfig.Device { return item.(*network.DeviceConfigSpec).TypedSpec().Device }) diff --git a/internal/app/machined/pkg/controllers/network/operator_vip_config.go b/internal/app/machined/pkg/controllers/network/operator_vip_config.go index 5b4c70f66..5ab1a9484 100644 --- a/internal/app/machined/pkg/controllers/network/operator_vip_config.go +++ b/internal/app/machined/pkg/controllers/network/operator_vip_config.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" @@ -74,7 +74,7 @@ func (ctrl *OperatorVIPConfigController) Run(ctx context.Context, r controller.R } } - devices := slices.Map(items.Items, func(item resource.Resource) talosconfig.Device { + devices := xslices.Map(items.Items, func(item resource.Resource) talosconfig.Device { return item.(*network.DeviceConfigSpec).TypedSpec().Device }) diff --git a/internal/app/machined/pkg/controllers/network/probe.go b/internal/app/machined/pkg/controllers/network/probe.go index 8b89fb33d..ffd1978a6 100644 --- a/internal/app/machined/pkg/controllers/network/probe.go +++ b/internal/app/machined/pkg/controllers/network/probe.go @@ -88,7 +88,7 @@ func (ctrl *ProbeController) reconcileRunners(ctx context.Context, r controller. // figure out which operators should run shouldRun := make(map[string]network.ProbeSpecSpec) - for iter := safe.IteratorFromList(specList); iter.Next(); { + for iter := specList.Iterator(); iter.Next(); { shouldRun[iter.Value().Metadata().ID()] = *iter.Value().TypedSpec() } @@ -126,7 +126,7 @@ func (ctrl *ProbeController) reconcileRunners(ctx context.Context, r controller. return fmt.Errorf("error listing probe statuses: %w", err) } - for iter := safe.IteratorFromList(statusList); iter.Next(); { + for iter := statusList.Iterator(); iter.Next(); { if _, exists := shouldRun[iter.Value().Metadata().ID()]; exists { continue } diff --git a/internal/app/machined/pkg/controllers/network/resolver_spec.go b/internal/app/machined/pkg/controllers/network/resolver_spec.go index 33015ea71..2f2d40bdf 100644 --- a/internal/app/machined/pkg/controllers/network/resolver_spec.go +++ b/internal/app/machined/pkg/controllers/network/resolver_spec.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "go.uber.org/zap" "github.com/siderolabs/talos/pkg/machinery/resources/network" @@ -89,7 +89,7 @@ func (ctrl *ResolverSpecController) Run(ctx context.Context, r controller.Runtim return fmt.Errorf("error removing finalizer: %w", err) } case resource.PhaseRunning: - resolvers := slices.Map(spec.TypedSpec().DNSServers, netip.Addr.String) + resolvers := xslices.Map(spec.TypedSpec().DNSServers, netip.Addr.String) logger.Info("setting resolvers", zap.Strings("resolvers", resolvers)) if err = r.Modify(ctx, network.NewResolverStatus(network.NamespaceName, spec.Metadata().ID()), func(r resource.Resource) error { diff --git a/internal/app/machined/pkg/controllers/network/status.go b/internal/app/machined/pkg/controllers/network/status.go index 05abf366b..bd7cad456 100644 --- a/internal/app/machined/pkg/controllers/network/status.go +++ b/internal/app/machined/pkg/controllers/network/status.go @@ -102,7 +102,7 @@ func (ctrl *StatusController) Run(ctx context.Context, r controller.Runtime, log allProbesSuccess := true - for iter := safe.IteratorFromList(probeStatuses); iter.Next(); { + for iter := probeStatuses.Iterator(); iter.Next(); { if !iter.Value().TypedSpec().Success { allProbesSuccess = false @@ -120,7 +120,7 @@ func (ctrl *StatusController) Run(ctx context.Context, r controller.Runtime, log return fmt.Errorf("error getting routes: %w", err) } - for iter := safe.IteratorFromList(routes); iter.Next(); { + for iter := routes.Iterator(); iter.Next(); { if value.IsZero(iter.Value().TypedSpec().Destination) { result.ConnectivityReady = true diff --git a/internal/app/machined/pkg/controllers/network/timeserver_config.go b/internal/app/machined/pkg/controllers/network/timeserver_config.go index 12476441e..55c8d9ead 100644 --- a/internal/app/machined/pkg/controllers/network/timeserver_config.go +++ b/internal/app/machined/pkg/controllers/network/timeserver_config.go @@ -7,12 +7,12 @@ package network import ( "context" "fmt" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" diff --git a/internal/app/machined/pkg/controllers/runtime/cri_image_gc.go b/internal/app/machined/pkg/controllers/runtime/cri_image_gc.go index 6ac080698..9b858b5fa 100644 --- a/internal/app/machined/pkg/controllers/runtime/cri_image_gc.go +++ b/internal/app/machined/pkg/controllers/runtime/cri_image_gc.go @@ -19,7 +19,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -189,7 +189,7 @@ func (ctrl *CRIImageGCController) Run(ctx context.Context, r controller.Runtime, func buildExpectedImageNames(logger *zap.Logger, actualImages []images.Image, expectedImages []string) (map[string]struct{}, error) { var parseErrors []error - expectedReferences := slices.Map(expectedImages, func(ref string) docker.Named { + expectedReferences := xslices.Map(expectedImages, func(ref string) docker.Named { res, parseErr := docker.ParseNamed(ref) parseErrors = append(parseErrors, parseErr) diff --git a/internal/app/machined/pkg/controllers/runtime/cri_image_gc_test.go b/internal/app/machined/pkg/controllers/runtime/cri_image_gc_test.go index dea6d2000..84e074791 100644 --- a/internal/app/machined/pkg/controllers/runtime/cri_image_gc_test.go +++ b/internal/app/machined/pkg/controllers/runtime/cri_image_gc_test.go @@ -7,6 +7,7 @@ package runtime_test import ( "context" "reflect" + "slices" "sort" "sync" "testing" @@ -17,7 +18,7 @@ import ( "github.com/opencontainers/go-digest" v1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -88,7 +89,7 @@ func (m *mockImageService) Delete(ctx context.Context, name string, opts ...imag m.mu.Lock() defer m.mu.Unlock() - m.images = slices.FilterInPlace(m.images, func(i images.Image) bool { return i.Name != name }) + m.images = xslices.FilterInPlace(m.images, func(i images.Image) bool { return i.Name != name }) return nil } @@ -169,13 +170,13 @@ func (suite *CRIImageGCSuite) TestReconcile() { etcd.TypedSpec().Image = "registry.io/org/image2:v3.5.9@sha256:2f794176e9bd8a28501fa185693dc1073013a048c51585022ebce4f84b469db8" suite.Require().NoError(suite.State().Create(suite.Ctx(), etcd)) - expectedImages := slices.Map(storedImages[2:7], func(i images.Image) string { return i.Name }) + expectedImages := xslices.Map(storedImages[2:7], func(i images.Image) string { return i.Name }) suite.Assert().NoError(retry.Constant(5*time.Second, retry.WithUnits(100*time.Millisecond)).Retry(func() error { suite.fakeClock.Add(runtimectrl.ImageCleanupInterval) imageList, _ := suite.mockImageService.List(suite.Ctx()) //nolint:errcheck - actualImages := slices.Map(imageList, func(i images.Image) string { return i.Name }) + actualImages := xslices.Map(imageList, func(i images.Image) string { return i.Name }) if reflect.DeepEqual(expectedImages, actualImages) { return nil diff --git a/internal/app/machined/pkg/controllers/runtime/kmsg_log.go b/internal/app/machined/pkg/controllers/runtime/kmsg_log.go index 5dd3b9fe2..5714baa9e 100644 --- a/internal/app/machined/pkg/controllers/runtime/kmsg_log.go +++ b/internal/app/machined/pkg/controllers/runtime/kmsg_log.go @@ -14,8 +14,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/channel" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-kmsg" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -87,8 +86,10 @@ func (ctrl *KmsgLogDeliveryController) Run(ctx context.Context, r controller.Run kmsgCh := reader.Scan(ctx) for { - if _, ok := channel.RecvWithContext(ctx, r.EventCh()); !ok { + select { + case <-ctx.Done(): return nil + case <-r.EventCh(): } cfg, err := safe.ReaderGetByID[*runtime.KmsgLogConfig](ctx, r, runtime.KmsgLogConfigID) @@ -116,7 +117,7 @@ func (ctrl *KmsgLogDeliveryController) deliverLogs(ctx context.Context, r contro } // initialize all log senders - senders := slices.Map(destURLs, logging.NewJSONLines) + senders := xslices.Map(destURLs, logging.NewJSONLines) defer func() { closeCtx, closeCtxCancel := context.WithTimeout(context.Background(), logCloseTimeout) diff --git a/internal/app/machined/pkg/controllers/runtime/kmsg_log_config.go b/internal/app/machined/pkg/controllers/runtime/kmsg_log_config.go index 55474ed8c..8df9b89c0 100644 --- a/internal/app/machined/pkg/controllers/runtime/kmsg_log_config.go +++ b/internal/app/machined/pkg/controllers/runtime/kmsg_log_config.go @@ -8,11 +8,12 @@ import ( "context" "fmt" "net/url" + "slices" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" @@ -85,9 +86,9 @@ func (ctrl *KmsgLogConfigController) Run(ctx context.Context, r controller.Runti if cfg != nil { // remove duplicate URLs in case same destination is specified in both machine config and kernel args - destinations = append(destinations, slices.Filter(cfg.Config().Runtime().KmsgLogURLs(), + destinations = append(destinations, xslices.Filter(cfg.Config().Runtime().KmsgLogURLs(), func(u *url.URL) bool { - return !slices.Contains(destinations, func(v *url.URL) bool { + return !slices.ContainsFunc(destinations, func(v *url.URL) bool { return v.String() == u.String() }) })...) diff --git a/internal/app/machined/pkg/controllers/runtime/kmsg_log_config_test.go b/internal/app/machined/pkg/controllers/runtime/kmsg_log_config_test.go index 79316ebe8..5a8c23f88 100644 --- a/internal/app/machined/pkg/controllers/runtime/kmsg_log_config_test.go +++ b/internal/app/machined/pkg/controllers/runtime/kmsg_log_config_test.go @@ -10,7 +10,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/resource/rtestutils" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-procfs/procfs" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -73,7 +73,7 @@ func (suite *KmsgLogConfigSuite) TestKmsgLogConfigMachineConfig() { "https://10.0.0.1:3333/logs", "https://10.0.0.2:4444/logs", }, - slices.Map(cfg.TypedSpec().Destinations, func(u *url.URL) string { return u.String() }), + xslices.Map(cfg.TypedSpec().Destinations, func(u *url.URL) string { return u.String() }), ) }) } @@ -90,7 +90,7 @@ func (suite *KmsgLogConfigSuite) TestKmsgLogConfigCmdline() { func(cfg *runtime.KmsgLogConfig, asrt *assert.Assertions) { asrt.Equal( []string{"https://10.0.0.1:3333/logs"}, - slices.Map(cfg.TypedSpec().Destinations, func(u *url.URL) string { return u.String() }), + xslices.Map(cfg.TypedSpec().Destinations, func(u *url.URL) string { return u.String() }), ) }) } diff --git a/internal/app/machined/pkg/controllers/runtime/machine_status.go b/internal/app/machined/pkg/controllers/runtime/machine_status.go index cb2b834ff..c696bee9b 100644 --- a/internal/app/machined/pkg/controllers/runtime/machine_status.go +++ b/internal/app/machined/pkg/controllers/runtime/machine_status.go @@ -273,13 +273,11 @@ func (ctrl *MachineStatusController) servicesCheck(requiredServices []string) fu return err } - it := safe.IteratorFromList(serviceList) - var problems []string runningServices := map[string]struct{}{} - for it.Next() { + for it := serviceList.Iterator(); it.Next(); { service := it.Value() if !service.TypedSpec().Running { @@ -316,11 +314,9 @@ func (ctrl *MachineStatusController) staticPodsCheck(ctx context.Context, r cont return err } - it := safe.IteratorFromList(staticPodList) - var problems []string - for it.Next() { + for it := staticPodList.Iterator(); it.Next(); { status, err := k8sadapter.StaticPodStatus(it.Value()).Status() if err != nil { return err diff --git a/internal/app/machined/pkg/controllers/runtime/machine_status_publisher.go b/internal/app/machined/pkg/controllers/runtime/machine_status_publisher.go index 4b4f5193d..a377111b5 100644 --- a/internal/app/machined/pkg/controllers/runtime/machine_status_publisher.go +++ b/internal/app/machined/pkg/controllers/runtime/machine_status_publisher.go @@ -11,7 +11,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -69,7 +69,7 @@ func (ctrl *MachineStatusPublisherController) Run(ctx context.Context, r control Stage: machine.MachineStatusEvent_MachineStage(machineStatus.TypedSpec().Stage), Status: &machine.MachineStatusEvent_MachineStatus{ Ready: machineStatus.TypedSpec().Status.Ready, - UnmetConditions: slices.Map(machineStatus.TypedSpec().Status.UnmetConditions, + UnmetConditions: xslices.Map(machineStatus.TypedSpec().Status.UnmetConditions, func(unmetCondition runtime.UnmetCondition) *machine.MachineStatusEvent_MachineStatus_UnmetCondition { return &machine.MachineStatusEvent_MachineStatus_UnmetCondition{ Name: unmetCondition.Name, diff --git a/internal/app/machined/pkg/controllers/runtime/machine_status_test.go b/internal/app/machined/pkg/controllers/runtime/machine_status_test.go index ea77cb1f2..0cb4d9481 100644 --- a/internal/app/machined/pkg/controllers/runtime/machine_status_test.go +++ b/internal/app/machined/pkg/controllers/runtime/machine_status_test.go @@ -10,7 +10,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/resource/rtestutils" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" @@ -66,7 +66,7 @@ func (suite *MachineStatusSuite) assertMachineStatus(stage runtime.MachineStage, asrt.Equal(ready, machineStatus.TypedSpec().Status.Ready) asrt.Equal(unmetConditions, - slices.Map(machineStatus.TypedSpec().Status.UnmetConditions, func(c runtime.UnmetCondition) string { return c.Name })) + xslices.Map(machineStatus.TypedSpec().Status.UnmetConditions, func(c runtime.UnmetCondition) string { return c.Name })) }) } diff --git a/internal/app/machined/pkg/controllers/runtime/maintenance_config.go b/internal/app/machined/pkg/controllers/runtime/maintenance_config.go index e24ba40bc..3d2d1619c 100644 --- a/internal/app/machined/pkg/controllers/runtime/maintenance_config.go +++ b/internal/app/machined/pkg/controllers/runtime/maintenance_config.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -90,7 +90,7 @@ func (ctrl *MaintenanceConfigController) Run(ctx context.Context, r controller.R // * if it exists, find the SideroLink address and listen only on it case err == nil: if nodeAddresses != nil { - sideroLinkAddresses := slices.Filter(nodeAddresses.TypedSpec().IPs(), func(addr netip.Addr) bool { + sideroLinkAddresses := xslices.Filter(nodeAddresses.TypedSpec().IPs(), func(addr netip.Addr) bool { return network.IsULA(addr, network.ULASideroLink) }) diff --git a/internal/app/machined/pkg/controllers/runtime/maintenance_service.go b/internal/app/machined/pkg/controllers/runtime/maintenance_service.go index 44f220e68..af63d1557 100644 --- a/internal/app/machined/pkg/controllers/runtime/maintenance_service.go +++ b/internal/app/machined/pkg/controllers/runtime/maintenance_service.go @@ -18,7 +18,7 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/crypto/x509" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-debug" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -253,7 +253,7 @@ func (ctrl *MaintenanceServiceController) Run(ctx context.Context, r controller. } // print additional information for the user on important state changes - reachableAddresses := slices.Map(cfg.TypedSpec().ReachableAddresses, netip.Addr.String) + reachableAddresses := xslices.Map(cfg.TypedSpec().ReachableAddresses, netip.Addr.String) if !reflect.DeepEqual(lastReachableAddresses, reachableAddresses) { logger.Info("this machine is reachable at:") diff --git a/internal/app/machined/pkg/controllers/siderolink/manager.go b/internal/app/machined/pkg/controllers/siderolink/manager.go index f50d7e571..fda8a55c2 100644 --- a/internal/app/machined/pkg/controllers/siderolink/manager.go +++ b/internal/app/machined/pkg/controllers/siderolink/manager.go @@ -321,7 +321,7 @@ func (ctrl *ManagerController) cleanupLinkSpecs(ctx context.Context, r controlle return err } - for iter := safe.IteratorFromList(list); iter.Next(); { + for iter := list.Iterator(); iter.Next(); { link := iter.Value() if link.Metadata().Owner() != ctrl.Name() { @@ -349,7 +349,7 @@ func (ctrl *ManagerController) cleanupAddressSpecs(ctx context.Context, r contro return err } - for iter := safe.IteratorFromList(list); iter.Next(); { + for iter := list.Iterator(); iter.Next(); { address := iter.Value() if address.Metadata().Owner() != ctrl.Name() { diff --git a/internal/app/machined/pkg/controllers/time/sync_test.go b/internal/app/machined/pkg/controllers/time/sync_test.go index f55531aa2..c72e36efe 100644 --- a/internal/app/machined/pkg/controllers/time/sync_test.go +++ b/internal/app/machined/pkg/controllers/time/sync_test.go @@ -9,6 +9,7 @@ import ( "fmt" "log" "reflect" + "slices" "sync" "testing" "time" @@ -18,7 +19,6 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/cosi-project/runtime/pkg/state/impl/inmem" "github.com/cosi-project/runtime/pkg/state/impl/namespaced" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go index cc9a4f154..56dd2b819 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go @@ -145,7 +145,7 @@ func (p *EquinixMetal) ParseMetadata(ctx context.Context, equinixMetadata *Metad found := false - hostInterfaceIter := safe.IteratorFromList(hostInterfaces) + hostInterfaceIter := hostInterfaces.Iterator() for hostInterfaceIter.Next() { // match using permanent MAC address: diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/metal/url/url.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/metal/url/url.go index 2e2b50e36..05d199c13 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/metal/url/url.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/metal/url/url.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" ) // Populate populates the config download URL with values replacing variables. @@ -57,11 +57,11 @@ func PopulateVariables(ctx context.Context, downloadURL string, st state.State, } } - pendingVariables := slices.ToSet(activeVariables) + pendingVariables := xslices.ToSet(activeVariables) // wait for all variables to be populated for len(pendingVariables) > 0 { - log.Printf("waiting for URL variables: %v", slices.Map(maps.Keys(pendingVariables), func(v *Variable) string { return v.Key })) + log.Printf("waiting for URL variables: %v", xslices.Map(maps.Keys(pendingVariables), func(v *Variable) string { return v.Key })) var ev state.Event diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/nocloud/metadata.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/nocloud/metadata.go index de9d0320d..86edf786a 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/nocloud/metadata.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/nocloud/metadata.go @@ -544,7 +544,7 @@ func (n *Nocloud) applyNetworkConfigV2(config *NetworkConfig, st state.State, ne var availableMACAddresses []string macAddressMatched := false - hostInterfaceIter := safe.IteratorFromList(hostInterfaces) + hostInterfaceIter := hostInterfaces.Iterator() for hostInterfaceIter.Next() { macAddress := hostInterfaceIter.Value().TypedSpec().PermanentAddr.String() diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go index 31f012d3c..93e498620 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go @@ -150,7 +150,7 @@ func (o *Openstack) ParseMetadata( case "phy", "vif", "ovs": linkName := "" - for hostInterfaceIter := safe.IteratorFromList(hostInterfaces); hostInterfaceIter.Next(); { + for hostInterfaceIter := hostInterfaces.Iterator(); hostInterfaceIter.Next(); { if strings.EqualFold(hostInterfaceIter.Value().TypedSpec().PermanentAddr.String(), netLink.Mac) { linkName = hostInterfaceIter.Value().Metadata().ID() diff --git a/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go b/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go index d4a1e4cef..c3a991630 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go @@ -105,7 +105,7 @@ func (v *VMware) ApplyNetworkConfigV2(ctx context.Context, st state.State, confi var availableMACAddresses []string macAddressMatched := false - hostInterfaceIter := safe.IteratorFromList(hostInterfaces) + hostInterfaceIter := hostInterfaces.Iterator() for hostInterfaceIter.Next() { macAddress := hostInterfaceIter.Value().TypedSpec().PermanentAddr.String() diff --git a/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go b/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go index fb15b1877..e68271d41 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go @@ -15,6 +15,7 @@ import ( "log" "os" "path/filepath" + "slices" "strings" "syscall" "time" @@ -27,7 +28,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/opencontainers/runtime-spec/specs-go" pprocfs "github.com/prometheus/procfs" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-blockdevice/blockdevice" "github.com/siderolabs/go-blockdevice/blockdevice/partition/gpt" "github.com/siderolabs/go-blockdevice/blockdevice/util" @@ -1491,7 +1492,7 @@ func ResetSystemDiskPartitions(seq runtime.Sequence, _ any) (runtime.TaskExecuti logger.Printf("finished resetting system disks %s", diskTargets) - bootWiped := slices.Contains(diskTargets, func(t runtime.PartitionTarget) bool { + bootWiped := slices.ContainsFunc(diskTargets, func(t runtime.PartitionTarget) bool { return t.GetLabel() == constants.BootPartitionLabel }) @@ -1565,7 +1566,7 @@ type targets struct { } func (opt targets) GetSystemDiskTargets() []runtime.PartitionTarget { - return slices.Map(opt.systemDiskTargets, func(t *installer.Target) runtime.PartitionTarget { return t }) + return xslices.Map(opt.systemDiskTargets, func(t *installer.Target) runtime.PartitionTarget { return t }) } func parseTargets(r runtime.Runtime, wipeStr string) (targets, error) { diff --git a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go index a8fc5dc21..17d328ecf 100644 --- a/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go +++ b/internal/app/machined/pkg/runtime/v1alpha2/v1alpha2_controller.go @@ -15,7 +15,7 @@ import ( osruntime "github.com/cosi-project/runtime/pkg/controller/runtime" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -406,7 +406,7 @@ func (ctrl *Controller) updateLoggingConfig(ctx context.Context, dests []talosco var prevSenders []runtime.LogSender if len(loggingEndpoints) > 0 { - senders := slices.Map(loggingEndpoints, runtimelogging.NewJSONLines) + senders := xslices.Map(loggingEndpoints, runtimelogging.NewJSONLines) ctrl.logger.Info("enabling JSON logging") prevSenders = ctrl.loggingManager.SetSenders(senders) diff --git a/internal/app/machined/pkg/system/events/events.go b/internal/app/machined/pkg/system/events/events.go index 5c3b1b800..c72b196cb 100644 --- a/internal/app/machined/pkg/system/events/events.go +++ b/internal/app/machined/pkg/system/events/events.go @@ -7,7 +7,7 @@ package events import ( "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/protobuf/types/known/timestamppb" "github.com/siderolabs/talos/internal/app/machined/pkg/system/health" @@ -132,7 +132,7 @@ func (events *ServiceEvents) AsProto(count int) *machineapi.ServiceEvents { } return &machineapi.ServiceEvents{ - Events: slices.Map(eventList, fn), + Events: xslices.Map(eventList, fn), } } diff --git a/internal/app/machined/pkg/system/events/events_test.go b/internal/app/machined/pkg/system/events/events_test.go index c38559170..c7846b8b8 100644 --- a/internal/app/machined/pkg/system/events/events_test.go +++ b/internal/app/machined/pkg/system/events/events_test.go @@ -8,7 +8,7 @@ import ( "strconv" "testing" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/stretchr/testify/suite" "github.com/siderolabs/talos/internal/app/machined/pkg/system/events" @@ -19,7 +19,7 @@ type EventsSuite struct { } func (suite *EventsSuite) assertEvents(expectedMessages []string, evs []events.ServiceEvent) { - messages := slices.Map(evs, func(ev events.ServiceEvent) string { return ev.Message }) + messages := xslices.Map(evs, func(ev events.ServiceEvent) string { return ev.Message }) suite.Assert().Equal(expectedMessages, messages) } diff --git a/internal/app/machined/pkg/system/health/status.go b/internal/app/machined/pkg/system/health/status.go index c939f6076..5956140a7 100644 --- a/internal/app/machined/pkg/system/health/status.go +++ b/internal/app/machined/pkg/system/health/status.go @@ -5,10 +5,10 @@ package health import ( + "slices" "sync" "time" - "github.com/siderolabs/gen/slices" "google.golang.org/protobuf/types/known/timestamppb" machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine" diff --git a/internal/app/machined/pkg/system/service_runner.go b/internal/app/machined/pkg/system/service_runner.go index 2cdb41f73..694b4313c 100644 --- a/internal/app/machined/pkg/system/service_runner.go +++ b/internal/app/machined/pkg/system/service_runner.go @@ -9,10 +9,11 @@ import ( "errors" "fmt" "log" + "slices" "sync" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/app/machined/pkg/runtime" "github.com/siderolabs/talos/internal/app/machined/pkg/system/events" @@ -207,7 +208,7 @@ func (svcrunner *ServiceRunner) Run() error { dependencies := svcrunner.service.DependsOn(svcrunner.runtime) if len(dependencies) > 0 { - serviceConditions := slices.Map(dependencies, func(dep string) conditions.Condition { return WaitForService(StateEventUp, dep) }) + serviceConditions := xslices.Map(dependencies, func(dep string) conditions.Condition { return WaitForService(StateEventUp, dep) }) serviceDependencies := conditions.WaitForAll(serviceConditions...) if condition != nil { diff --git a/internal/app/machined/pkg/system/services/etcd.go b/internal/app/machined/pkg/system/services/etcd.go index 8aeacedea..4767a074a 100644 --- a/internal/app/machined/pkg/system/services/etcd.go +++ b/internal/app/machined/pkg/system/services/etcd.go @@ -24,7 +24,7 @@ import ( "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" clientv3 "go.etcd.io/etcd/client/v3" snapshot "go.etcd.io/etcd/etcdutl/v3/snapshot" @@ -695,7 +695,7 @@ func formatEtcdURL(addr netip.Addr, port int) string { } func getEtcdURLs(addrs []netip.Addr, port int) []string { - return slices.Map(addrs, func(addr netip.Addr) string { + return xslices.Map(addrs, func(addr netip.Addr) string { return formatEtcdURL(addr, port) }) } @@ -705,7 +705,7 @@ func formatEtcdURLs(addrs []netip.Addr, port int) string { } func formatClusterURLs(name string, urls []string) string { - return strings.Join(slices.Map(urls, func(url string) string { + return strings.Join(xslices.Map(urls, func(url string) string { return fmt.Sprintf("%s=%s", name, url) }), ",") } diff --git a/internal/app/machined/pkg/system/system.go b/internal/app/machined/pkg/system/system.go index 9e98fe261..e70a1a153 100644 --- a/internal/app/machined/pkg/system/system.go +++ b/internal/app/machined/pkg/system/system.go @@ -16,7 +16,7 @@ import ( "github.com/hashicorp/go-multierror" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/app/machined/pkg/runtime" "github.com/siderolabs/talos/internal/app/machined/pkg/system/events" @@ -352,7 +352,7 @@ func (s *singleton) stopServices(ctx context.Context, services []string, waitFor go func(svcrunner *ServiceRunner, reverseDeps []string) { defer shutdownWg.Done() - conds := slices.Map(reverseDeps, func(dep string) conditions.Condition { return WaitForService(StateEventDown, dep) }) + conds := xslices.Map(reverseDeps, func(dep string) conditions.Condition { return WaitForService(StateEventDown, dep) }) allDeps := conditions.WaitForAll(conds...) if err := allDeps.Wait(shutdownCtx); err != nil { diff --git a/internal/app/poweroff/main.go b/internal/app/poweroff/main.go index b7bb96455..fe80e2b30 100644 --- a/internal/app/poweroff/main.go +++ b/internal/app/poweroff/main.go @@ -8,8 +8,8 @@ import ( "context" "fmt" "log" + "slices" - "github.com/siderolabs/gen/slices" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" @@ -60,13 +60,13 @@ func Main(args []string) { // ActionFromArgs returns the action to be performed based on the arguments. func ActionFromArgs(args []string) Action { if len(args) > 1 { - if slices.Contains(args[1:], func(s string) bool { + if slices.ContainsFunc(args[1:], func(s string) bool { return s == "--halt" || s == "-H" || s == "--poweroff" || s == "-P" || s == "-p" }) { return Shutdown } - if slices.Contains(args[1:], func(s string) bool { + if slices.ContainsFunc(args[1:], func(s string) bool { return s == "--reboot" || s == "-r" }) { return Reboot diff --git a/internal/app/storaged/server.go b/internal/app/storaged/server.go index 358fe91b7..72268af81 100644 --- a/internal/app/storaged/server.go +++ b/internal/app/storaged/server.go @@ -8,7 +8,7 @@ package internal import ( "context" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" bddisk "github.com/siderolabs/go-blockdevice/blockdevice/util/disk" "google.golang.org/protobuf/types/known/emptypb" @@ -48,7 +48,7 @@ func (s *Server) Disks(ctx context.Context, in *emptypb.Empty) (reply *storage.D } } - diskList := slices.Map(disks, diskConv) + diskList := xslices.Map(disks, diskConv) reply = &storage.DisksResponse{ Messages: []*storage.Disks{ diff --git a/internal/app/wrapperd/main.go b/internal/app/wrapperd/main.go index 8db49359e..8ee646cd4 100644 --- a/internal/app/wrapperd/main.go +++ b/internal/app/wrapperd/main.go @@ -14,7 +14,7 @@ import ( "github.com/containerd/cgroups" cgroupsv2 "github.com/containerd/cgroups/v2" "github.com/containerd/containerd/sys" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "golang.org/x/sys/unix" "kernel.org/pub/linux/libs/security/libcap/cap" @@ -80,7 +80,7 @@ func Main() { log.Printf("kernel.kexec_load_disabled is %v, skipping dropping capabilities", v) } else if droppedCaps != "" { caps := strings.Split(droppedCaps, ",") - dropCaps := slices.Map(caps, func(c string) cap.Value { + dropCaps := xslices.Map(caps, func(c string) cap.Value { capability, capErr := cap.FromName(c) if capErr != nil { log.Fatalf("failed to parse capability: %v", capErr) diff --git a/internal/integration/api/discovery.go b/internal/integration/api/discovery.go index dab7c1e23..ccdbea8b4 100644 --- a/internal/integration/api/discovery.go +++ b/internal/integration/api/discovery.go @@ -16,8 +16,8 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/gen/value" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/integration/base" "github.com/siderolabs/talos/pkg/machinery/client" @@ -80,18 +80,18 @@ func (suite *DiscoverySuite) TestMembers() { // do basic check against discovered nodes for _, expectedNode := range nodes { - nodeAddresses := slices.Map(expectedNode.IPs, func(t netip.Addr) string { + nodeAddresses := xslices.Map(expectedNode.IPs, func(t netip.Addr) string { return t.String() }) found := false for _, member := range members { - memberAddresses := slices.Map(member.TypedSpec().Addresses, func(t netip.Addr) string { + memberAddresses := xslices.Map(member.TypedSpec().Addresses, func(t netip.Addr) string { return t.String() }) - if maps.Contains(slices.ToSet(memberAddresses), nodeAddresses) { + if maps.Contains(xslices.ToSet(memberAddresses), nodeAddresses) { found = true break @@ -110,7 +110,7 @@ func (suite *DiscoverySuite) TestMembers() { continue } - memberByName := slices.ToMap(members, + memberByName := xslices.ToMap(members, func(member *cluster.Member) (string, *cluster.Member) { return member.Metadata().ID(), member }, @@ -283,7 +283,7 @@ func (suite *DiscoverySuite) getMembers(nodeCtx context.Context) []*cluster.Memb items, err := safe.StateListAll[*cluster.Member](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) - it := safe.IteratorFromList(items) + it := items.Iterator() for it.Next() { result = append(result, it.Value()) @@ -316,7 +316,7 @@ func (suite *DiscoverySuite) getKubeSpanPeerSpecs(nodeCtx context.Context) []*ku items, err := safe.StateListAll[*kubespan.PeerSpec](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) - it := safe.IteratorFromList(items) + it := items.Iterator() for it.Next() { result = append(result, it.Value()) @@ -331,7 +331,7 @@ func (suite *DiscoverySuite) getKubeSpanPeerStatuses(nodeCtx context.Context) [] items, err := safe.StateListAll[*kubespan.PeerStatus](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) - it := safe.IteratorFromList(items) + it := items.Iterator() for it.Next() { result = append(result, it.Value()) diff --git a/internal/integration/api/reset.go b/internal/integration/api/reset.go index 5385f747b..30b6ad513 100644 --- a/internal/integration/api/reset.go +++ b/internal/integration/api/reset.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" "github.com/siderolabs/talos/internal/integration/base" @@ -210,8 +210,8 @@ func (suite *ResetSuite) TestResetWithSpecState() { suite.Require().NoError(err) suite.Require().NotEmpty(disks.Messages) - userDisksToWipe := slices.Map( - slices.Filter(disks.Messages[0].Disks, func(disk *storage.Disk) bool { + userDisksToWipe := xslices.Map( + xslices.Filter(disks.Messages[0].Disks, func(disk *storage.Disk) bool { return !disk.SystemDisk }), func(disk *storage.Disk) string { diff --git a/internal/integration/api/resources.go b/internal/integration/api/resources.go index 6d15b5a41..331d212bf 100644 --- a/internal/integration/api/resources.go +++ b/internal/integration/api/resources.go @@ -58,9 +58,7 @@ func (suite *ResourcesSuite) TestListResources() { nsList, err := safe.StateListAll[*meta.Namespace](ctx, suite.Client.COSI) suite.Require().NoError(err) - nsIt := safe.IteratorFromList(nsList) - - for nsIt.Next() { + for nsIt := nsList.Iterator(); nsIt.Next(); { namespaces = append(namespaces, nsIt.Value().Metadata().ID()) } @@ -69,9 +67,7 @@ func (suite *ResourcesSuite) TestListResources() { rdList, err := safe.StateListAll[*meta.ResourceDefinition](ctx, suite.Client.COSI) suite.Require().NoError(err) - rdIt := safe.IteratorFromList(rdList) - - for rdIt.Next() { + for rdIt := rdList.Iterator(); rdIt.Next(); { resourceTypes = append(resourceTypes, rdIt.Value().TypedSpec().Type) } diff --git a/internal/integration/base/cluster.go b/internal/integration/base/cluster.go index 0257591ed..65c20dddf 100644 --- a/internal/integration/base/cluster.go +++ b/internal/integration/base/cluster.go @@ -7,7 +7,7 @@ package base import ( - "github.com/siderolabs/gen/slices" + "slices" "github.com/siderolabs/talos/pkg/cluster" "github.com/siderolabs/talos/pkg/machinery/config/machine" diff --git a/internal/integration/base/k8s.go b/internal/integration/base/k8s.go index c2033be91..6ed5e7593 100644 --- a/internal/integration/base/k8s.go +++ b/internal/integration/base/k8s.go @@ -12,7 +12,7 @@ import ( "fmt" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-retry/retry" corev1 "k8s.io/api/core/v1" eventsv1 "k8s.io/api/events/v1" @@ -165,7 +165,7 @@ func (k8sSuite *K8sSuite) WaitForEventExists(ctx context.Context, ns string, che return retry.Constant(15*time.Second).RetryWithContext(ctx, func(ctx context.Context) error { events, err := k8sSuite.Clientset.EventsV1().Events(ns).List(ctx, metav1.ListOptions{}) - filteredEvents := slices.Filter(events.Items, func(item eventsv1.Event) bool { + filteredEvents := xslices.Filter(events.Items, func(item eventsv1.Event) bool { return checkFn(item) }) diff --git a/internal/integration/cli/dmesg.go b/internal/integration/cli/dmesg.go index 8c8843d6c..37ffe8f19 100644 --- a/internal/integration/cli/dmesg.go +++ b/internal/integration/cli/dmesg.go @@ -12,7 +12,7 @@ import ( "regexp" "strings" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/integration/base" ) @@ -37,7 +37,7 @@ func (suite *DmesgSuite) TestClusterHasOutput() { nodes := suite.DiscoverNodeInternalIPs(context.TODO()) suite.Require().NotEmpty(nodes) - matchers := slices.Map(nodes, func(node string) base.RunOption { + matchers := xslices.Map(nodes, func(node string) base.RunOption { return base.StdoutShouldMatch( regexp.MustCompile(fmt.Sprintf(`(?m)^%s:`, regexp.QuoteMeta(node))), ) diff --git a/internal/integration/provision/k8s_compatibility.go b/internal/integration/provision/k8s_compatibility.go new file mode 100644 index 000000000..78c7b9330 --- /dev/null +++ b/internal/integration/provision/k8s_compatibility.go @@ -0,0 +1,7 @@ +// 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/. + +//go:build integration_provision + +package provision diff --git a/internal/integration/provision/upgrade.go b/internal/integration/provision/upgrade.go index dfdcc81af..b1ce6682b 100644 --- a/internal/integration/provision/upgrade.go +++ b/internal/integration/provision/upgrade.go @@ -16,7 +16,7 @@ import ( "strings" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-blockdevice/blockdevice/encryption" "github.com/siderolabs/go-kubernetes/kubernetes/upgrade" "github.com/siderolabs/go-retry/retry" @@ -525,7 +525,7 @@ func (suite *UpgradeSuite) runE2E(k8sVersion string) { } func (suite *UpgradeSuite) assertSameVersionCluster(client *talosclient.Client, expectedVersion string) { - nodes := slices.Map(suite.Cluster.Info().Nodes, func(node provision.NodeInfo) string { return node.IPs[0].String() }) + nodes := xslices.Map(suite.Cluster.Info().Nodes, func(node provision.NodeInfo) string { return node.IPs[0].String() }) ctx := talosclient.WithNodes(suite.ctx, nodes...) var v *machineapi.VersionResponse diff --git a/internal/pkg/configuration/configuration.go b/internal/pkg/configuration/configuration.go index d428726d7..e588ba8c1 100644 --- a/internal/pkg/configuration/configuration.go +++ b/internal/pkg/configuration/configuration.go @@ -12,7 +12,7 @@ import ( "os" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/talos/pkg/machinery/api/machine" @@ -57,7 +57,7 @@ func Generate(ctx context.Context, in *machine.GenerateConfigurationRequest) (re DeviceCIDR: device.Cidr, DeviceDHCP: pointer.To(device.Dhcp), DeviceIgnore: pointer.To(device.Ignore), - DeviceRoutes: slices.Map(device.Routes, func(route *machine.RouteConfig) *v1alpha1.Route { + DeviceRoutes: xslices.Map(device.Routes, func(route *machine.RouteConfig) *v1alpha1.Route { return &v1alpha1.Route{ RouteNetwork: route.Network, RouteGateway: route.Gateway, diff --git a/internal/pkg/dashboard/apidata/node.go b/internal/pkg/dashboard/apidata/node.go index 0017bfbba..373cfa85e 100644 --- a/internal/pkg/dashboard/apidata/node.go +++ b/internal/pkg/dashboard/apidata/node.go @@ -5,7 +5,7 @@ package apidata import ( - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/api/machine" ) @@ -198,11 +198,11 @@ func (node *Node) UpdateDiff(old *Node) { } if old.Processes != nil { - index := slices.ToMap(old.Processes.GetProcesses(), func(proc *machine.ProcessInfo) (int32, *machine.ProcessInfo) { + index := xslices.ToMap(old.Processes.GetProcesses(), func(proc *machine.ProcessInfo) (int32, *machine.ProcessInfo) { return proc.Pid, proc }) - node.ProcsDiff = slices.ToMap(node.Processes.GetProcesses(), func(proc *machine.ProcessInfo) (int32, *machine.ProcessInfo) { + node.ProcsDiff = xslices.ToMap(node.Processes.GetProcesses(), func(proc *machine.ProcessInfo) (int32, *machine.ProcessInfo) { return proc.Pid, procDiff(index[proc.Pid], proc) }) } diff --git a/internal/pkg/dashboard/components/components.go b/internal/pkg/dashboard/components/components.go index a59be3939..b75dff1ef 100644 --- a/internal/pkg/dashboard/components/components.go +++ b/internal/pkg/dashboard/components/components.go @@ -9,7 +9,7 @@ import ( "fmt" "strings" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" ) const ( @@ -38,7 +38,7 @@ func (fg *fieldGroup) String() string { width := fg.maxFieldNameLength() return strings.Join( - slices.Map(fg.fields, func(t field) string { + xslices.Map(fg.fields, func(t field) string { return t.render(width) }), "\n", diff --git a/internal/pkg/dashboard/components/graphs.go b/internal/pkg/dashboard/components/graphs.go index 5d1b385fc..c006894a1 100644 --- a/internal/pkg/dashboard/components/graphs.go +++ b/internal/pkg/dashboard/components/graphs.go @@ -6,7 +6,7 @@ package components import ( "github.com/gizak/termui/v3/widgets" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/pkg/dashboard/apidata" ) @@ -27,7 +27,7 @@ func NewBaseGraph(title string, labels []string) *BaseGraph { widget.DataLabels = labels widget.ShowAxes = false // TODO: looks to be a bug as it requires at least 2 points - widget.Data = slices.Map(labels, func(label string) []float64 { return []float64{0, 0} }) + widget.Data = xslices.Map(labels, func(label string) []float64 { return []float64{0, 0} }) return widget } diff --git a/internal/pkg/dashboard/components/networkinfo.go b/internal/pkg/dashboard/components/networkinfo.go index 8609750eb..96feafc15 100644 --- a/internal/pkg/dashboard/components/networkinfo.go +++ b/internal/pkg/dashboard/components/networkinfo.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/rivo/tview" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/pkg/dashboard/resourcedata" "github.com/siderolabs/talos/pkg/machinery/resources/k8s" @@ -197,7 +197,7 @@ func (widget *NetworkInfo) setAddresses(data resourcedata.Data, nodeAddress *net return notAvailable } - strs := slices.Map(res.TypedSpec().Addresses, func(prefix netip.Prefix) string { + strs := xslices.Map(res.TypedSpec().Addresses, func(prefix netip.Prefix) string { return prefix.String() }) @@ -245,7 +245,7 @@ func (widget *NetworkInfo) gateway(statuses []*network.RouteStatus) string { } func (widget *NetworkInfo) resolvers(status *network.ResolverStatus) string { - strs := slices.Map(status.TypedSpec().DNSServers, func(t netip.Addr) string { + strs := xslices.Map(status.TypedSpec().DNSServers, func(t netip.Addr) string { return t.String() }) diff --git a/internal/pkg/dashboard/dashboard.go b/internal/pkg/dashboard/dashboard.go index d0f050f75..ce0c75bf2 100644 --- a/internal/pkg/dashboard/dashboard.go +++ b/internal/pkg/dashboard/dashboard.go @@ -17,7 +17,7 @@ import ( "github.com/gizak/termui/v3" "github.com/rivo/tview" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "golang.org/x/sync/errgroup" "github.com/siderolabs/talos/internal/pkg/dashboard/apidata" @@ -160,11 +160,11 @@ func buildDashboard(ctx context.Context, cli *client.Client, opts ...Option) (*D return nil, err } - screenKeyToName := slices.ToMap(dashboard.screenConfigs, func(t screenConfig) (string, string) { + screenKeyToName := xslices.ToMap(dashboard.screenConfigs, func(t screenConfig) (string, string) { return t.screenKey, string(t.screen) }) - screenConfigByKeyCode := slices.ToMap(dashboard.screenConfigs, func(config screenConfig) (tcell.Key, screenConfig) { + screenConfigByKeyCode := xslices.ToMap(dashboard.screenConfigs, func(config screenConfig) (tcell.Key, screenConfig) { return config.keyCode, config }) diff --git a/internal/pkg/discovery/registry/kubernetes.go b/internal/pkg/discovery/registry/kubernetes.go index 526440542..6ac1775bd 100644 --- a/internal/pkg/discovery/registry/kubernetes.go +++ b/internal/pkg/discovery/registry/kubernetes.go @@ -12,8 +12,8 @@ import ( "strings" "time" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/gen/value" + "github.com/siderolabs/gen/xslices" "go.uber.org/zap" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -124,15 +124,15 @@ func AffiliateFromNode(node *v1.Node) *cluster.AffiliateSpec { } func ipsToString(in []netip.Addr) string { - return strings.Join(slices.Map(in, netip.Addr.String), ",") + return strings.Join(xslices.Map(in, netip.Addr.String), ",") } func ipPrefixesToString(in []netip.Prefix) string { - return strings.Join(slices.Map(in, netip.Prefix.String), ",") + return strings.Join(xslices.Map(in, netip.Prefix.String), ",") } func ipPortsToString(in []netip.AddrPort) string { - return strings.Join(slices.Map(in, netip.AddrPort.String), ",") + return strings.Join(xslices.Map(in, netip.AddrPort.String), ",") } func parseIPs(in string) []netip.Addr { diff --git a/internal/pkg/etcd/certs.go b/internal/pkg/etcd/certs.go index 492596efb..1db9f57be 100644 --- a/internal/pkg/etcd/certs.go +++ b/internal/pkg/etcd/certs.go @@ -12,7 +12,7 @@ import ( "time" "github.com/siderolabs/crypto/x509" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/resources/network" ) @@ -57,7 +57,7 @@ func (gen *CertificateGenerator) buildOptions(autoSANs, includeLocalhost bool) [ result = append(result, x509.CommonName(hostname), x509.DNSNames(dnsNames), - x509.IPAddresses(slices.Map(addresses, func(addr netip.Addr) net.IP { + x509.IPAddresses(xslices.Map(addresses, func(addr netip.Addr) net.IP { return addr.AsSlice() })), ) diff --git a/internal/pkg/etcd/endpoints.go b/internal/pkg/etcd/endpoints.go index 120a4f7bf..cc0d4136c 100644 --- a/internal/pkg/etcd/endpoints.go +++ b/internal/pkg/etcd/endpoints.go @@ -25,7 +25,7 @@ func GetEndpoints(ctx context.Context, resources state.State) ([]string, error) return nil, fmt.Errorf("error getting endpoints resources: %w", err) } - iter := safe.IteratorFromList(endpointResources) + iter := endpointResources.Iterator() var endpointAddrs k8s.EndpointList diff --git a/internal/pkg/logind/logind.go b/internal/pkg/logind/logind.go index 6b0db1bfa..f8545ae6a 100644 --- a/internal/pkg/logind/logind.go +++ b/internal/pkg/logind/logind.go @@ -6,13 +6,13 @@ package logind import ( + "slices" "sync" "syscall" "time" "github.com/godbus/dbus/v5" "github.com/godbus/dbus/v5/prop" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/talos/pkg/machinery/constants" ) diff --git a/internal/pkg/meta/internal/adv/talos/talos.go b/internal/pkg/meta/internal/adv/talos/talos.go index ed4cff9a3..f4bb3a8ee 100644 --- a/internal/pkg/meta/internal/adv/talos/talos.go +++ b/internal/pkg/meta/internal/adv/talos/talos.go @@ -11,9 +11,10 @@ import ( "encoding/binary" "fmt" "io" + "slices" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/pkg/meta/internal/adv" ) @@ -190,7 +191,7 @@ func (a *ADV) ReadTagBytes(t uint8) (val []byte, ok bool) { // ListTags to get list of tags. func (a *ADV) ListTags() (tags []uint8) { - return slices.Map(maps.Keys(a.Tags), func(t Tag) uint8 { return uint8(t) }) + return xslices.Map(maps.Keys(a.Tags), func(t Tag) uint8 { return uint8(t) }) } // SetTag to set tag value. diff --git a/internal/pkg/meta/internal/adv/talos/talos_test.go b/internal/pkg/meta/internal/adv/talos/talos_test.go index c1419a0e2..8a1235691 100644 --- a/internal/pkg/meta/internal/adv/talos/talos_test.go +++ b/internal/pkg/meta/internal/adv/talos/talos_test.go @@ -6,10 +6,10 @@ package talos_test import ( "bytes" + "slices" "sort" "testing" - "github.com/siderolabs/gen/slices" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/internal/pkg/meta/meta_test.go b/internal/pkg/meta/meta_test.go index d258c46bd..4c6509e28 100644 --- a/internal/pkg/meta/meta_test.go +++ b/internal/pkg/meta/meta_test.go @@ -91,7 +91,7 @@ func TestFlow(t *testing.T) { list, err := safe.StateList[*runtime.MetaKey](ctx, st, runtime.NewMetaKey(runtime.NamespaceName, "").Metadata()) require.NoError(t, err) - for iter := safe.IteratorFromList(list); iter.Next(); { + for iter := list.Iterator(); iter.Next(); { assert.Equal(t, "0x08", iter.Value().Metadata().ID()) assert.Equal(t, "install-fast", iter.Value().TypedSpec().Value) } diff --git a/internal/pkg/ntp/ntp.go b/internal/pkg/ntp/ntp.go index c115d5bd1..11b58c737 100644 --- a/internal/pkg/ntp/ntp.go +++ b/internal/pkg/ntp/ntp.go @@ -12,11 +12,11 @@ import ( "math/bits" "net" "reflect" + "slices" "sync" "time" "github.com/beevik/ntp" - "github.com/siderolabs/gen/slices" "github.com/u-root/u-root/pkg/rtc" "go.uber.org/zap" "go.uber.org/zap/zapcore" diff --git a/internal/pkg/secureboot/uki/generate.go b/internal/pkg/secureboot/uki/generate.go index 5a0caa09b..6adeee866 100644 --- a/internal/pkg/secureboot/uki/generate.go +++ b/internal/pkg/secureboot/uki/generate.go @@ -9,7 +9,7 @@ import ( "os" "path/filepath" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/internal/pkg/secureboot" "github.com/siderolabs/talos/internal/pkg/secureboot/measure" @@ -168,8 +168,8 @@ func (builder *Builder) generateKernel() error { } func (builder *Builder) generatePCRSig() error { - sectionsData := slices.ToMap( - slices.Filter(builder.sections, + sectionsData := xslices.ToMap( + xslices.Filter(builder.sections, func(s section) bool { return s.Measure }, diff --git a/internal/pkg/tui/installer/connection.go b/internal/pkg/tui/installer/connection.go index 62b8f9d02..b34b283d5 100644 --- a/internal/pkg/tui/installer/connection.go +++ b/internal/pkg/tui/installer/connection.go @@ -99,7 +99,7 @@ func (c *Connection) Links() ([]Link, error) { return nil, err } - it := safe.IteratorFromList(items) + it := items.Iterator() var links []Link diff --git a/pkg/archiver/tar.go b/pkg/archiver/tar.go index 684b9b77e..8230ee752 100644 --- a/pkg/archiver/tar.go +++ b/pkg/archiver/tar.go @@ -13,10 +13,10 @@ import ( "io" "log" "os" + "slices" "syscall" multierror "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" ) // Tar creates .tar archive and writes it to output for every item in paths channel. diff --git a/pkg/chunker/stream/stream.go b/pkg/chunker/stream/stream.go index 72a23116e..3fbd62b60 100644 --- a/pkg/chunker/stream/stream.go +++ b/pkg/chunker/stream/stream.go @@ -9,7 +9,7 @@ import ( "fmt" "io" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/chunker" ) @@ -89,7 +89,7 @@ func (c *Stream) Read() <-chan []byte { if n != 0 { // Copy the buffer since we will modify it in the next loop. - b := slices.Copy(buf, n) + b := xslices.CopyN(buf, n) select { case <-c.ctx.Done(): diff --git a/pkg/cluster/check/check.go b/pkg/cluster/check/check.go index 8b83f1929..c012cf581 100644 --- a/pkg/cluster/check/check.go +++ b/pkg/cluster/check/check.go @@ -10,7 +10,7 @@ import ( "net/netip" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/cluster" "github.com/siderolabs/talos/pkg/conditions" @@ -86,13 +86,13 @@ func Wait(ctx context.Context, cluster ClusterInfo, checks []ClusterCheck, repor } func flatMapNodeInfosToIPs(nodes []cluster.NodeInfo) []netip.Addr { - return slices.FlatMap(nodes, func(node cluster.NodeInfo) []netip.Addr { return node.IPs }) + return xslices.FlatMap(nodes, func(node cluster.NodeInfo) []netip.Addr { return node.IPs }) } func mapNodeInfosToInternalIPs(nodes []cluster.NodeInfo) []netip.Addr { - return slices.Map(nodes, func(node cluster.NodeInfo) netip.Addr { return node.InternalIP }) + return xslices.Map(nodes, func(node cluster.NodeInfo) netip.Addr { return node.InternalIP }) } func mapIPsToStrings(input []netip.Addr) []string { - return slices.Map(input, func(ip netip.Addr) string { return ip.String() }) + return xslices.Map(input, func(ip netip.Addr) string { return ip.String() }) } diff --git a/pkg/cluster/check/discovery.go b/pkg/cluster/check/discovery.go index 18e5ed38a..cf52eb8e0 100644 --- a/pkg/cluster/check/discovery.go +++ b/pkg/cluster/check/discovery.go @@ -9,7 +9,7 @@ import ( "net/netip" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/cluster" "github.com/siderolabs/talos/pkg/machinery/config/machine" @@ -39,7 +39,7 @@ func NewDiscoveredClusterInfo(members []*clussterres.Member) (cluster.Info, erro return nil, err } - nodes := slices.FlatMap(maps.Values(m), func(t []cluster.NodeInfo) []cluster.NodeInfo { return t }) + nodes := xslices.FlatMap(maps.Values(m), func(t []cluster.NodeInfo) []cluster.NodeInfo { return t }) return &DiscoveredClusterInfo{ nodes: nodes, @@ -67,7 +67,7 @@ func membersToNodeInfoMap(members []*clussterres.Member) (map[machine.Type][]clu } func memberToNodeInfo(member *clussterres.Member) (cluster.NodeInfo, error) { - ips, err := stringsToNetipAddrs(slices.Map(member.TypedSpec().Addresses, func(ip netip.Addr) string { + ips, err := stringsToNetipAddrs(xslices.Map(member.TypedSpec().Addresses, func(ip netip.Addr) string { return ip.String() })) if err != nil { diff --git a/pkg/cluster/check/etcd.go b/pkg/cluster/check/etcd.go index a727aee37..b3c5d8f53 100644 --- a/pkg/cluster/check/etcd.go +++ b/pkg/cluster/check/etcd.go @@ -12,7 +12,7 @@ import ( "sort" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/cluster" machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine" @@ -73,7 +73,7 @@ func EtcdConsistentAssertion(ctx context.Context, cl ClusterInfo) error { if len(message.Members) != len(knownMembers) { expected := maps.ToSlice(knownMembers, func(k data, v struct{}) string { return k.hostname }) - actual := slices.Map(message.Members, (*machineapi.EtcdMember).GetHostname) + actual := xslices.Map(message.Members, (*machineapi.EtcdMember).GetHostname) return fmt.Errorf("%s: expected to have %v members, got %v", node, expected, actual) } @@ -120,7 +120,7 @@ func EtcdControlPlaneNodesAssertion(ctx context.Context, cl ClusterInfo) error { } controlPlaneNodeIPs := mapIPsToStrings(flatMapNodeInfosToIPs(nodes)) - if !maps.Contains(slices.ToSet(controlPlaneNodeIPs), memberIPs) { + if !maps.Contains(xslices.ToSet(controlPlaneNodeIPs), memberIPs) { return fmt.Errorf("etcd member ips %q are not subset of control plane node ips %q", memberIPs, controlPlaneNodeIPs) } diff --git a/pkg/cluster/check/kubernetes.go b/pkg/cluster/check/kubernetes.go index 7b24df49b..90046490a 100644 --- a/pkg/cluster/check/kubernetes.go +++ b/pkg/cluster/check/kubernetes.go @@ -411,7 +411,7 @@ func K8sControlPlaneStaticPods(ctx context.Context, cl ClusterInfo) error { return fmt.Errorf("error listing static pods on node %s: %w", node.InternalIP, err) } - for iter := safe.IteratorFromList(items); iter.Next(); { + for iter := items.Iterator(); iter.Next(); { for expectedStaticPod := range expectedStaticPods { if strings.HasPrefix(iter.Value().Metadata().ID(), expectedStaticPod) { delete(expectedStaticPods, expectedStaticPod) diff --git a/pkg/cluster/check/nodes.go b/pkg/cluster/check/nodes.go index 2b0e0a5bf..975ecdae1 100644 --- a/pkg/cluster/check/nodes.go +++ b/pkg/cluster/check/nodes.go @@ -8,12 +8,12 @@ import ( "context" "errors" fmt "fmt" + "slices" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/dustin/go-humanize" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" "google.golang.org/grpc/codes" "github.com/siderolabs/talos/pkg/machinery/client" @@ -218,7 +218,7 @@ func getEphemeralPartitionData(ctx context.Context, state state.State, nodeIP st return mountData{}, fmt.Errorf("error listing mounts for node %q: %w", nodeIP, err) } - for it := safe.IteratorFromList(items); it.Next(); { + for it := items.Iterator(); it.Next(); { mount := it.Value() mountID := mount.Metadata().ID() diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 9ef9a2fad..cd984353c 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -13,7 +13,7 @@ import ( "sort" "github.com/siderolabs/gen/maps" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" @@ -99,14 +99,14 @@ func IPToNodeInfo(ip string) (*NodeInfo, error) { // // Each expectedNode IPs should have a non-empty intersection with actualNode IPs. func NodesMatch(expected, actual []NodeInfo) error { - actualNodes := slices.ToMap(actual, func(n NodeInfo) (*NodeInfo, struct{}) { return &n, struct{}{} }) + actualNodes := xslices.ToMap(actual, func(n NodeInfo) (*NodeInfo, struct{}) { return &n, struct{}{} }) for _, expectedNodeInfo := range expected { found := false for actualNodeInfo := range actualNodes { // expectedNodeInfo.IPs intersection with actualNodeInfo.IPs is not empty - if len(maps.Intersect(slices.ToSet(actualNodeInfo.IPs), slices.ToSet(expectedNodeInfo.IPs))) > 0 { + if len(maps.Intersect(xslices.ToSet(actualNodeInfo.IPs), xslices.ToSet(expectedNodeInfo.IPs))) > 0 { delete(actualNodes, actualNodeInfo) found = true @@ -121,7 +121,7 @@ func NodesMatch(expected, actual []NodeInfo) error { } if len(actualNodes) > 0 { - unexpectedIPs := slices.FlatMap(maps.Keys(actualNodes), func(n *NodeInfo) []netip.Addr { return n.IPs }) + unexpectedIPs := xslices.FlatMap(maps.Keys(actualNodes), func(n *NodeInfo) []netip.Addr { return n.IPs }) sort.Slice(unexpectedIPs, func(i, j int) bool { return unexpectedIPs[i].Less(unexpectedIPs[j]) }) diff --git a/pkg/cluster/kubernetes/kubelet.go b/pkg/cluster/kubernetes/kubelet.go index 86cea3a53..14904ef53 100644 --- a/pkg/cluster/kubernetes/kubelet.go +++ b/pkg/cluster/kubernetes/kubelet.go @@ -8,13 +8,13 @@ import ( "context" "errors" "fmt" + "slices" "strings" "time" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-retry/retry" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/cluster/support.go b/pkg/cluster/support.go index c107a3a40..8049b48f8 100644 --- a/pkg/cluster/support.go +++ b/pkg/cluster/support.go @@ -405,7 +405,7 @@ func getResources(ctx context.Context, c *client.Client) ([]nodeCollector, error return nil, err } - it := safe.IteratorFromList(rds) + it := rds.Iterator() cols := []nodeCollector{} diff --git a/pkg/conditions/files.go b/pkg/conditions/files.go index 914b409d4..4f22c9008 100644 --- a/pkg/conditions/files.go +++ b/pkg/conditions/files.go @@ -10,7 +10,7 @@ import ( "os" "time" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" ) type file string @@ -49,7 +49,7 @@ func WaitForFileToExist(filename string) Condition { // WaitForFilesToExist is a service condition that will wait for the existence of all the files. func WaitForFilesToExist(filenames ...string) Condition { - conditions := slices.Map(filenames, WaitForFileToExist) + conditions := xslices.Map(filenames, WaitForFileToExist) return WaitForAll(conditions...) } diff --git a/pkg/machinery/client/connection.go b/pkg/machinery/client/connection.go index 6500cc71b..55782f9fc 100644 --- a/pkg/machinery/client/connection.go +++ b/pkg/machinery/client/connection.go @@ -14,7 +14,7 @@ import ( "net/url" "strings" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/grpc" "google.golang.org/grpc/credentials" @@ -191,7 +191,7 @@ func CertificateFromConfigContext(context *clientconfig.Context) (*tls.Certifica } func reduceURLsToAddresses(endpoints []string) []string { - return slices.Map(endpoints, func(endpoint string) string { + return xslices.Map(endpoints, func(endpoint string) string { u, err := url.Parse(endpoint) if err != nil { return endpoint diff --git a/pkg/machinery/client/resolver/roundrobin.go b/pkg/machinery/client/resolver/roundrobin.go index a40ea3e39..3a20521aa 100644 --- a/pkg/machinery/client/resolver/roundrobin.go +++ b/pkg/machinery/client/resolver/roundrobin.go @@ -10,7 +10,7 @@ import ( "strconv" "strings" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/grpc/resolver" ) @@ -55,7 +55,7 @@ type roundRobinResolver struct { // EnsureEndpointsHavePorts returns the list of endpoints with default port appended to those addresses that don't have a port. func EnsureEndpointsHavePorts(endpoints []string, defaultPort int) []string { - return slices.Map(endpoints, func(endpoint string) string { + return xslices.Map(endpoints, func(endpoint string) string { _, _, err := net.SplitHostPort(endpoint) if err != nil { return net.JoinHostPort(endpoint, strconv.Itoa(defaultPort)) diff --git a/pkg/machinery/client/resources.go b/pkg/machinery/client/resources.go index ac3389ef9..d48dabc43 100644 --- a/pkg/machinery/client/resources.go +++ b/pkg/machinery/client/resources.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/resource/meta" "github.com/cosi-project/runtime/pkg/safe" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -26,9 +26,7 @@ func (c *Client) ResolveResourceKind(ctx context.Context, resourceNamespace *res matched := []*meta.ResourceDefinition{} - it := safe.IteratorFromList(registeredResources) - - for it.Next() { + for it := registeredResources.Iterator(); it.Next(); { rd := it.Value() if strings.EqualFold(rd.Metadata().ID(), resourceType) { @@ -56,7 +54,7 @@ func (c *Client) ResolveResourceKind(ctx context.Context, resourceNamespace *res return matched[0], nil case len(matched) > 1: - matchedTypes := slices.Map(matched, func(rd *meta.ResourceDefinition) string { return rd.Metadata().ID() }) + matchedTypes := xslices.Map(matched, func(rd *meta.ResourceDefinition) string { return rd.Metadata().ID() }) return nil, status.Errorf(codes.InvalidArgument, fmt.Sprintf("resource type %q is ambiguous: %v", resourceType, matchedTypes)) default: diff --git a/pkg/machinery/config/configpatcher/strategic.go b/pkg/machinery/config/configpatcher/strategic.go index d8c29f367..cd897342c 100644 --- a/pkg/machinery/config/configpatcher/strategic.go +++ b/pkg/machinery/config/configpatcher/strategic.go @@ -5,7 +5,7 @@ package configpatcher import ( - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" coreconfig "github.com/siderolabs/talos/pkg/machinery/config" "github.com/siderolabs/talos/pkg/machinery/config/config" @@ -37,7 +37,7 @@ func StrategicMerge(cfg coreconfig.Provider, patch StrategicMergePatch) (corecon return id } - leftIndex := slices.ToMap(left, func(d config.Document) (string, config.Document) { + leftIndex := xslices.ToMap(left, func(d config.Document) (string, config.Document) { return documentID(d), d }) diff --git a/pkg/machinery/config/container/container.go b/pkg/machinery/config/container/container.go index 776d6b70f..37022ec41 100644 --- a/pkg/machinery/config/container/container.go +++ b/pkg/machinery/config/container/container.go @@ -8,9 +8,10 @@ package container import ( "bytes" "fmt" + "slices" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" coreconfig "github.com/siderolabs/talos/pkg/machinery/config" "github.com/siderolabs/talos/pkg/machinery/config/config" @@ -91,7 +92,7 @@ func NewV1Alpha1(config *v1alpha1.Config) *Container { func (container *Container) Clone() coreconfig.Provider { return &Container{ v1alpha1Config: container.v1alpha1Config.DeepCopy(), - documents: slices.Map(container.documents, config.Document.Clone), + documents: xslices.Map(container.documents, config.Document.Clone), } } diff --git a/pkg/machinery/config/generate/generate.go b/pkg/machinery/config/generate/generate.go index b306b8ef9..24a016890 100644 --- a/pkg/machinery/config/generate/generate.go +++ b/pkg/machinery/config/generate/generate.go @@ -11,9 +11,9 @@ import ( "errors" "net/netip" "net/url" + "slices" "time" - "github.com/siderolabs/gen/slices" "github.com/siderolabs/go-pointer" coreconfig "github.com/siderolabs/talos/pkg/machinery/config" diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_apiserverconfig.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_apiserverconfig.go index 8cb9a372f..4b714a916 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_apiserverconfig.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_apiserverconfig.go @@ -7,7 +7,7 @@ package v1alpha1 import ( "fmt" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" "github.com/siderolabs/talos/pkg/machinery/config/config" @@ -45,7 +45,7 @@ func (a *APIServerConfig) ExtraArgs() map[string]string { // ExtraVolumes implements the config.APIServer interface. func (a *APIServerConfig) ExtraVolumes() []config.VolumeMount { - return slices.Map(a.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) + return xslices.Map(a.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) } // Env implements the config.APIServer interface. @@ -60,7 +60,7 @@ func (a *APIServerConfig) DisablePodSecurityPolicy() bool { // AdmissionControl implements the config.APIServer interface. func (a *APIServerConfig) AdmissionControl() []config.AdmissionPlugin { - return slices.Map(a.AdmissionControlConfig, func(c *AdmissionPluginConfig) config.AdmissionPlugin { return c }) + return xslices.Map(a.AdmissionControlConfig, func(c *AdmissionPluginConfig) config.AdmissionPlugin { return c }) } // AuditPolicy implements the config.APIServer interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_clusterconfig.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_clusterconfig.go index 945b7efd7..078c2c2a6 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_clusterconfig.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_clusterconfig.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/siderolabs/crypto/x509" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-pointer" sideronet "github.com/siderolabs/net" @@ -159,7 +159,7 @@ func (c *ClusterConfig) ExtraManifestHeaderMap() map[string]string { // InlineManifests implements the config.ClusterConfig interface. func (c *ClusterConfig) InlineManifests() []config.InlineManifest { - return slices.Map(c.ClusterInlineManifests, func(m ClusterInlineManifest) config.InlineManifest { return m }) + return xslices.Map(c.ClusterInlineManifests, func(m ClusterInlineManifest) config.InlineManifest { return m }) } // AdminKubeconfig implements the config.ClusterConfig interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_controllermanagerconfig.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_controllermanagerconfig.go index 05b1ac280..75d22e1bd 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_controllermanagerconfig.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_controllermanagerconfig.go @@ -7,7 +7,7 @@ package v1alpha1 import ( "fmt" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/config/config" "github.com/siderolabs/talos/pkg/machinery/constants" @@ -31,7 +31,7 @@ func (c *ControllerManagerConfig) ExtraArgs() map[string]string { // ExtraVolumes implements the config.ControllerManager interface. func (c *ControllerManagerConfig) ExtraVolumes() []config.VolumeMount { - return slices.Map(c.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) + return xslices.Map(c.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) } // Env implements the config.ControllerManager interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_kernel.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_kernel.go index a7b91d90d..d8d07d792 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_kernel.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_kernel.go @@ -5,14 +5,14 @@ package v1alpha1 import ( - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/config/config" ) // Modules implements config.Kernel interface. func (kc *KernelConfig) Modules() []config.KernelModule { - return slices.Map(kc.KernelModules, func(kmc *KernelModuleConfig) config.KernelModule { return kmc }) + return xslices.Map(kc.KernelModules, func(kmc *KernelModuleConfig) config.KernelModule { return kmc }) } // Name implements config.KernelModule interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_logging.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_logging.go index 5cbb06456..75f799c0a 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_logging.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_logging.go @@ -9,7 +9,7 @@ import ( "net/url" "github.com/hashicorp/go-multierror" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/config/config" "github.com/siderolabs/talos/pkg/machinery/constants" @@ -50,7 +50,7 @@ func (lc *LoggingConfig) Validate() error { // Destinations implements config.Logging interface. func (lc *LoggingConfig) Destinations() []config.LoggingDestination { - return slices.Map(lc.LoggingDestinations, func(ld LoggingDestination) config.LoggingDestination { return ld }) + return xslices.Map(lc.LoggingDestinations, func(ld LoggingDestination) config.LoggingDestination { return ld }) } // Endpoint implements config.LoggingDestination interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go index ed96387ef..5f93a6e1b 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go @@ -9,12 +9,13 @@ import ( stdx509 "crypto/x509" "fmt" "os" + "slices" "strings" "time" specs "github.com/opencontainers/runtime-spec/specs-go" "github.com/siderolabs/crypto/x509" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-blockdevice/blockdevice/encryption" "github.com/siderolabs/go-blockdevice/blockdevice/util/disk" "github.com/siderolabs/go-pointer" @@ -80,7 +81,7 @@ func (c *Config) Machine() config.MachineConfig { // SeccompProfiles implements the config.Provider interface. func (m *MachineConfig) SeccompProfiles() []config.SeccompProfile { - return slices.Map(m.MachineSeccompProfiles, func(m *MachineSeccompProfile) config.SeccompProfile { return m }) + return xslices.Map(m.MachineSeccompProfiles, func(m *MachineSeccompProfile) config.SeccompProfile { return m }) } // Name implements the config.Provider interface. @@ -174,7 +175,7 @@ func (m *MachineConfig) Security() config.Security { // Disks implements the config.Provider interface. func (m *MachineConfig) Disks() []config.Disk { - return slices.Map(m.MachineDisks, func(d *MachineDisk) config.Disk { return d }) + return xslices.Map(m.MachineDisks, func(d *MachineDisk) config.Disk { return d }) } // Network implements the config.Provider interface. @@ -206,7 +207,7 @@ func (m *MachineConfig) Controlplane() config.MachineControlPlane { // Pods implements the config.Provider interface. func (m *MachineConfig) Pods() []map[string]interface{} { - return slices.Map(m.MachinePods, func(u Unstructured) map[string]interface{} { return u.Object }) + return xslices.Map(m.MachinePods, func(u Unstructured) map[string]interface{} { return u.Object }) } // ControllerManager implements the config.Provider interface. @@ -253,7 +254,7 @@ func (m *MachineConfig) Env() config.Env { // Files implements the config.Provider interface. func (m *MachineConfig) Files() ([]config.File, error) { - return slices.Map(m.MachineFiles, func(f *MachineFile) config.File { return f }), nil + return xslices.Map(m.MachineFiles, func(f *MachineFile) config.File { return f }), nil } // Type implements the config.Provider interface. @@ -382,7 +383,7 @@ func (k *KubeletConfig) ExtraArgs() map[string]string { // ExtraMounts implements the config.Provider interface. func (k *KubeletConfig) ExtraMounts() []specs.Mount { - return slices.Map(k.KubeletExtraMounts, func(m ExtraMount) specs.Mount { return m.Mount }) + return xslices.Map(k.KubeletExtraMounts, func(m ExtraMount) specs.Mount { return m.Mount }) } // ExtraConfig implements the config.Provider interface. @@ -536,7 +537,7 @@ func (n *NetworkConfig) DisableSearchDomain() bool { // Devices implements the config.Provider interface. func (n *NetworkConfig) Devices() []config.Device { - return slices.Map(n.NetworkInterfaces, func(d *Device) config.Device { return d }) + return xslices.Map(n.NetworkInterfaces, func(d *Device) config.Device { return d }) } // getDevice adds or returns existing Device by name. @@ -563,7 +564,7 @@ func (n *NetworkConfig) Resolvers() []string { // ExtraHosts implements the config.Provider interface. func (n *NetworkConfig) ExtraHosts() []config.ExtraHost { - return slices.Map(n.ExtraHostEntries, func(e *ExtraHost) config.ExtraHost { return e }) + return xslices.Map(n.ExtraHostEntries, func(e *ExtraHost) config.ExtraHost { return e }) } // KubeSpan implements the config.Provider interface. @@ -604,7 +605,7 @@ func (d *Device) Addresses() []string { // Routes implements the MachineNetwork interface. func (d *Device) Routes() []config.Route { - return slices.Map(d.DeviceRoutes, func(r *Route) config.Route { return r }) + return xslices.Map(d.DeviceRoutes, func(r *Route) config.Route { return r }) } // Bond implements the MachineNetwork interface. @@ -627,7 +628,7 @@ func (d *Device) Bridge() config.Bridge { // Vlans implements the MachineNetwork interface. func (d *Device) Vlans() []config.Vlan { - return slices.Map(d.DeviceVlans, func(v *Vlan) config.Vlan { return v }) + return xslices.Map(d.DeviceVlans, func(v *Vlan) config.Vlan { return v }) } // MTU implements the MachineNetwork interface. @@ -767,7 +768,7 @@ func (wc *DeviceWireguardConfig) FirewallMark() int { // Peers implements the MachineNetwork interface. func (wc *DeviceWireguardConfig) Peers() []config.WireguardPeer { - return slices.Map(wc.WireguardPeers, func(p *DeviceWireguardPeer) config.WireguardPeer { return p }) + return xslices.Map(wc.WireguardPeers, func(p *DeviceWireguardPeer) config.WireguardPeer { return p }) } // PublicKey implements the MachineNetwork interface. @@ -850,7 +851,7 @@ func (b *Bond) Selectors() []config.NetworkDeviceSelector { return nil } - return slices.Map(b.BondDeviceSelectors, func(d NetworkDeviceSelector) config.NetworkDeviceSelector { return &d }) + return xslices.Map(b.BondDeviceSelectors, func(d NetworkDeviceSelector) config.NetworkDeviceSelector { return &d }) } // ARPIPTarget implements the MachineNetwork interface. @@ -1042,7 +1043,7 @@ func (v *Vlan) VIPConfig() config.VIPConfig { // Routes implements the MachineNetwork interface. func (v *Vlan) Routes() []config.Route { - return slices.Map(v.VlanRoutes, func(r *Route) config.Route { return r }) + return xslices.Map(v.VlanRoutes, func(r *Route) config.Route { return r }) } // DHCP implements the MachineNetwork interface. @@ -1128,7 +1129,7 @@ func (i *InstallConfig) Image() string { // Extensions implements the config.Provider interface. func (i *InstallConfig) Extensions() []config.Extension { - return slices.Map(i.InstallExtensions, func(e InstallExtensionConfig) config.Extension { return e }) + return xslices.Map(i.InstallExtensions, func(e InstallExtensionConfig) config.Extension { return e }) } // Disk implements the config.Provider interface. @@ -1301,7 +1302,7 @@ func (d *MachineDisk) Device() string { // Partitions implements the config.Provider interface. func (d *MachineDisk) Partitions() []config.Partition { - return slices.Map(d.DiskPartitions, func(p *DiskPartition) config.Partition { return p }) + return xslices.Map(d.DiskPartitions, func(p *DiskPartition) config.Partition { return p }) } // Size implements the config.Provider interface. @@ -1345,7 +1346,7 @@ func (e *EncryptionConfig) Options() []string { // Keys implements the config.Provider interface. func (e *EncryptionConfig) Keys() []config.EncryptionKey { - return slices.Map(e.EncryptionKeys, func(k *EncryptionKey) config.EncryptionKey { return k }) + return xslices.Map(e.EncryptionKeys, func(k *EncryptionKey) config.EncryptionKey { return k }) } // Static implements the config.Provider interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_schedulerconfig.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_schedulerconfig.go index a0ae82ac5..a53943ad8 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_schedulerconfig.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_schedulerconfig.go @@ -7,7 +7,7 @@ package v1alpha1 import ( "fmt" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/config/config" "github.com/siderolabs/talos/pkg/machinery/constants" @@ -31,7 +31,7 @@ func (s *SchedulerConfig) ExtraArgs() map[string]string { // ExtraVolumes implements the config.Scheduler interface. func (s *SchedulerConfig) ExtraVolumes() []config.VolumeMount { - return slices.Map(s.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) + return xslices.Map(s.ExtraVolumesConfig, func(v VolumeMountConfig) config.VolumeMount { return v }) } // Env implements the config.Scheduler interface. diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go index f9a049b29..b14ec690c 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go @@ -6,8 +6,7 @@ package v1alpha1 import ( "fmt" - - "github.com/siderolabs/gen/slices" + "slices" ) // Unstructured allows wrapping any map[string]interface{} into a config object. diff --git a/pkg/machinery/go.mod b/pkg/machinery/go.mod index 90acf1364..53c1fdd63 100644 --- a/pkg/machinery/go.mod +++ b/pkg/machinery/go.mod @@ -1,6 +1,6 @@ module github.com/siderolabs/talos/pkg/machinery -go 1.21 +go 1.21.1 // forked go-yaml that introduces RawYAML interface, which can be used to populate YAML fields using bytes // which are then encoded as a valid YAML blocks with proper indentiation @@ -9,7 +9,7 @@ replace gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b require ( github.com/blang/semver/v4 v4.0.0 github.com/containerd/go-cni v1.1.9 - github.com/cosi-project/runtime v0.3.1 + github.com/cosi-project/runtime v0.3.9 github.com/dustin/go-humanize v1.0.1 github.com/evanphx/json-patch v5.6.0+incompatible github.com/ghodss/yaml v1.0.0 @@ -19,7 +19,7 @@ require ( github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 github.com/siderolabs/crypto v0.4.1 - github.com/siderolabs/gen v0.4.5 + github.com/siderolabs/gen v0.4.7 github.com/siderolabs/go-api-signature v0.2.6 github.com/siderolabs/go-blockdevice v0.4.6 github.com/siderolabs/go-pointer v1.0.0 @@ -27,7 +27,7 @@ require ( github.com/siderolabs/protoenc v0.2.0 github.com/stretchr/testify v1.8.4 google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d - google.golang.org/grpc v1.58.0 + google.golang.org/grpc v1.58.1 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -35,7 +35,7 @@ require ( require ( github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 // indirect github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect - github.com/ProtonMail/gopenpgp/v2 v2.7.2 // indirect + github.com/ProtonMail/gopenpgp/v2 v2.7.3 // indirect github.com/adrg/xdg v0.4.0 // indirect github.com/cloudflare/circl v1.3.3 // indirect github.com/containernetworking/cni v1.1.2 // indirect @@ -43,7 +43,7 @@ require ( github.com/gertd/go-pluralize v0.2.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/josharian/native v1.1.0 // indirect github.com/mdlayher/genetlink v1.3.2 // indirect @@ -54,14 +54,13 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.11.0 // indirect - golang.org/x/net v0.12.0 // indirect + go.uber.org/multierr v1.10.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.11.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/pkg/machinery/go.sum b/pkg/machinery/go.sum index 76ff5e187..98a858b32 100644 --- a/pkg/machinery/go.sum +++ b/pkg/machinery/go.sum @@ -2,12 +2,10 @@ github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwC github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f h1:tCbYj7/299ekTTXpdwKYF8eBlsYsDVoggDAuAjoK66k= github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f/go.mod h1:gcr0kNtGBqin9zDW9GOHcVntrwnjrK+qdJ06mWYBybw= -github.com/ProtonMail/gopenpgp/v2 v2.7.2 h1:mIwxSUPezxNYq0RA5106VPWyKC+Ly3FvBUnBJh/7GWw= -github.com/ProtonMail/gopenpgp/v2 v2.7.2/go.mod h1:IhkNEDaxec6NyzSI0PlxapinnwPVIESk8/76da3Ct3g= +github.com/ProtonMail/gopenpgp/v2 v2.7.3 h1:AJu1OI/1UWVYZl6QcCLKGu9OTngS2r52618uGlje84I= +github.com/ProtonMail/gopenpgp/v2 v2.7.3/go.mod h1:IhkNEDaxec6NyzSI0PlxapinnwPVIESk8/76da3Ct3g= github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 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/brianvoe/gofakeit/v6 v6.17.0 h1:obbQTJeHfktJtiZzq0Q1bEpsNUs+yHrYlPVWt7BtmJ4= @@ -24,8 +22,8 @@ github.com/containerd/go-cni v1.1.9 h1:ORi7P1dYzCwVM6XPN4n3CbkuOx/NZ2DOqy+SHRdo9 github.com/containerd/go-cni v1.1.9/go.mod h1:XYrZJ1d5W6E2VOvjffL3IZq0Dz6bsVlERHbekNK90PM= github.com/containernetworking/cni v1.1.2 h1:wtRGZVv7olUHMOqouPpn3cXJWpJgM6+EUl31EQbXALQ= github.com/containernetworking/cni v1.1.2/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= -github.com/cosi-project/runtime v0.3.1 h1:dRGKOlEDKjvuC+VIG4N2Z5iAftaqgS1h3ttmvbK4nMk= -github.com/cosi-project/runtime v0.3.1/go.mod h1:Q+oiWic2l6TaGuIWtUo0E9tL2RDT2APHvjUc/mJtn24= +github.com/cosi-project/runtime v0.3.9 h1:tQu+vr1/HonI4Th8fnZbSUvzU635d2a3gWLv/PnBN3g= +github.com/cosi-project/runtime v0.3.9/go.mod h1:kLIIwnTlUnVPhZZN82esCuyvD23eNJkOcnjWE7i+qBk= 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= @@ -60,8 +58,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2 h1:dygLcbEBA+t/P7ck6a8AkXv6juQ4cK0RHBoh32jxhHM= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2/go.mod h1:Ap9RLCIJVtgQg1/BBgVEfypOAySvvlcpcVQkSzJCH4Y= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -112,8 +110,8 @@ github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkB github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/siderolabs/crypto v0.4.1 h1:PP84WSDDyCCbjYKePcc0IaMSPXDndz8V3cQ9hMRSvpA= github.com/siderolabs/crypto v0.4.1/go.mod h1:nJmvkqWy1Hngbzw3eg2TdtJ/ZYHHofQK1NbmmYywW8k= -github.com/siderolabs/gen v0.4.5 h1:rwXUVJlL7hYza1LrSVXfT905ZC9Rgei37jMKKs/+eP0= -github.com/siderolabs/gen v0.4.5/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= +github.com/siderolabs/gen v0.4.7 h1:lM69UYggT7yzpubf7hEFaNujPdY55Y9zvQf/NC18GvA= +github.com/siderolabs/gen v0.4.7/go.mod h1:4PBYMdXxTg292IDRq4CGn5AymyDxJVEDvobVKDqFBEA= github.com/siderolabs/go-api-signature v0.2.6 h1:X4Q+J7CmyfUHKUR+4x4RqmmSSksQ2pYGDajwVX8ZaJ0= github.com/siderolabs/go-api-signature v0.2.6/go.mod h1:jt7azUqWctrkn7XuTPunfkWllvGPIfRJW8AS3OVkiqE= github.com/siderolabs/go-blockdevice v0.4.6 h1:yfxFYzXezzszB0mSF2ZG8jPPampoNXa9r8W8nM0IoZI= @@ -129,7 +127,6 @@ github.com/siderolabs/protoenc v0.2.0/go.mod h1:mu4gc6pJxhdJYpuloacKE4jsJojj87qD github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -138,23 +135,20 @@ github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c h1:Vn6nVVu9MdOYvXPk github.com/unix4ever/yaml v0.0.0-20220527175918-f17b0f05cf2c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= +go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI= golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -171,8 +165,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -201,8 +195,8 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/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.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -215,8 +209,8 @@ 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.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -228,12 +222,12 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e h1:z3vDksarJxsAKM5dmEGv0GHwE2hKJ096wZra71Vs4sw= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= -google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.58.1 h1:OL+Vz23DTtrrldqHK49FUOPHyY75rvFqJfXC84NYW58= +google.golang.org/grpc v1.58.1/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/pkg/machinery/meta/meta.go b/pkg/machinery/meta/meta.go index 3fb005457..4e27db571 100644 --- a/pkg/machinery/meta/meta.go +++ b/pkg/machinery/meta/meta.go @@ -11,7 +11,7 @@ import ( "strconv" "strings" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" ) // Value represents a key/value pair for META. @@ -50,7 +50,7 @@ type Values []Value // Each Value is encoded a k=v, split by ';' character. // The result is base64 encoded. func (v Values) Encode() string { - return base64.StdEncoding.EncodeToString([]byte(strings.Join(slices.Map(v, Value.String), ";"))) + return base64.StdEncoding.EncodeToString([]byte(strings.Join(xslices.Map(v, Value.String), ";"))) } // DecodeValues parses a string representation of Values for the environment variable. diff --git a/pkg/machinery/resources/k8s/endpoint.go b/pkg/machinery/resources/k8s/endpoint.go index 8b9447d90..6cc2ce83f 100644 --- a/pkg/machinery/resources/k8s/endpoint.go +++ b/pkg/machinery/resources/k8s/endpoint.go @@ -12,7 +12,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource/meta" "github.com/cosi-project/runtime/pkg/resource/protobuf" "github.com/cosi-project/runtime/pkg/resource/typed" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/proto" ) @@ -87,7 +87,7 @@ func (l EndpointList) Merge(endpoint *Endpoint) EndpointList { // Strings returns a slice of formatted endpoints to string. func (l EndpointList) Strings() []string { - return slices.Map(l, netip.Addr.String) + return xslices.Map(l, netip.Addr.String) } func init() { diff --git a/pkg/machinery/resources/network/node_address.go b/pkg/machinery/resources/network/node_address.go index 2b6246331..f4e62dbff 100644 --- a/pkg/machinery/resources/network/node_address.go +++ b/pkg/machinery/resources/network/node_address.go @@ -7,12 +7,13 @@ package network import ( "fmt" "net/netip" + "slices" "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/resource/meta" "github.com/cosi-project/runtime/pkg/resource/protobuf" "github.com/cosi-project/runtime/pkg/resource/typed" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/proto" ) @@ -82,12 +83,12 @@ func (NodeAddressExtension) ResourceDefinition() meta.ResourceDefinitionSpec { func (spec *NodeAddressSpec) IPs() []netip.Addr { // make sure addresses are unique, as different prefixes can have the same IP // at the same we want to preserve order - ips := slices.Map(spec.Addresses, netip.Prefix.Addr) + ips := xslices.Map(spec.Addresses, netip.Prefix.Addr) result := make([]netip.Addr, 0, len(ips)) for _, ip := range ips { - if slices.Contains(result, func(addr netip.Addr) bool { + if slices.ContainsFunc(result, func(addr netip.Addr) bool { return addr == ip }) { continue diff --git a/pkg/machinery/resources/secrets/cert_sans.go b/pkg/machinery/resources/secrets/cert_sans.go index 7284ed25c..08f8727e3 100644 --- a/pkg/machinery/resources/secrets/cert_sans.go +++ b/pkg/machinery/resources/secrets/cert_sans.go @@ -13,7 +13,7 @@ import ( "github.com/cosi-project/runtime/pkg/resource/meta" "github.com/cosi-project/runtime/pkg/resource/protobuf" "github.com/cosi-project/runtime/pkg/resource/typed" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/machinery/proto" ) @@ -121,7 +121,7 @@ func (spec *CertSANSpec) AppendDNSNames(dnsNames ...string) { // StdIPs returns a list of converted std.IPs. func (spec *CertSANSpec) StdIPs() []net.IP { - return slices.Map(spec.IPs, func(ip netip.Addr) net.IP { return ip.AsSlice() }) + return xslices.Map(spec.IPs, func(ip netip.Addr) net.IP { return ip.AsSlice() }) } // Sort the CertSANs. diff --git a/pkg/provision/internal/inmemhttp/inmemhttp.go b/pkg/provision/internal/inmemhttp/inmemhttp.go index e3942cde8..18e886fda 100644 --- a/pkg/provision/internal/inmemhttp/inmemhttp.go +++ b/pkg/provision/internal/inmemhttp/inmemhttp.go @@ -9,10 +9,9 @@ import ( "context" "net" "net/http" + "slices" "strconv" "time" - - "github.com/siderolabs/gen/slices" ) // Server is an in-memory http web server. diff --git a/pkg/provision/providers/qemu/launch.go b/pkg/provision/providers/qemu/launch.go index 9d867aba7..de8f01e4b 100644 --- a/pkg/provision/providers/qemu/launch.go +++ b/pkg/provision/providers/qemu/launch.go @@ -23,7 +23,7 @@ import ( "github.com/containernetworking/plugins/pkg/utils" "github.com/coreos/go-iptables/iptables" "github.com/google/uuid" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/go-blockdevice/blockdevice/partition/gpt" sideronet "github.com/siderolabs/net" @@ -120,7 +120,7 @@ func withCNI(ctx context.Context, config *LaunchConfig, f func(config *LaunchCon ips[j] = sideronet.FormatCIDR(config.IPs[j], config.CIDRs[j]) } - gatewayAddrs := slices.Map(config.GatewayAddrs, netip.Addr.String) + gatewayAddrs := xslices.Map(config.GatewayAddrs, netip.Addr.String) runtimeConf := libcni.RuntimeConf{ ContainerID: containerID, diff --git a/pkg/provision/providers/vm/dhcpd.go b/pkg/provision/providers/vm/dhcpd.go index eb92970b9..96c7ec673 100644 --- a/pkg/provision/providers/vm/dhcpd.go +++ b/pkg/provision/providers/vm/dhcpd.go @@ -21,7 +21,7 @@ import ( "github.com/insomniacslk/dhcp/dhcpv6" "github.com/insomniacslk/dhcp/dhcpv6/server6" "github.com/insomniacslk/dhcp/iana" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "golang.org/x/sync/errgroup" "github.com/siderolabs/talos/pkg/provision" @@ -212,7 +212,7 @@ func handlerDHCP6(serverHwAddr net.HardwareAddr, statePath string) server6.Handl } func netipAddrsToIPs(addrs []netip.Addr) []net.IP { - return slices.Map(addrs, func(addr netip.Addr) net.IP { + return xslices.Map(addrs, func(addr netip.Addr) net.IP { return addr.AsSlice() }) } @@ -286,7 +286,7 @@ func (p *Provisioner) CreateDHCPd(state *State, clusterReq provision.ClusterRequ return err } - gatewayAddrs := slices.Map(clusterReq.Network.GatewayAddrs, netip.Addr.String) + gatewayAddrs := xslices.Map(clusterReq.Network.GatewayAddrs, netip.Addr.String) args := []string{ "dhcpd-launch", diff --git a/pkg/provision/providers/vm/loadbalancer.go b/pkg/provision/providers/vm/loadbalancer.go index c8bd3fcc0..635fb273e 100644 --- a/pkg/provision/providers/vm/loadbalancer.go +++ b/pkg/provision/providers/vm/loadbalancer.go @@ -12,7 +12,7 @@ import ( "strings" "syscall" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" "github.com/siderolabs/talos/pkg/provision" ) @@ -33,8 +33,8 @@ func (p *Provisioner) CreateLoadBalancer(state *State, clusterReq provision.Clus defer logFile.Close() //nolint:errcheck - controlPlaneIPs := slices.Map(clusterReq.Nodes.ControlPlaneNodes(), func(req provision.NodeRequest) string { return req.IPs[0].String() }) - ports := slices.Map(clusterReq.Network.LoadBalancerPorts, strconv.Itoa) + controlPlaneIPs := xslices.Map(clusterReq.Nodes.ControlPlaneNodes(), func(req provision.NodeRequest) string { return req.IPs[0].String() }) + ports := xslices.Map(clusterReq.Network.LoadBalancerPorts, strconv.Itoa) args := []string{ "loadbalancer-launch", diff --git a/pkg/provision/providers/vm/network.go b/pkg/provision/providers/vm/network.go index 241d94e74..2800051bf 100644 --- a/pkg/provision/providers/vm/network.go +++ b/pkg/provision/providers/vm/network.go @@ -21,7 +21,7 @@ import ( "github.com/coreos/go-iptables/iptables" "github.com/google/uuid" "github.com/jsimonetti/rtnetlink" - "github.com/siderolabs/gen/slices" + "github.com/siderolabs/gen/xslices" sideronet "github.com/siderolabs/net" "github.com/vishvananda/netlink" @@ -85,7 +85,7 @@ func (p *Provisioner) CreateNetwork(ctx context.Context, state *State, network p fakeIPs[j] = sideronet.FormatCIDR(fakeIP, network.CIDRs[j]) } - gatewayAddrs := slices.Map(network.GatewayAddrs, netip.Addr.String) + gatewayAddrs := xslices.Map(network.GatewayAddrs, netip.Addr.String) containerID := uuid.New().String() runtimeConf := libcni.RuntimeConf{