chore: bump runtime

Use new functions and methods from runtime module.

Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
This commit is contained in:
Dmitriy Matrenichev 2023-05-11 00:56:06 -04:00
parent 4f720d4653
commit 45e6e27af7
No known key found for this signature in database
GPG Key ID: D3363CF894E68892
52 changed files with 139 additions and 151 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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
})

View File

@ -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)

10
go.mod
View File

@ -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

19
go.sum
View File

@ -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=

View File

@ -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
)

View File

@ -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=

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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 {

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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),
})
}

View File

@ -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,
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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

View File

@ -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) {

View File

@ -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
}

View File

@ -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),
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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()

View File

@ -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 {

View File

@ -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)

View File

@ -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)

View File

@ -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,

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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))

View File

@ -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]))

View File

@ -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()

View File

@ -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
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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...)

View File

@ -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:

View File

@ -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))
}

View File

@ -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

View File

@ -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=

View File

@ -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 {