diff --git a/Makefile b/Makefile index a862c6665..8def6b0af 100644 --- a/Makefile +++ b/Makefile @@ -19,17 +19,17 @@ EXTRAS ?= v1.5.0-alpha.0 # renovate: datasource=github-tags depName=golang/go GO_VERSION ?= 1.20 # renovate: datasource=go depName=golang.org/x/tools -GOIMPORTS_VERSION ?= v0.7.0 +GOIMPORTS_VERSION ?= v0.9.1 # renovate: datasource=go depName=mvdan.cc/gofumpt -GOFUMPT_VERSION ?= v0.4.0 +GOFUMPT_VERSION ?= v0.5.0 # renovate: datasource=go depName=github.com/golangci/golangci-lint GOLANGCILINT_VERSION ?= v1.52.2 # renovate: datasource=go depName=golang.org/x/tools -STRINGER_VERSION ?= v0.7.0 +STRINGER_VERSION ?= v0.9.1 # renovate: datasource=go depName=github.com/alvaroloes/enumer ENUMER_VERSION ?= v1.1.2 # renovate: datasource=go depName=k8s.io/code-generator -DEEPCOPY_GEN_VERSION ?= v0.26.3 +DEEPCOPY_GEN_VERSION ?= v0.27.1 # renovate: datasource=go depName=github.com/planetscale/vtprotobuf VTPROTOBUF_VERSION ?= v0.4.0 # renovate: datasource=go depName=github.com/siderolabs/deep-copy diff --git a/cmd/talosctl/cmd/talos/get.go b/cmd/talosctl/cmd/talos/get.go index 9d7f3b5de..08ce2f3e9 100644 --- a/cmd/talosctl/cmd/talos/get.go +++ b/cmd/talosctl/cmd/talos/get.go @@ -225,7 +225,7 @@ func completeResourceDefinition(withAliases bool) ([]string, cobra.ShellCompDire var result []string if WithClientNoNodes(func(ctx context.Context, c *client.Client) error { - items, err := safe.StateList[*meta.ResourceDefinition](ctx, c.COSI, resource.NewMetadata(meta.NamespaceName, meta.ResourceDefinitionType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*meta.ResourceDefinition](ctx, c.COSI) if err != nil { return err } @@ -278,11 +278,11 @@ func completeResourceID(resourceType, namespace string) ([]string, cobra.ShellCo } // CompleteNodes represents tab completion for `--nodes` argument. -func CompleteNodes(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { +func CompleteNodes(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { var nodes []string if WithClientNoNodes(func(ctx context.Context, c *client.Client) error { - items, err := safe.StateList[*cluster.Member](ctx, c.COSI, resource.NewMetadata(cluster.NamespaceName, cluster.MemberType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*cluster.Member](ctx, c.COSI) if err != nil { return err } diff --git a/cmd/talosctl/cmd/talos/health.go b/cmd/talosctl/cmd/talos/health.go index 3b21a2d02..668a20937 100644 --- a/cmd/talosctl/cmd/talos/health.go +++ b/cmd/talosctl/cmd/talos/health.go @@ -11,7 +11,6 @@ import ( "os" "time" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/spf13/cobra" "google.golang.org/grpc/codes" @@ -243,16 +242,12 @@ func buildClusterInfo() (cluster.Info, error) { var members []*clusterres.Member err := WithClientNoNodes(func(ctx context.Context, c *client.Client) error { - items, err := safe.StateList[*clusterres.Member](ctx, c.COSI, resource.NewMetadata(clusterres.NamespaceName, clusterres.MemberType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*clusterres.Member](ctx, c.COSI) if err != nil { return err } - it := safe.IteratorFromList(items) - - for it.Next() { - members = append(members, it.Value()) - } + items.ForEach(func(item *clusterres.Member) { members = append(members, item) }) return nil }) diff --git a/cmd/talosctl/cmd/talos/root.go b/cmd/talosctl/cmd/talos/root.go index a52a42bcb..c985f94c3 100644 --- a/cmd/talosctl/cmd/talos/root.go +++ b/cmd/talosctl/cmd/talos/root.go @@ -13,6 +13,7 @@ import ( 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" @@ -222,7 +223,7 @@ func getContainersFromNode(kubernetes bool) []string { } func mergeSuggestions(a, b []string) []string { - merged := append(append([]string(nil), a...), b...) + merged := append(slices.Clone(a), b...) sort.Strings(merged) diff --git a/go.mod b/go.mod index d07ca4347..7e47ef30d 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( github.com/BurntSushi/toml v1.2.1 github.com/aws/aws-sdk-go v1.44.258 github.com/beevik/ntp v1.0.0 - github.com/benbjohnson/clock v1.3.3 + github.com/benbjohnson/clock v1.3.4 github.com/cenkalti/backoff/v4 v4.2.1 github.com/containerd/cgroups v1.1.0 github.com/containerd/containerd v1.6.20 @@ -41,7 +41,7 @@ require ( github.com/containernetworking/plugins v1.2.0 github.com/coreos/go-iptables v0.6.0 github.com/coreos/go-semver v0.3.1 - github.com/cosi-project/runtime v0.3.0 + github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a github.com/docker/distribution v2.8.1+incompatible github.com/docker/docker v23.0.5+incompatible github.com/docker/go-connections v0.4.0 @@ -93,7 +93,7 @@ require ( github.com/siderolabs/crypto v0.4.0 github.com/siderolabs/discovery-api v0.1.2 github.com/siderolabs/discovery-client v0.1.4 - github.com/siderolabs/gen v0.4.4 + github.com/siderolabs/gen v0.4.5 github.com/siderolabs/go-blockdevice v0.4.5 github.com/siderolabs/go-circular v0.1.0 github.com/siderolabs/go-cmd v0.1.1 @@ -128,7 +128,7 @@ require ( go.etcd.io/etcd/etcdutl/v3 v3.5.8 go.uber.org/zap v1.24.0 go4.org/netipx v0.0.0-20230303233057-f1b76eb4bb35 - golang.org/x/net v0.9.0 + golang.org/x/net v0.10.0 golang.org/x/sync v0.2.0 golang.org/x/sys v0.8.0 golang.org/x/term v0.8.0 @@ -213,7 +213,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/josharian/native v1.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/compress v1.16.5 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect diff --git a/go.sum b/go.sum index 5138138b2..aea7e40d0 100644 --- a/go.sum +++ b/go.sum @@ -266,8 +266,8 @@ github.com/aws/aws-sdk-go v1.44.258/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8 github.com/beevik/ntp v1.0.0 h1:d0Lgy1xbNNqVyGfvg2Z96ItKcfyn3lzgus/oRoj9vnk= github.com/beevik/ntp v1.0.0/go.mod h1:JN7/74B0Z4GUGO/1aUeRI2adARlfJGUeaJb0y0Wvnf4= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.3 h1:g+rSsSaAzhHJYcIQE78hJ3AhyjjtQvleKDjlhdBnIhc= -github.com/benbjohnson/clock v1.3.3/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.4 h1:wj3BFPrTw8yYgA1OlMqvUk95nc8OMv3cvBSF5erT2W4= +github.com/benbjohnson/clock v1.3.4/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -455,8 +455,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.0 h1:f8++A7HUu7pQv9G3IhQworfA4TFLdzGWl3W+jLQF3Oo= -github.com/cosi-project/runtime v0.3.0/go.mod h1:BBFzt+ANf4BSlVGIbemVuz+Hql8F3tveWaWoErUi0lY= +github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a h1:H52VL6of0xYiEeM7HLBUnRCWKZzGKLV3QKLlTxM3iD4= +github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a/go.mod h1:g+0MZ3+2MIUkUL7JYTqgYeo5f4j7dAuGem6apjBJ1XU= 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= @@ -845,8 +845,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1138,8 +1138,8 @@ github.com/siderolabs/discovery-api v0.1.2 h1:PxJhl9s2qpPgjO65bgOdRovBvRg/RuZu93 github.com/siderolabs/discovery-api v0.1.2/go.mod h1:JnJg4h1HbAhOazQl0lYHEjrg63rg/cf9r2te6/DqUxo= github.com/siderolabs/discovery-client v0.1.4 h1:5e/4tVsCMTdz1YlynI2ebhSJ9PHhmD3y+aGIsKjDlSA= github.com/siderolabs/discovery-client v0.1.4/go.mod h1:TmrvPz89JyhQT4vrIzAqx/v89zxikdYmhpC0GQsiH3Y= -github.com/siderolabs/gen v0.4.4 h1:iShHEAfb3i9jaeDXjT11TepsjdgGoChBKbUuUz4CqnQ= -github.com/siderolabs/gen v0.4.4/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= +github.com/siderolabs/gen v0.4.5 h1:rwXUVJlL7hYza1LrSVXfT905ZC9Rgei37jMKKs/+eP0= +github.com/siderolabs/gen v0.4.5/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= github.com/siderolabs/go-api-signature v0.2.3 h1:7jaZ2R1TiJ/xAsMCiFCm72n/PsnoVYt1R+Savbj7l/0= github.com/siderolabs/go-api-signature v0.2.3/go.mod h1:HmO3kVEXgrXYzj0tLHT9HAAu0I4grz2/dJwq8AdzE5Q= github.com/siderolabs/go-blockdevice v0.4.5 h1:NgpR9XTl/N7WeL59QHBsseDD0Nb8Y2nel+W3u7xHIvY= @@ -1484,8 +1484,9 @@ golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= 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.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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= diff --git a/hack/structprotogen/go.mod b/hack/structprotogen/go.mod index 96603337d..de1fc6db6 100644 --- a/hack/structprotogen/go.mod +++ b/hack/structprotogen/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/fatih/structtag v1.2.0 github.com/spf13/cobra v1.7.0 - golang.org/x/tools v0.8.0 + golang.org/x/tools v0.9.1 gopkg.in/typ.v4 v4.3.0 ) @@ -13,5 +13,5 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/sys v0.7.0 // indirect + golang.org/x/sys v0.8.0 // indirect ) diff --git a/hack/structprotogen/go.sum b/hack/structprotogen/go.sum index 711d36bf2..b8115c597 100644 --- a/hack/structprotogen/go.sum +++ b/hack/structprotogen/go.sum @@ -10,11 +10,11 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/typ.v4 v4.3.0 h1:PEQtVIdhjOo4sOLnqpuEYrfSsul+a85EBGHS7tDJFuU= gopkg.in/typ.v4 v4.3.0/go.mod h1:wolXe8DlewxRCjA7SOiT3zjrZ0eQJZcr8cmV6bQWJUM= diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go index 96b4677d2..e8214b203 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go @@ -12,7 +12,6 @@ import ( "net/netip" "strings" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/siderolabs/gen/slices" "google.golang.org/grpc/metadata" @@ -140,7 +139,7 @@ func buildClusterInfo(ctx context.Context, } return &clusterState{ - nodeInfos: append(append([]cluster.NodeInfo(nil), controlPlaneNodeInfos...), workerNodeInfos...), + nodeInfos: append(slices.Clone(controlPlaneNodeInfos), workerNodeInfos...), nodeInfosByType: map[machine.Type][]cluster.NodeInfo{ machine.TypeControlPlane: controlPlaneNodeInfos, machine.TypeWorker: workerNodeInfos, @@ -231,7 +230,7 @@ func k8sNodeToNodeInfo(node *corev1.Node) (*cluster.NodeInfo, error) { func getDiscoveryMemberList(ctx context.Context, runtime runtime.Runtime) ([]*clusterres.Member, error) { res := runtime.State().V1Alpha2().Resources() - list, err := safe.StateList[*clusterres.Member](ctx, res, resource.NewMetadata(clusterres.NamespaceName, clusterres.MemberType, "", resource.VersionUndefined)) + list, err := safe.StateListAll[*clusterres.Member](ctx, res) if err != nil { return nil, err } diff --git a/internal/app/machined/pkg/controllers/cluster/local_affiliate.go b/internal/app/machined/pkg/controllers/cluster/local_affiliate.go index 3472a3a4f..66a4be5c7 100644 --- a/internal/app/machined/pkg/controllers/cluster/local_affiliate.go +++ b/internal/app/machined/pkg/controllers/cluster/local_affiliate.go @@ -113,7 +113,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt return nil case <-r.EventCh(): // mandatory resources to be fetched - discoveryConfig, err := r.Get(ctx, resource.NewMetadata(config.NamespaceName, cluster.ConfigType, cluster.ConfigID, resource.VersionUndefined)) + discoveryConfig, err := safe.ReaderGetByID[*cluster.Config](ctx, r, cluster.ConfigID) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting discovery config: %w", err) @@ -122,7 +122,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - identity, err := r.Get(ctx, resource.NewMetadata(cluster.NamespaceName, cluster.IdentityType, cluster.LocalIdentity, resource.VersionUndefined)) + identity, err := safe.ReaderGetByID[*cluster.Identity](ctx, r, cluster.LocalIdentity) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting local identity: %w", err) @@ -131,7 +131,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - hostname, err := r.Get(ctx, resource.NewMetadata(network.NamespaceName, network.HostnameStatusType, network.HostnameID, resource.VersionUndefined)) + hostname, err := safe.ReaderGetByID[*network.HostnameStatus](ctx, r, network.HostnameID) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting hostname: %w", err) @@ -140,7 +140,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - nodename, err := r.Get(ctx, resource.NewMetadata(k8s.NamespaceName, k8s.NodenameType, k8s.NodenameID, resource.VersionUndefined)) + nodename, err := safe.ReaderGetByID[*k8s.Nodename](ctx, r, k8s.NodenameID) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting nodename: %w", err) @@ -149,8 +149,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - routedAddresses, err := r.Get(ctx, - resource.NewMetadata(network.NamespaceName, network.NodeAddressType, network.FilteredNodeAddressID(network.NodeAddressRoutedID, k8s.NodeAddressFilterNoK8s), resource.VersionUndefined)) + routedAddresses, err := safe.ReaderGetByID[*network.NodeAddress](ctx, r, network.FilteredNodeAddressID(network.NodeAddressRoutedID, k8s.NodeAddressFilterNoK8s)) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting addresses: %w", err) @@ -159,8 +158,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - currentAddresses, err := r.Get(ctx, - resource.NewMetadata(network.NamespaceName, network.NodeAddressType, network.FilteredNodeAddressID(network.NodeAddressCurrentID, k8s.NodeAddressFilterNoK8s), resource.VersionUndefined)) + currentAddresses, err := safe.ReaderGetByID[*network.NodeAddress](ctx, r, network.FilteredNodeAddressID(network.NodeAddressCurrentID, k8s.NodeAddressFilterNoK8s)) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting addresses: %w", err) @@ -169,7 +167,7 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt continue } - machineType, err := r.Get(ctx, resource.NewMetadata(config.NamespaceName, config.MachineTypeType, config.MachineTypeID, resource.VersionUndefined)) + machineType, err := safe.ReaderGetByID[*config.MachineType](ctx, r, config.MachineTypeID) if err != nil { if !state.IsNotFoundError(err) { return fmt.Errorf("error getting machine type: %w", err) @@ -179,18 +177,17 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt } // optional resources (kubespan) - kubespanIdentity, err := r.Get(ctx, resource.NewMetadata(kubespan.NamespaceName, kubespan.IdentityType, kubespan.LocalIdentity, resource.VersionUndefined)) + kubespanIdentity, err := safe.ReaderGetByID[*kubespan.Identity](ctx, r, kubespan.LocalIdentity) if err != nil && !state.IsNotFoundError(err) { return fmt.Errorf("error getting kubespan identity: %w", err) } - kubespanConfig, err := safe.ReaderGet[*kubespan.Config](ctx, r, resource.NewMetadata(config.NamespaceName, kubespan.ConfigType, kubespan.ConfigID, resource.VersionUndefined)) + kubespanConfig, err := safe.ReaderGetByID[*kubespan.Config](ctx, r, kubespan.ConfigID) if err != nil && !state.IsNotFoundError(err) { return fmt.Errorf("error getting kubespan config: %w", err) } - ksAdditionalAddresses, err := r.Get(ctx, - resource.NewMetadata(network.NamespaceName, network.NodeAddressType, network.FilteredNodeAddressID(network.NodeAddressCurrentID, k8s.NodeAddressFilterOnlyK8s), resource.VersionUndefined)) + ksAdditionalAddresses, err := safe.ReaderGetByID[*network.NodeAddress](ctx, r, network.FilteredNodeAddressID(network.NodeAddressCurrentID, k8s.NodeAddressFilterOnlyK8s)) if err != nil && !state.IsNotFoundError(err) { return fmt.Errorf("error getting kubespan additional addresses: %w", err) } @@ -200,33 +197,33 @@ func (ctrl *LocalAffiliateController) Run(ctx context.Context, r controller.Runt return fmt.Errorf("error getting discovered public IP: %w", err) } - localID := identity.(*cluster.Identity).TypedSpec().NodeID + localID := identity.TypedSpec().NodeID - touchedIDs := make(map[resource.ID]struct{}) + touchedIDs := map[resource.ID]struct{}{} - if discoveryConfig.(*cluster.Config).TypedSpec().DiscoveryEnabled { - if err = r.Modify(ctx, cluster.NewAffiliate(cluster.NamespaceName, localID), func(res resource.Resource) error { - spec := res.(*cluster.Affiliate).TypedSpec() + if discoveryConfig.TypedSpec().DiscoveryEnabled { + if err = safe.WriterModify(ctx, r, cluster.NewAffiliate(cluster.NamespaceName, localID), func(res *cluster.Affiliate) error { + spec := res.TypedSpec() spec.NodeID = localID - spec.Hostname = hostname.(*network.HostnameStatus).TypedSpec().FQDN() - spec.Nodename = nodename.(*k8s.Nodename).TypedSpec().Nodename - spec.MachineType = machineType.(*config.MachineType).MachineType() + spec.Hostname = hostname.TypedSpec().FQDN() + spec.Nodename = nodename.TypedSpec().Nodename + spec.MachineType = machineType.MachineType() spec.OperatingSystem = fmt.Sprintf("%s (%s)", version.Name, version.Tag) - routedNodeIPs := routedAddresses.(*network.NodeAddress).TypedSpec().IPs() - currentNodeIPs := currentAddresses.(*network.NodeAddress).TypedSpec().IPs() + routedNodeIPs := routedAddresses.TypedSpec().IPs() + currentNodeIPs := currentAddresses.TypedSpec().IPs() spec.Addresses = routedNodeIPs spec.KubeSpan = cluster.KubeSpanAffiliateSpec{} if kubespanIdentity != nil && kubespanConfig != nil { - spec.KubeSpan.Address = kubespanIdentity.(*kubespan.Identity).TypedSpec().Address.Addr() - spec.KubeSpan.PublicKey = kubespanIdentity.(*kubespan.Identity).TypedSpec().PublicKey + spec.KubeSpan.Address = kubespanIdentity.TypedSpec().Address.Addr() + spec.KubeSpan.PublicKey = kubespanIdentity.TypedSpec().PublicKey if kubespanConfig.TypedSpec().AdvertiseKubernetesNetworks && ksAdditionalAddresses != nil { - spec.KubeSpan.AdditionalAddresses = append([]netip.Prefix(nil), ksAdditionalAddresses.(*network.NodeAddress).TypedSpec().Addresses...) + spec.KubeSpan.AdditionalAddresses = slices.Clone(ksAdditionalAddresses.TypedSpec().Addresses) } else { spec.KubeSpan.AdditionalAddresses = nil } diff --git a/internal/app/machined/pkg/controllers/cluster/member.go b/internal/app/machined/pkg/controllers/cluster/member.go index 967ce4024..8d997654c 100644 --- a/internal/app/machined/pkg/controllers/cluster/member.go +++ b/internal/app/machined/pkg/controllers/cluster/member.go @@ -7,10 +7,10 @@ package cluster import ( "context" "fmt" - "net/netip" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" + "github.com/siderolabs/gen/slices" "go.uber.org/zap" "github.com/siderolabs/talos/pkg/machinery/resources/cluster" @@ -73,7 +73,7 @@ func (ctrl *MemberController) Run(ctx context.Context, r controller.Runtime, log if err = r.Modify(ctx, cluster.NewMember(cluster.NamespaceName, affiliateSpec.Nodename), func(res resource.Resource) error { spec := res.(*cluster.Member).TypedSpec() - spec.Addresses = append([]netip.Addr(nil), affiliateSpec.Addresses...) + spec.Addresses = slices.Clone(affiliateSpec.Addresses) spec.Hostname = affiliateSpec.Hostname spec.MachineType = affiliateSpec.MachineType spec.OperatingSystem = affiliateSpec.OperatingSystem diff --git a/internal/app/machined/pkg/controllers/cri/seccomp_profile.go b/internal/app/machined/pkg/controllers/cri/seccomp_profile.go index 64c5057db..2b4b2ae15 100644 --- a/internal/app/machined/pkg/controllers/cri/seccomp_profile.go +++ b/internal/app/machined/pkg/controllers/cri/seccomp_profile.go @@ -85,7 +85,7 @@ func (ctrl *SeccompProfileController) Run(ctx context.Context, r controller.Runt } // list keys for cleanup - list, err := safe.ReaderList[*cri.SeccompProfile](ctx, r, resource.NewMetadata(cri.NamespaceName, cri.SeccompProfileType, "", resource.VersionUndefined)) + list, err := safe.ReaderListAll[*cri.SeccompProfile](ctx, r) if err != nil { return fmt.Errorf("error listing seccomp profiles: %w", err) } 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 5cbea284d..d704dae37 100644 --- a/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go +++ b/internal/app/machined/pkg/controllers/cri/seccomp_profile_file.go @@ -107,7 +107,7 @@ func (ctrl *SeccompProfileFileController) Run(ctx context.Context, r controller. case <-r.EventCh(): } - list, err := safe.ReaderList[*cri.SeccompProfile](ctx, r, resource.NewMetadata(cri.NamespaceName, cri.SeccompProfileType, "", resource.VersionUndefined)) + list, err := safe.ReaderListAll[*cri.SeccompProfile](ctx, r) if err != nil { return fmt.Errorf("error listing seccomp profiles: %w", err) } diff --git a/internal/app/machined/pkg/controllers/k8s/address_filter.go b/internal/app/machined/pkg/controllers/k8s/address_filter.go index 2e258256b..fe2fe2044 100644 --- a/internal/app/machined/pkg/controllers/k8s/address_filter.go +++ b/internal/app/machined/pkg/controllers/k8s/address_filter.go @@ -12,6 +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/go-pointer" "go.uber.org/zap" @@ -98,7 +99,7 @@ func (ctrl *AddressFilterController) Run(ctx context.Context, r controller.Runti if err = r.Modify(ctx, network.NewNodeAddressFilter(network.NamespaceName, k8s.NodeAddressFilterNoK8s), func(r resource.Resource) error { spec := r.(*network.NodeAddressFilter).TypedSpec() - spec.ExcludeSubnets = append(append([]netip.Prefix(nil), podCIDRs...), serviceCIDRs...) + spec.ExcludeSubnets = append(slices.Clone(podCIDRs), serviceCIDRs...) return nil }); err != nil { @@ -110,7 +111,7 @@ func (ctrl *AddressFilterController) Run(ctx context.Context, r controller.Runti if err = r.Modify(ctx, network.NewNodeAddressFilter(network.NamespaceName, k8s.NodeAddressFilterOnlyK8s), func(r resource.Resource) error { spec := r.(*network.NodeAddressFilter).TypedSpec() - spec.IncludeSubnets = append(append([]netip.Prefix(nil), podCIDRs...), serviceCIDRs...) + spec.IncludeSubnets = append(slices.Clone(podCIDRs), serviceCIDRs...) return nil }); err != nil { diff --git a/internal/app/machined/pkg/controllers/k8s/node_label_spec.go b/internal/app/machined/pkg/controllers/k8s/node_label_spec.go index ac57d0e7a..4f4a5d458 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_label_spec.go +++ b/internal/app/machined/pkg/controllers/k8s/node_label_spec.go @@ -72,9 +72,9 @@ func (ctrl *NodeLabelSpecController) Run(ctx context.Context, r controller.Runti } for key, value := range nodeLabels { - if err = r.Modify(ctx, k8s.NewNodeLabelSpec(key), func(r resource.Resource) error { - r.(*k8s.NodeLabelSpec).TypedSpec().Key = key - r.(*k8s.NodeLabelSpec).TypedSpec().Value = value + if err = safe.WriterModify(ctx, r, k8s.NewNodeLabelSpec(key), func(k *k8s.NodeLabelSpec) error { + k.TypedSpec().Key = key + k.TypedSpec().Value = value return nil }); err != nil { @@ -82,7 +82,7 @@ func (ctrl *NodeLabelSpecController) Run(ctx context.Context, r controller.Runti } } - labelSpecs, err := safe.ReaderList[*k8s.NodeLabelSpec](ctx, r, k8s.NewNodeLabelSpec("").Metadata()) + labelSpecs, err := safe.ReaderListAll[*k8s.NodeLabelSpec](ctx, r) if err != nil { return fmt.Errorf("error getting node label specs: %w", err) } diff --git a/internal/app/machined/pkg/controllers/k8s/node_labels_apply.go b/internal/app/machined/pkg/controllers/k8s/node_labels_apply.go index f35dd154c..23872b572 100644 --- a/internal/app/machined/pkg/controllers/k8s/node_labels_apply.go +++ b/internal/app/machined/pkg/controllers/k8s/node_labels_apply.go @@ -92,7 +92,7 @@ func (ctrl *NodeLabelsApplyController) Run(ctx context.Context, r controller.Run } func (ctrl *NodeLabelsApplyController) getNodeLabelSpecs(ctx context.Context, r controller.Runtime) (map[string]string, error) { - items, err := safe.ReaderList[*k8s.NodeLabelSpec](ctx, r, resource.NewMetadata(k8s.NamespaceName, k8s.NodeLabelSpecType, "", resource.VersionUndefined)) + items, err := safe.ReaderListAll[*k8s.NodeLabelSpec](ctx, r) if err != nil { return nil, fmt.Errorf("error listing node label spec resources: %w", err) } 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 03b5868e1..5107df9f7 100644 --- a/internal/app/machined/pkg/controllers/k8s/static_pod_server.go +++ b/internal/app/machined/pkg/controllers/k8s/static_pod_server.go @@ -99,7 +99,7 @@ func (ctrl *StaticPodServerController) Run(ctx context.Context, r controller.Run } func (ctrl *StaticPodServerController) buildPodList(ctx context.Context, r controller.Runtime, logger *zap.Logger) ([]byte, error) { - staticPods, err := safe.ReaderList[*k8s.StaticPod](ctx, r, resource.NewMetadata(k8s.NamespaceName, k8s.StaticPodType, "", resource.VersionUndefined)) + staticPods, err := safe.ReaderListAll[*k8s.StaticPod](ctx, r) if err != nil { return nil, fmt.Errorf("error listing static pods: %w", err) } diff --git a/internal/app/machined/pkg/controllers/kubespan/manager.go b/internal/app/machined/pkg/controllers/kubespan/manager.go index f9309c4a3..c3c9826ec 100644 --- a/internal/app/machined/pkg/controllers/kubespan/manager.go +++ b/internal/app/machined/pkg/controllers/kubespan/manager.go @@ -15,6 +15,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/value" "github.com/siderolabs/go-pointer" "go.uber.org/zap" @@ -343,7 +344,7 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo PresharedKey: cfgSpec.SharedSecret, Endpoint: endpoint, PersistentKeepaliveInterval: constants.KubeSpanDefaultPeerKeepalive, - AllowedIPs: append([]netip.Prefix(nil), peerSpec.AllowedIPs...), + AllowedIPs: slices.Clone(peerSpec.AllowedIPs), }) } diff --git a/internal/app/machined/pkg/controllers/kubespan/peer_spec.go b/internal/app/machined/pkg/controllers/kubespan/peer_spec.go index cfd6e5bfc..9bb653999 100644 --- a/internal/app/machined/pkg/controllers/kubespan/peer_spec.go +++ b/internal/app/machined/pkg/controllers/kubespan/peer_spec.go @@ -7,7 +7,6 @@ package kubespan import ( "context" "fmt" - "net/netip" "github.com/cosi-project/runtime/pkg/controller" "github.com/cosi-project/runtime/pkg/resource" @@ -161,7 +160,7 @@ func (ctrl *PeerSpecController) Run(ctx context.Context, r controller.Runtime, l *res.(*kubespan.PeerSpec).TypedSpec() = kubespan.PeerSpecSpec{ Address: spec.KubeSpan.Address, AllowedIPs: ipSet.Prefixes(), - Endpoints: append([]netip.AddrPort(nil), spec.KubeSpan.Endpoints...), + Endpoints: slices.Clone(spec.KubeSpan.Endpoints), Label: spec.Nodename, } diff --git a/internal/app/machined/pkg/controllers/network/device_config.go b/internal/app/machined/pkg/controllers/network/device_config.go index 38c4b0069..baa53d585 100644 --- a/internal/app/machined/pkg/controllers/network/device_config.go +++ b/internal/app/machined/pkg/controllers/network/device_config.go @@ -81,7 +81,7 @@ func (ctrl *DeviceConfigController) Run(ctx context.Context, r controller.Runtim case <-r.EventCh(): } - links, err := safe.ReaderList[*network.LinkStatus](ctx, r, resource.NewMetadata(network.NamespaceName, network.LinkStatusType, "", resource.VersionUndefined)) + links, err := safe.ReaderListAll[*network.LinkStatus](ctx, r) if err != nil { return err } diff --git a/internal/app/machined/pkg/controllers/network/probe.go b/internal/app/machined/pkg/controllers/network/probe.go index 2b87f5400..c409d4f88 100644 --- a/internal/app/machined/pkg/controllers/network/probe.go +++ b/internal/app/machined/pkg/controllers/network/probe.go @@ -9,7 +9,6 @@ import ( "fmt" "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" "go.uber.org/zap" @@ -81,7 +80,7 @@ func (ctrl *ProbeController) Run(ctx context.Context, r controller.Runtime, logg //nolint:gocyclo func (ctrl *ProbeController) reconcileRunners(ctx context.Context, r controller.Runtime, logger *zap.Logger, notifyCh chan<- probe.Notification) error { - specList, err := safe.ReaderList[*network.ProbeSpec](ctx, r, resource.NewMetadata(network.NamespaceName, network.ProbeSpecType, "", resource.VersionUndefined)) + specList, err := safe.ReaderListAll[*network.ProbeSpec](ctx, r) if err != nil { return fmt.Errorf("error listing probe specs: %w", err) } @@ -122,7 +121,7 @@ func (ctrl *ProbeController) reconcileRunners(ctx context.Context, r controller. } // clean up statuses which should no longer exist - statusList, err := safe.ReaderList[*network.ProbeStatus](ctx, r, resource.NewMetadata(network.NamespaceName, network.ProbeStatusType, "", resource.VersionUndefined)) + statusList, err := safe.ReaderListAll[*network.ProbeStatus](ctx, r) if err != nil { return fmt.Errorf("error listing probe statuses: %w", err) } diff --git a/internal/app/machined/pkg/controllers/network/status.go b/internal/app/machined/pkg/controllers/network/status.go index 3ec9b70ab..05abf366b 100644 --- a/internal/app/machined/pkg/controllers/network/status.go +++ b/internal/app/machined/pkg/controllers/network/status.go @@ -95,7 +95,7 @@ func (ctrl *StatusController) Run(ctx context.Context, r controller.Runtime, log // connectivity // if any probes are defined, use their status, otherwise rely on presence of the default gateway - probeStatuses, err := safe.ReaderList[*network.ProbeStatus](ctx, r, resource.NewMetadata(network.NamespaceName, network.ProbeStatusType, "", resource.VersionUndefined)) + probeStatuses, err := safe.ReaderListAll[*network.ProbeStatus](ctx, r) if err != nil { return fmt.Errorf("error getting probe statuses: %w", err) } @@ -115,7 +115,7 @@ func (ctrl *StatusController) Run(ctx context.Context, r controller.Runtime, log } else if probeStatuses.Len() == 0 { var routes safe.List[*network.RouteStatus] - routes, err = safe.ReaderList[*network.RouteStatus](ctx, r, resource.NewMetadata(network.NamespaceName, network.RouteStatusType, "", resource.VersionUndefined)) + routes, err = safe.ReaderListAll[*network.RouteStatus](ctx, r) if err != nil { return fmt.Errorf("error getting routes: %w", err) } diff --git a/internal/app/machined/pkg/controllers/network/timeserver_config.go b/internal/app/machined/pkg/controllers/network/timeserver_config.go index 17215110f..b7c421130 100644 --- a/internal/app/machined/pkg/controllers/network/timeserver_config.go +++ b/internal/app/machined/pkg/controllers/network/timeserver_config.go @@ -11,6 +11,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/go-pointer" "github.com/siderolabs/go-procfs/procfs" "go.uber.org/zap" @@ -195,7 +196,7 @@ func (ctrl *TimeServerConfigController) parseMachineConfiguration(cfgProvider ta return } - spec.NTPServers = append([]string(nil), cfgProvider.Machine().Time().Servers()...) + spec.NTPServers = slices.Clone(cfgProvider.Machine().Time().Servers()) spec.ConfigLayer = network.ConfigMachineConfiguration return spec 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 61edaf428..f6fc37bec 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 @@ -66,7 +66,7 @@ func (m *mockImageService) List(ctx context.Context, filters ...string) ([]image m.mu.Lock() defer m.mu.Unlock() - return append([]images.Image(nil), m.images...), nil + return slices.Clone(m.images), nil } func (m *mockImageService) Create(ctx context.Context, image images.Image) (images.Image, error) { diff --git a/internal/app/machined/pkg/controllers/runtime/machine_status.go b/internal/app/machined/pkg/controllers/runtime/machine_status.go index 919e51d36..996a9a10c 100644 --- a/internal/app/machined/pkg/controllers/runtime/machine_status.go +++ b/internal/app/machined/pkg/controllers/runtime/machine_status.go @@ -11,7 +11,6 @@ import ( "sync" "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/go-pointer" @@ -247,7 +246,7 @@ func (ctrl *MachineStatusController) networkReadyCheck(ctx context.Context, r co func (ctrl *MachineStatusController) servicesCheck(requiredServices []string) func(ctx context.Context, r controller.Runtime) error { return func(ctx context.Context, r controller.Runtime) error { - serviceList, err := safe.ReaderList[*v1alpha1.Service](ctx, r, resource.NewMetadata(v1alpha1.NamespaceName, v1alpha1.ServiceType, "", resource.VersionUndefined)) + serviceList, err := safe.ReaderListAll[*v1alpha1.Service](ctx, r) if err != nil { return err } @@ -290,7 +289,7 @@ func (ctrl *MachineStatusController) servicesCheck(requiredServices []string) fu //nolint:gocyclo func (ctrl *MachineStatusController) staticPodsCheck(ctx context.Context, r controller.Runtime) error { - staticPodList, err := safe.ReaderList[*k8s.StaticPodStatus](ctx, r, resource.NewMetadata(k8s.NamespaceName, k8s.StaticPodStatusType, "", resource.VersionUndefined)) + staticPodList, err := safe.ReaderListAll[*k8s.StaticPodStatus](ctx, r) if err != nil { return err } diff --git a/internal/app/machined/pkg/controllers/time/sync_test.go b/internal/app/machined/pkg/controllers/time/sync_test.go index 42a683751..e468cffa6 100644 --- a/internal/app/machined/pkg/controllers/time/sync_test.go +++ b/internal/app/machined/pkg/controllers/time/sync_test.go @@ -18,6 +18,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/go-pointer" "github.com/siderolabs/go-retry/retry" "github.com/stretchr/testify/suite" @@ -507,19 +508,19 @@ func (mock *mockSyncer) getTimeServers() (servers []string) { mock.mu.Lock() defer mock.mu.Unlock() - return append([]string(nil), mock.timeServers...) + return slices.Clone(mock.timeServers) } func (mock *mockSyncer) SetTimeServers(servers []string) { mock.mu.Lock() defer mock.mu.Unlock() - mock.timeServers = append([]string(nil), servers...) + mock.timeServers = slices.Clone(servers) } func newMockSyncer(_ *zap.Logger, servers []string) *mockSyncer { return &mockSyncer{ - timeServers: append([]string(nil), servers...), + timeServers: slices.Clone(servers), syncedCh: make(chan struct{}, 1), epochCh: make(chan struct{}, 1), } 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 fe86161f1..cc9a4f154 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/equinixmetal/equinix.go @@ -16,7 +16,6 @@ import ( "net/netip" "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/go-procfs/procfs" @@ -126,7 +125,7 @@ func (p *EquinixMetal) ParseMetadata(ctx context.Context, equinixMetadata *Metad // determine bond name and build list of interfaces enslaved by the bond bondName := "" - hostInterfaces, err := safe.StateList[*network.LinkStatus](ctx, st, resource.NewMetadata(network.NamespaceName, network.LinkStatusType, "", resource.VersionUndefined)) + hostInterfaces, err := safe.StateListAll[*network.LinkStatus](ctx, st) if err != nil { return nil, fmt.Errorf("error listing host interfaces: %w", err) } 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 e5be91d0c..b1537ccc2 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/openstack/openstack.go @@ -15,7 +15,6 @@ import ( "net/netip" "strings" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/siderolabs/go-procfs/procfs" @@ -83,7 +82,7 @@ func (o *Openstack) ParseMetadata( }) } - hostInterfaces, err := safe.StateList[*network.LinkStatus](ctx, st, resource.NewMetadata(network.NamespaceName, network.LinkStatusType, "", resource.VersionUndefined)) + hostInterfaces, err := safe.StateListAll[*network.LinkStatus](ctx, st) if err != nil { return nil, fmt.Errorf("error listing host interfaces: %w", err) } 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 30c6c3166..d4a1e4cef 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/platform/vmware/metadata.go @@ -12,7 +12,6 @@ import ( "net/netip" "strings" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" @@ -88,7 +87,7 @@ type DHCPOverrides struct { func (v *VMware) ApplyNetworkConfigV2(ctx context.Context, st state.State, config *NetworkConfig, networkConfig *runtime.PlatformNetworkConfig) error { var dnsIPs []netip.Addr - hostInterfaces, err := safe.StateList[*network.LinkStatus](ctx, st, resource.NewMetadata(network.NamespaceName, network.LinkStatusType, "", resource.VersionUndefined)) + hostInterfaces, err := safe.StateListAll[*network.LinkStatus](ctx, st) if err != nil { return fmt.Errorf("error listing host interfaces: %w", err) } diff --git a/internal/app/machined/pkg/system/health/status.go b/internal/app/machined/pkg/system/health/status.go index 3c11da444..c939f6076 100644 --- a/internal/app/machined/pkg/system/health/status.go +++ b/internal/app/machined/pkg/system/health/status.go @@ -8,6 +8,7 @@ import ( "sync" "time" + "github.com/siderolabs/gen/slices" "google.golang.org/protobuf/types/known/timestamppb" machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine" @@ -65,7 +66,7 @@ func (state *State) Update(healthy bool, message string) { var subscribers []chan<- StateChange if notify { - subscribers = append([]chan<- StateChange(nil), state.subscribers...) + subscribers = slices.Clone(state.subscribers) } state.Unlock() diff --git a/internal/app/machined/pkg/system/service_runner.go b/internal/app/machined/pkg/system/service_runner.go index 4ad9f5318..5d891f808 100644 --- a/internal/app/machined/pkg/system/service_runner.go +++ b/internal/app/machined/pkg/system/service_runner.go @@ -407,7 +407,7 @@ func (svcrunner *ServiceRunner) Unsubscribe(event StateEvent, ch chan<- struct{} func (svcrunner *ServiceRunner) notifyEvent(event StateEvent) { svcrunner.mu.Lock() - channels := append([]chan<- struct{}(nil), svcrunner.stateSubscribers[event]...) + channels := slices.Clone(svcrunner.stateSubscribers[event]) svcrunner.mu.Unlock() for _, ch := range channels { diff --git a/internal/integration/api/discovery.go b/internal/integration/api/discovery.go index 3deed7492..1036081fc 100644 --- a/internal/integration/api/discovery.go +++ b/internal/integration/api/discovery.go @@ -281,7 +281,7 @@ func (suite *DiscoverySuite) TestKubeSpanPeers() { func (suite *DiscoverySuite) getMembers(nodeCtx context.Context) []*cluster.Member { var result []*cluster.Member - items, err := safe.StateList[*cluster.Member](nodeCtx, suite.Client.COSI, resource.NewMetadata(cluster.NamespaceName, cluster.MemberType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*cluster.Member](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) it := safe.IteratorFromList(items) @@ -320,7 +320,7 @@ func (suite *DiscoverySuite) getAffiliates(nodeCtx context.Context, namespace re func (suite *DiscoverySuite) getKubeSpanPeerSpecs(nodeCtx context.Context) []*kubespan.PeerSpec { var result []*kubespan.PeerSpec - items, err := safe.StateList[*kubespan.PeerSpec](nodeCtx, suite.Client.COSI, resource.NewMetadata(kubespan.NamespaceName, kubespan.PeerSpecType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*kubespan.PeerSpec](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) it := safe.IteratorFromList(items) @@ -336,7 +336,7 @@ func (suite *DiscoverySuite) getKubeSpanPeerSpecs(nodeCtx context.Context) []*ku func (suite *DiscoverySuite) getKubeSpanPeerStatuses(nodeCtx context.Context) []*kubespan.PeerStatus { var result []*kubespan.PeerStatus - items, err := safe.StateList[*kubespan.PeerStatus](nodeCtx, suite.Client.COSI, resource.NewMetadata(kubespan.NamespaceName, kubespan.PeerStatusType, "", resource.VersionUndefined)) + items, err := safe.StateListAll[*kubespan.PeerStatus](nodeCtx, suite.Client.COSI) suite.Require().NoError(err) it := safe.IteratorFromList(items) diff --git a/internal/integration/api/resources.go b/internal/integration/api/resources.go index 3d8d5a136..8bf5c4f79 100644 --- a/internal/integration/api/resources.go +++ b/internal/integration/api/resources.go @@ -55,7 +55,7 @@ func (suite *ResourcesSuite) TestListResources() { var namespaces []string - nsList, err := safe.StateList[*meta.Namespace](ctx, suite.Client.COSI, resource.NewMetadata(meta.NamespaceName, meta.NamespaceType, "", resource.VersionUndefined)) + nsList, err := safe.StateListAll[*meta.Namespace](ctx, suite.Client.COSI) suite.Require().NoError(err) nsIt := safe.IteratorFromList(nsList) @@ -66,7 +66,7 @@ func (suite *ResourcesSuite) TestListResources() { var resourceTypes []string - rdList, err := safe.StateList[*meta.ResourceDefinition](ctx, suite.Client.COSI, resource.NewMetadata(meta.NamespaceName, meta.ResourceDefinitionType, "", resource.VersionUndefined)) + rdList, err := safe.StateListAll[*meta.ResourceDefinition](ctx, suite.Client.COSI) suite.Require().NoError(err) rdIt := safe.IteratorFromList(rdList) diff --git a/internal/integration/base/cluster.go b/internal/integration/base/cluster.go index 0b986a3b5..4758eb267 100644 --- a/internal/integration/base/cluster.go +++ b/internal/integration/base/cluster.go @@ -7,6 +7,8 @@ package base import ( + "github.com/siderolabs/gen/slices" + "github.com/siderolabs/talos/pkg/cluster" "github.com/siderolabs/talos/pkg/machinery/config/types/v1alpha1/machine" ) @@ -28,7 +30,7 @@ func newNodeInfo(masterNodes, workerNodes []string) (*infoWrapper, error) { } return &infoWrapper{ - nodeInfos: append(append([]cluster.NodeInfo(nil), controlPlaneNodeInfos...), workerNodeInfos...), + nodeInfos: append(slices.Clone(controlPlaneNodeInfos), workerNodeInfos...), nodeInfosByType: map[machine.Type][]cluster.NodeInfo{ machine.TypeControlPlane: controlPlaneNodeInfos, machine.TypeWorker: workerNodeInfos, diff --git a/internal/pkg/etcd/endpoints.go b/internal/pkg/etcd/endpoints.go index fbb1b571b..120a4f7bf 100644 --- a/internal/pkg/etcd/endpoints.go +++ b/internal/pkg/etcd/endpoints.go @@ -8,7 +8,6 @@ import ( "context" "fmt" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" @@ -21,7 +20,7 @@ import ( // // It is not guaranteed that etcd is running on each listed endpoint. func GetEndpoints(ctx context.Context, resources state.State) ([]string, error) { - endpointResources, err := safe.StateList[*k8s.Endpoint](ctx, resources, resource.NewMetadata(k8s.ControlPlaneNamespaceName, k8s.EndpointType, "", resource.VersionUndefined)) + endpointResources, err := safe.StateListAll[*k8s.Endpoint](ctx, resources) if err != nil { return nil, fmt.Errorf("error getting endpoints resources: %w", err) } diff --git a/internal/pkg/logind/logind.go b/internal/pkg/logind/logind.go index c9402105c..6b0db1bfa 100644 --- a/internal/pkg/logind/logind.go +++ b/internal/pkg/logind/logind.go @@ -12,6 +12,7 @@ import ( "github.com/godbus/dbus/v5" "github.com/godbus/dbus/v5/prop" + "github.com/siderolabs/gen/slices" "github.com/siderolabs/talos/pkg/machinery/constants" ) @@ -59,5 +60,5 @@ func (mock *logindMock) getPipe() []int { mock.mu.Lock() defer mock.mu.Unlock() - return append([]int(nil), mock.inhibitPipe...) + return slices.Clone(mock.inhibitPipe) } diff --git a/internal/pkg/meta/internal/adv/talos/talos.go b/internal/pkg/meta/internal/adv/talos/talos.go index 88c2cf3c2..ed4cff9a3 100644 --- a/internal/pkg/meta/internal/adv/talos/talos.go +++ b/internal/pkg/meta/internal/adv/talos/talos.go @@ -98,7 +98,7 @@ func (a *ADV) Unmarshal(buf []byte) error { return fmt.Errorf("adv: unexpected magic %x, expecting %x", magic2, Magic2) } - checksum := append([]byte(nil), buf[len(buf)-36:len(buf)-4]...) + checksum := slices.Clone(buf[len(buf)-36 : len(buf)-4]) copy(buf[len(buf)-36:len(buf)-4], make([]byte, 32)) diff --git a/internal/pkg/meta/internal/adv/talos/talos_test.go b/internal/pkg/meta/internal/adv/talos/talos_test.go index 7444845f4..c1419a0e2 100644 --- a/internal/pkg/meta/internal/adv/talos/talos_test.go +++ b/internal/pkg/meta/internal/adv/talos/talos_test.go @@ -9,6 +9,7 @@ import ( "sort" "testing" + "github.com/siderolabs/gen/slices" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -62,7 +63,7 @@ func TestMarshalUnmarshal(t *testing.T) { }, }, } { - corrupted := append([]byte(nil), b...) + corrupted := slices.Clone(b) for _, z := range c.zeroOut { copy(corrupted[z[0]:z[0]+z[1]], make([]byte, z[1])) diff --git a/internal/pkg/ntp/ntp.go b/internal/pkg/ntp/ntp.go index b7dd4f92c..90c21fd26 100644 --- a/internal/pkg/ntp/ntp.go +++ b/internal/pkg/ntp/ntp.go @@ -18,6 +18,7 @@ import ( "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" @@ -65,7 +66,7 @@ func NewSyncer(logger *zap.Logger, timeServers []string) *Syncer { syncer := &Syncer{ logger: logger, - timeServers: append([]string(nil), timeServers...), + timeServers: slices.Clone(timeServers), timeSynced: make(chan struct{}), restartSyncCh: make(chan struct{}, 1), @@ -127,7 +128,7 @@ func (syncer *Syncer) SetTimeServers(timeServers []string) { return } - syncer.timeServers = append([]string(nil), timeServers...) + syncer.timeServers = slices.Clone(timeServers) syncer.lastSyncServer = "" syncer.restartSync() diff --git a/internal/pkg/tui/installer/connection.go b/internal/pkg/tui/installer/connection.go index 52c3bacc6..333905834 100644 --- a/internal/pkg/tui/installer/connection.go +++ b/internal/pkg/tui/installer/connection.go @@ -8,7 +8,6 @@ import ( "context" "net" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "google.golang.org/grpc" "google.golang.org/grpc/metadata" @@ -97,11 +96,7 @@ func (c *Connection) Links() ([]Link, error) { ctx = client.WithNode(ctx, nodes[0]) } - items, err := safe.StateList[*network.LinkStatus]( - ctx, - c.nodeClient.COSI, - resource.NewMetadata(network.NamespaceName, network.LinkStatusType, "", resource.VersionUndefined), - ) + items, err := safe.StateListAll[*network.LinkStatus](ctx, c.nodeClient.COSI) if err != nil { return nil, err } diff --git a/pkg/archiver/tar.go b/pkg/archiver/tar.go index b5e1527b9..684b9b77e 100644 --- a/pkg/archiver/tar.go +++ b/pkg/archiver/tar.go @@ -16,6 +16,7 @@ import ( "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. @@ -105,7 +106,7 @@ func processFile(ctx context.Context, tw *tar.Writer, fi FileItem, buf []byte) e } case n < len(buf): header.Size = int64(n) - r = bytes.NewReader(append([]byte(nil), buf[:n]...)) + r = bytes.NewReader(slices.Clone(buf[:n])) default: // none matched so the file is bigger than we expected, ignore it and copy as zero size skipData = true diff --git a/pkg/cluster/check/kubernetes.go b/pkg/cluster/check/kubernetes.go index 7782448a4..eceed6d52 100644 --- a/pkg/cluster/check/kubernetes.go +++ b/pkg/cluster/check/kubernetes.go @@ -11,7 +11,6 @@ import ( "net/netip" "strings" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/siderolabs/gen/maps" "google.golang.org/grpc/codes" @@ -406,11 +405,7 @@ func K8sControlPlaneStaticPods(ctx context.Context, cl ClusterInfo) error { "kube-system/kube-scheduler": {}, } - items, err := safe.StateList[*k8s.StaticPodStatus]( - client.WithNode(ctx, node.InternalIP.String()), - c.COSI, - resource.NewMetadata(k8s.NamespaceName, k8s.StaticPodStatusType, "", resource.VersionUndefined), - ) + items, err := safe.StateListAll[*k8s.StaticPodStatus](client.WithNode(ctx, node.InternalIP.String()), c.COSI) if err != nil { if client.StatusCode(err) == codes.Unimplemented { // old version of Talos without COSI API diff --git a/pkg/cluster/check/nodes.go b/pkg/cluster/check/nodes.go index 8150b13ef..f1477083b 100644 --- a/pkg/cluster/check/nodes.go +++ b/pkg/cluster/check/nodes.go @@ -9,7 +9,6 @@ import ( "errors" fmt "fmt" - "github.com/cosi-project/runtime/pkg/resource" "github.com/cosi-project/runtime/pkg/safe" "github.com/cosi-project/runtime/pkg/state" "github.com/dustin/go-humanize" @@ -21,7 +20,6 @@ import ( "github.com/siderolabs/talos/pkg/machinery/config/types/v1alpha1/machine" "github.com/siderolabs/talos/pkg/machinery/constants" "github.com/siderolabs/talos/pkg/machinery/resources/runtime" - "github.com/siderolabs/talos/pkg/machinery/resources/v1alpha1" "github.com/siderolabs/talos/pkg/minimal" ) @@ -210,11 +208,7 @@ type mountData struct { var ErrOldTalosVersion = fmt.Errorf("old Talos version") func getEphemeralPartitionData(ctx context.Context, state state.State, nodeIP string) (mountData, error) { - items, err := safe.StateList[*runtime.MountStatus]( - client.WithNode(ctx, nodeIP), - state, - resource.NewMetadata(v1alpha1.NamespaceName, runtime.MountStatusType, "", resource.VersionUndefined), - ) + items, err := safe.StateListAll[*runtime.MountStatus](client.WithNode(ctx, nodeIP), state) if err != nil { if client.StatusCode(err) == codes.Unimplemented { // old version of Talos without COSI API diff --git a/pkg/cluster/kubernetes/kubelet.go b/pkg/cluster/kubernetes/kubelet.go index e1f601d42..6a5f1b91e 100644 --- a/pkg/cluster/kubernetes/kubelet.go +++ b/pkg/cluster/kubernetes/kubelet.go @@ -14,6 +14,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/go-retry/retry" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -37,7 +38,7 @@ func upgradeKubelet(ctx context.Context, cluster UpgradeProvider, options Upgrad options.Log("updating kubelet to version %q", options.Path.ToVersion()) - for _, node := range append(append([]string(nil), options.controlPlaneNodes...), options.workerNodes...) { + for _, node := range append(slices.Clone(options.controlPlaneNodes), options.workerNodes...) { if err := upgradeKubeletOnNode(ctx, cluster, options, node); err != nil { return fmt.Errorf("error updating node %q: %w", node, err) } diff --git a/pkg/cluster/support.go b/pkg/cluster/support.go index ed791c2b8..194e4d2d0 100644 --- a/pkg/cluster/support.go +++ b/pkg/cluster/support.go @@ -400,7 +400,7 @@ func getResources(ctx context.Context, c *client.Client) ([]nodeCollector, error return nil, fmt.Errorf("got more than one node in the context: %v", nodes) } - rds, err := safe.StateList[*meta.ResourceDefinition](client.WithNode(ctx, nodes[0]), c.COSI, resource.NewMetadata(meta.NamespaceName, meta.ResourceDefinitionType, "", resource.VersionUndefined)) + rds, err := safe.StateListAll[*meta.ResourceDefinition](client.WithNode(ctx, nodes[0]), c.COSI) if err != nil { return nil, err } diff --git a/pkg/machinery/client/resources.go b/pkg/machinery/client/resources.go index fbd178fd5..ac3389ef9 100644 --- a/pkg/machinery/client/resources.go +++ b/pkg/machinery/client/resources.go @@ -19,7 +19,7 @@ import ( // ResolveResourceKind resolves potentially aliased 'resourceType' and replaces empty 'resourceNamespace' with the default namespace for the resource. func (c *Client) ResolveResourceKind(ctx context.Context, resourceNamespace *resource.Namespace, resourceType resource.Type) (*meta.ResourceDefinition, error) { - registeredResources, err := safe.StateList[*meta.ResourceDefinition](ctx, c.COSI, resource.NewMetadata(meta.NamespaceName, meta.ResourceDefinitionType, "", resource.VersionUndefined)) + registeredResources, err := safe.StateListAll[*meta.ResourceDefinition](ctx, c.COSI) if err != nil { return nil, err } diff --git a/pkg/machinery/config/types/v1alpha1/generate/generate.go b/pkg/machinery/config/types/v1alpha1/generate/generate.go index 16cd46377..1c06c441c 100644 --- a/pkg/machinery/config/types/v1alpha1/generate/generate.go +++ b/pkg/machinery/config/types/v1alpha1/generate/generate.go @@ -23,6 +23,7 @@ import ( "time" "github.com/siderolabs/crypto/x509" + "github.com/siderolabs/gen/slices" tnet "github.com/siderolabs/net" "github.com/siderolabs/talos/pkg/machinery/config" @@ -640,7 +641,7 @@ func NewInput(clustername, endpoint, kubernetesVersion string, secrets *SecretsB return nil, err } - additionalSubjectAltNames := append([]string(nil), options.AdditionalSubjectAltNames...) + additionalSubjectAltNames := slices.Clone(options.AdditionalSubjectAltNames) if !options.VersionContract.SupportsDynamicCertSANs() { additionalSubjectAltNames = append(additionalSubjectAltNames, options.EndpointList...) diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go index 912c271e4..b6128d40e 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_provider.go @@ -600,7 +600,7 @@ func (d *Device) Interface() string { func (d *Device) Addresses() []string { switch { case len(d.DeviceAddresses) > 0: - return append([]string(nil), d.DeviceAddresses...) + return slices.Clone(d.DeviceAddresses) case d.DeviceCIDR != "": return []string{d.DeviceCIDR} default: @@ -1024,7 +1024,7 @@ func (b *Bridge) STP() config.STP { func (v *Vlan) Addresses() []string { switch { case len(v.VlanAddresses) > 0: - return append([]string(nil), v.VlanAddresses...) + return slices.Clone(v.VlanAddresses) case v.VlanCIDR != "": return []string{v.VlanCIDR} default: diff --git a/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go b/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go index e28cac700..f9a049b29 100644 --- a/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go +++ b/pkg/machinery/config/types/v1alpha1/v1alpha1_unstructured.go @@ -6,6 +6,8 @@ package v1alpha1 import ( "fmt" + + "github.com/siderolabs/gen/slices" ) // Unstructured allows wrapping any map[string]interface{} into a config object. @@ -58,7 +60,7 @@ func deepCopyUnstructured(x interface{}) interface{} { case string, bool, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64, complex64, complex128, nil: return x case []byte: - return append([]byte(nil), x...) + return slices.Clone(x) default: panic(fmt.Errorf("cannot deep copy %T", x)) } diff --git a/pkg/machinery/go.mod b/pkg/machinery/go.mod index 281334d54..a6768280f 100644 --- a/pkg/machinery/go.mod +++ b/pkg/machinery/go.mod @@ -8,7 +8,7 @@ replace gopkg.in/yaml.v3 => github.com/unix4ever/yaml v0.0.0-20220527175918-f17b require ( github.com/containerd/go-cni v1.1.9 - github.com/cosi-project/runtime v0.3.0 + github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a github.com/dustin/go-humanize v1.0.1 github.com/evanphx/json-patch v5.6.0+incompatible github.com/ghodss/yaml v1.0.0 @@ -20,7 +20,7 @@ require ( github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 github.com/santhosh-tekuri/jsonschema/v5 v5.3.0 github.com/siderolabs/crypto v0.4.0 - github.com/siderolabs/gen v0.4.4 + github.com/siderolabs/gen v0.4.5 github.com/siderolabs/go-api-signature v0.2.3 github.com/siderolabs/go-blockdevice v0.4.5 github.com/siderolabs/go-debug v0.2.2 @@ -61,7 +61,7 @@ require ( go.uber.org/zap v1.24.0 // indirect golang.org/x/crypto v0.8.0 // indirect golang.org/x/net v0.9.0 // indirect - golang.org/x/sync v0.1.0 // indirect + golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/pkg/machinery/go.sum b/pkg/machinery/go.sum index b586259a6..8a50f8f1a 100644 --- a/pkg/machinery/go.sum +++ b/pkg/machinery/go.sum @@ -21,8 +21,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.0 h1:f8++A7HUu7pQv9G3IhQworfA4TFLdzGWl3W+jLQF3Oo= -github.com/cosi-project/runtime v0.3.0/go.mod h1:BBFzt+ANf4BSlVGIbemVuz+Hql8F3tveWaWoErUi0lY= +github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a h1:H52VL6of0xYiEeM7HLBUnRCWKZzGKLV3QKLlTxM3iD4= +github.com/cosi-project/runtime v0.3.1-alpha.2.0.20230511165115-82b69d862a7a/go.mod h1:g+0MZ3+2MIUkUL7JYTqgYeo5f4j7dAuGem6apjBJ1XU= 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= @@ -111,8 +111,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.0 h1:uIkTLo0AGRc8l7h5l9r+GcYi9qfVP github.com/santhosh-tekuri/jsonschema/v5 v5.3.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= github.com/siderolabs/crypto v0.4.0 h1:o1KIR1KyevUcY9nbJlSyQAj7+p+rveGGF8LjAAFMtjc= github.com/siderolabs/crypto v0.4.0/go.mod h1:itZpBsJ9i0aH8jiHAuSlKCal7hni7X1aDYo6vGVl5LY= -github.com/siderolabs/gen v0.4.4 h1:iShHEAfb3i9jaeDXjT11TepsjdgGoChBKbUuUz4CqnQ= -github.com/siderolabs/gen v0.4.4/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= +github.com/siderolabs/gen v0.4.5 h1:rwXUVJlL7hYza1LrSVXfT905ZC9Rgei37jMKKs/+eP0= +github.com/siderolabs/gen v0.4.5/go.mod h1:wS8tFq7sn5vqKAuyS30vJUig3tX5v6q79VG4KfUnILM= github.com/siderolabs/go-api-signature v0.2.3 h1:7jaZ2R1TiJ/xAsMCiFCm72n/PsnoVYt1R+Savbj7l/0= github.com/siderolabs/go-api-signature v0.2.3/go.mod h1:HmO3kVEXgrXYzj0tLHT9HAAu0I4grz2/dJwq8AdzE5Q= github.com/siderolabs/go-blockdevice v0.4.5 h1:NgpR9XTl/N7WeL59QHBsseDD0Nb8Y2nel+W3u7xHIvY= @@ -175,8 +175,9 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ 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= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/pkg/provision/internal/inmemhttp/inmemhttp.go b/pkg/provision/internal/inmemhttp/inmemhttp.go index d44941516..e3942cde8 100644 --- a/pkg/provision/internal/inmemhttp/inmemhttp.go +++ b/pkg/provision/internal/inmemhttp/inmemhttp.go @@ -11,6 +11,8 @@ import ( "net/http" "strconv" "time" + + "github.com/siderolabs/gen/slices" ) // Server is an in-memory http web server. @@ -54,7 +56,7 @@ func NewServer(address string) (Server, error) { } func (s *server) AddFile(filename string, contents []byte) error { - contentsCopy := append([]byte(nil), contents...) + contentsCopy := slices.Clone(contents) s.mux.Handle("/"+filename, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { switch req.Method {