feat(compose): client methods for inspecting images

This commit is contained in:
Pavel Sviderski
2025-03-26 20:38:41 +10:00
parent c42968c812
commit 03c5c054e1
3 changed files with 77 additions and 0 deletions
+29
View File
@@ -2,13 +2,17 @@ package api
import (
"context"
"fmt"
"github.com/docker/docker/api/types/container"
"github.com/psviderski/uncloud/internal/machine/api/pb"
"google.golang.org/grpc/metadata"
"slices"
)
type Client interface {
ContainerClient
DNSClient
ImageClient
MachineClient
ServiceClient
}
@@ -27,6 +31,11 @@ type DNSClient interface {
GetDomain(ctx context.Context) (string, error)
}
type ImageClient interface {
InspectImage(ctx context.Context, id string) ([]MachineImage, error)
InspectRemoteImage(ctx context.Context, id string) ([]MachineRemoteImage, error)
}
type MachineClient interface {
InspectMachine(ctx context.Context, id string) (*pb.MachineMember, error)
ListMachines(ctx context.Context) ([]*pb.MachineMember, error)
@@ -35,3 +44,23 @@ type MachineClient interface {
type ServiceClient interface {
InspectService(ctx context.Context, id string) (Service, error)
}
// ProxyMachinesContext returns a new context that proxies gRPC requests to the specified machines.
// If namesOrIDs is nil, all machines are included.
func ProxyMachinesContext(ctx context.Context, cli MachineClient, namesOrIDs []string) (context.Context, error) {
machines, err := cli.ListMachines(ctx)
if err != nil {
return nil, fmt.Errorf("list machines: %w", err)
}
md := metadata.New(nil)
for _, m := range machines {
if namesOrIDs == nil ||
slices.Contains(namesOrIDs, m.Machine.Name) || slices.Contains(namesOrIDs, m.Machine.Id) {
machineIP, _ := m.Machine.Network.ManagementIp.ToAddr()
md.Append("machines", machineIP.String())
}
}
return metadata.NewOutgoingContext(ctx, md), nil
}