Skip to content

Commit

Permalink
Align Connect resource fetching with Web UI (#42627)
Browse files Browse the repository at this point in the history
  • Loading branch information
ravicious authored Jun 7, 2024
1 parent 142ff0c commit 6c81695
Showing 1 changed file with 35 additions and 31 deletions.
66 changes: 35 additions & 31 deletions lib/teleterm/services/unifiedresources/unifiedresources.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

"github.com/gravitational/trace"

apiclient "github.com/gravitational/teleport/api/client"
"github.com/gravitational/teleport/api/client/proto"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/lib/teleterm/clusters"
Expand All @@ -36,7 +37,7 @@ var supportedResourceKinds = []string{
types.KindApp,
}

func List(ctx context.Context, cluster *clusters.Cluster, client Client, req *proto.ListUnifiedResourcesRequest) (*ListResponse, error) {
func List(ctx context.Context, cluster *clusters.Cluster, client apiclient.ListUnifiedResourcesClient, req *proto.ListUnifiedResourcesRequest) (*ListResponse, error) {
kinds := req.GetKinds()
if len(kinds) == 0 {
kinds = supportedResourceKinds
Expand All @@ -49,40 +50,34 @@ func List(ctx context.Context, cluster *clusters.Cluster, client Client, req *pr
}

req.Kinds = kinds
unifiedResourcesResponse, err := client.ListUnifiedResources(ctx, req)
enrichedResources, nextKey, err := apiclient.GetUnifiedResourcePage(ctx, client, req)
if err != nil {
return nil, trace.Wrap(err)
}

response := &ListResponse{
NextKey: unifiedResourcesResponse.NextKey,
NextKey: nextKey,
}

for _, unifiedResource := range unifiedResourcesResponse.Resources {
switch e := unifiedResource.GetResource().(type) {
case *proto.PaginatedResource_Node:
for _, enrichedResource := range enrichedResources {
switch r := enrichedResource.ResourceWithLabels.(type) {
case types.Server:
response.Resources = append(response.Resources, UnifiedResource{
Server: &clusters.Server{
URI: cluster.URI.AppendServer(e.Node.GetName()),
Server: e.Node,
URI: cluster.URI.AppendServer(r.GetName()),
Server: r,
},
})
case *proto.PaginatedResource_DatabaseServer:
case types.DatabaseServer:
db := r.GetDatabase()
response.Resources = append(response.Resources, UnifiedResource{
Database: &clusters.Database{
URI: cluster.URI.AppendDB(e.DatabaseServer.GetName()),
Database: e.DatabaseServer.GetDatabase(),
URI: cluster.URI.AppendDB(db.GetName()),
Database: db,
},
})
case *proto.PaginatedResource_KubernetesServer:
response.Resources = append(response.Resources, UnifiedResource{
Kube: &clusters.Kube{
URI: cluster.URI.AppendKube(e.KubernetesServer.GetCluster().GetName()),
KubernetesCluster: e.KubernetesServer.GetCluster(),
},
})
case *proto.PaginatedResource_AppServer:
app := e.AppServer.GetApp()
case types.AppServer:
app := r.GetApp()

response.Resources = append(response.Resources, UnifiedResource{
App: &clusters.App{
Expand All @@ -92,9 +87,9 @@ func List(ctx context.Context, cluster *clusters.Cluster, client Client, req *pr
App: app,
},
})
case *proto.PaginatedResource_AppServerOrSAMLIdPServiceProvider:
if e.AppServerOrSAMLIdPServiceProvider.IsAppServer() {
app := e.AppServerOrSAMLIdPServiceProvider.GetAppServer().GetApp()
case types.AppServerOrSAMLIdPServiceProvider:
if r.IsAppServer() {
app := r.GetAppServer().GetApp()
response.Resources = append(response.Resources, UnifiedResource{
App: &clusters.App{
URI: cluster.URI.AppendApp(app.GetName()),
Expand All @@ -104,27 +99,36 @@ func List(ctx context.Context, cluster *clusters.Cluster, client Client, req *pr
},
})
} else {
provider := e.AppServerOrSAMLIdPServiceProvider.GetSAMLIdPServiceProvider()
provider := r.GetSAMLIdPServiceProvider()
response.Resources = append(response.Resources, UnifiedResource{
SAMLIdPServiceProvider: &clusters.SAMLIdPServiceProvider{
URI: cluster.URI.AppendApp(provider.GetName()),
Provider: provider,
},
})
}
case types.KubeCluster:
kubeCluster := r
response.Resources = append(response.Resources, UnifiedResource{
Kube: &clusters.Kube{
URI: cluster.URI.AppendKube(kubeCluster.GetName()),
KubernetesCluster: kubeCluster,
},
})
case types.KubeServer:
kubeCluster := r.GetCluster()
response.Resources = append(response.Resources, UnifiedResource{
Kube: &clusters.Kube{
URI: cluster.URI.AppendKube(kubeCluster.GetName()),
KubernetesCluster: kubeCluster,
},
})
}
}

return response, nil
}

// Client represents auth.ClientI methods used by [List].
// During a normal operation, auth.ClientI is passed as this interface.
type Client interface {
// See auth.ClientI.ListUnifiedResources.
ListUnifiedResources(ctx context.Context, req *proto.ListUnifiedResourcesRequest) (*proto.ListUnifiedResourcesResponse, error)
}

type ListResponse struct {
Resources []UnifiedResource
NextKey string
Expand Down

0 comments on commit 6c81695

Please sign in to comment.