Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions lib/cache/kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"github.com/gravitational/trace"
"google.golang.org/protobuf/proto"

headerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/header/v1"
kubewaitingcontainerv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/utils/clientutils"
Expand Down Expand Up @@ -235,22 +234,14 @@ func newKubernetesWaitingContainerCollection(upstream services.KubeWaitingContai
proto.CloneOf[*kubewaitingcontainerv1.KubernetesWaitingContainer],
map[kubeWaitingContainerIndex]func(*kubewaitingcontainerv1.KubernetesWaitingContainer) string{
kubeWaitingContainerNameIndex: func(u *kubewaitingcontainerv1.KubernetesWaitingContainer) string {
return u.GetMetadata().GetName()
spec := u.GetSpec()
return kubernetesWaitingContainerCacheKey(spec)
},
}),
fetcher: func(ctx context.Context, loadSecrets bool) ([]*kubewaitingcontainerv1.KubernetesWaitingContainer, error) {
out, err := stream.Collect(clientutils.Resources(ctx, upstream.ListKubernetesWaitingContainers))
return out, trace.Wrap(err)
},
headerTransform: func(hdr *types.ResourceHeader) *kubewaitingcontainerv1.KubernetesWaitingContainer {
return &kubewaitingcontainerv1.KubernetesWaitingContainer{
Kind: hdr.Kind,
Version: hdr.Version,
Metadata: &headerv1.Metadata{
Name: hdr.Metadata.Name,
},
}
},
watch: w,
}, nil
}
Expand All @@ -269,7 +260,7 @@ func (c *Cache) ListKubernetesWaitingContainers(ctx context.Context, pageSize in
upstreamList: c.Config.KubeWaitingContainers.ListKubernetesWaitingContainers,
nextToken: func(t *kubewaitingcontainerv1.KubernetesWaitingContainer) string {
spec := t.GetSpec()
return spec.GetUsername() + "/" + spec.GetCluster() + "/" + spec.GetNamespace() + "/" + spec.GetPodName() + "/" + t.GetMetadata().GetName()
return kubernetesWaitingContainerCacheKey(spec)
},
}
out, next, err := lister.list(ctx, pageSize, pageToken)
Expand All @@ -293,7 +284,19 @@ func (c *Cache) GetKubernetesWaitingContainer(ctx context.Context, req *kubewait
},
}

name := req.GetUsername() + "/" + req.GetCluster() + "/" + req.GetNamespace() + "/" + req.GetPodName() + "/" + req.GetContainerName()
name := kubernetesWaitingContainerCacheKey(req)
out, err := getter.get(ctx, name)
return out, trace.Wrap(err)
}

type kubernetesWaitingContainerCacheKeyFieldGetter interface {
GetUsername() string
GetCluster() string
GetNamespace() string
GetPodName() string
GetContainerName() string
}

func kubernetesWaitingContainerCacheKey(c kubernetesWaitingContainerCacheKeyFieldGetter) string {
return c.GetUsername() + "/" + c.GetCluster() + "/" + c.GetNamespace() + "/" + c.GetPodName() + "/" + c.GetContainerName()
}
59 changes: 59 additions & 0 deletions lib/cache/kube_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ import (
"github.com/gravitational/trace"
"github.com/stretchr/testify/require"

kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/types/kubewaitingcontainer"
)

// TestKubernetes tests that CRUD operations on kubernetes clusters resources are
Expand Down Expand Up @@ -133,3 +135,60 @@ func TestKubernetesServers(t *testing.T) {
})

}

func TestKubernetesWaitingContainers(t *testing.T) {
t.Parallel()

p := newTestPack(t, ForProxy)
t.Cleanup(p.Close)

testResources153(t, p, testFuncs[*kubewaitingcontainerpb.KubernetesWaitingContainer]{
newResource: func(name string) (*kubewaitingcontainerpb.KubernetesWaitingContainer, error) {
waitingCont, err := kubewaitingcontainer.NewKubeWaitingContainer(
name,
&kubewaitingcontainerpb.KubernetesWaitingContainerSpec{
Username: "user",
Cluster: "cluster",
Namespace: "namespace",
PodName: "pod",
ContainerName: name,
Patch: []byte("{}"),
PatchType: "application/json-patch+json",
})

return waitingCont, trace.Wrap(err)
},
create: func(ctx context.Context, kwc *kubewaitingcontainerpb.KubernetesWaitingContainer) error {
_, err := p.kubeWaitingContainers.CreateKubernetesWaitingContainer(ctx, kwc)
return trace.Wrap(err)
},
cacheGet: func(ctx context.Context, name string) (*kubewaitingcontainerpb.KubernetesWaitingContainer, error) {
return p.cache.GetKubernetesWaitingContainer(ctx, &kubewaitingcontainerpb.GetKubernetesWaitingContainerRequest{
Username: "user",
Cluster: "cluster",
Namespace: "namespace",
PodName: "pod",
ContainerName: name,
})
},
list: func(ctx context.Context, i int, s string) ([]*kubewaitingcontainerpb.KubernetesWaitingContainer, string, error) {
return p.kubeWaitingContainers.ListKubernetesWaitingContainers(ctx, i, s)
},
cacheList: func(ctx context.Context, i int, s string) ([]*kubewaitingcontainerpb.KubernetesWaitingContainer, string, error) {
return p.cache.ListKubernetesWaitingContainers(ctx, i, s)
},
delete: func(ctx context.Context, s string) error {
return p.kubeWaitingContainers.DeleteKubernetesWaitingContainer(ctx, &kubewaitingcontainerpb.DeleteKubernetesWaitingContainerRequest{
Username: "user",
Cluster: "cluster",
Namespace: "namespace",
PodName: "pod",
ContainerName: s,
})
},
deleteAll: func(ctx context.Context) error {
return p.kubeWaitingContainers.DeleteAllKubernetesWaitingContainers(ctx)
},
})

}
Loading