mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package client
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"time"
 | 
						|
 | 
						|
	controlapi "github.com/moby/buildkit/api/services/control"
 | 
						|
	apitypes "github.com/moby/buildkit/api/types"
 | 
						|
	"github.com/moby/buildkit/solver/pb"
 | 
						|
	specs "github.com/opencontainers/image-spec/specs-go/v1"
 | 
						|
	"github.com/pkg/errors"
 | 
						|
)
 | 
						|
 | 
						|
// WorkerInfo contains information about a worker
 | 
						|
type WorkerInfo struct {
 | 
						|
	ID        string
 | 
						|
	Labels    map[string]string
 | 
						|
	Platforms []specs.Platform
 | 
						|
	GCPolicy  []PruneInfo
 | 
						|
}
 | 
						|
 | 
						|
// ListWorkers lists all active workers
 | 
						|
func (c *Client) ListWorkers(ctx context.Context, opts ...ListWorkersOption) ([]*WorkerInfo, error) {
 | 
						|
	info := &ListWorkersInfo{}
 | 
						|
	for _, o := range opts {
 | 
						|
		o.SetListWorkersOption(info)
 | 
						|
	}
 | 
						|
 | 
						|
	req := &controlapi.ListWorkersRequest{Filter: info.Filter}
 | 
						|
	resp, err := c.controlClient().ListWorkers(ctx, req)
 | 
						|
	if err != nil {
 | 
						|
		return nil, errors.Wrap(err, "failed to list workers")
 | 
						|
	}
 | 
						|
 | 
						|
	var wi []*WorkerInfo
 | 
						|
 | 
						|
	for _, w := range resp.Record {
 | 
						|
		wi = append(wi, &WorkerInfo{
 | 
						|
			ID:        w.ID,
 | 
						|
			Labels:    w.Labels,
 | 
						|
			Platforms: pb.ToSpecPlatforms(w.Platforms),
 | 
						|
			GCPolicy:  fromAPIGCPolicy(w.GCPolicy),
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	return wi, nil
 | 
						|
}
 | 
						|
 | 
						|
// ListWorkersOption is an option for a worker list query
 | 
						|
type ListWorkersOption interface {
 | 
						|
	SetListWorkersOption(*ListWorkersInfo)
 | 
						|
}
 | 
						|
 | 
						|
// ListWorkersInfo is a payload for worker list query
 | 
						|
type ListWorkersInfo struct {
 | 
						|
	Filter []string
 | 
						|
}
 | 
						|
 | 
						|
func fromAPIGCPolicy(in []*apitypes.GCPolicy) []PruneInfo {
 | 
						|
	out := make([]PruneInfo, 0, len(in))
 | 
						|
	for _, p := range in {
 | 
						|
		out = append(out, PruneInfo{
 | 
						|
			All:          p.All,
 | 
						|
			Filter:       p.Filters,
 | 
						|
			KeepDuration: time.Duration(p.KeepDuration),
 | 
						|
			KeepBytes:    p.KeepBytes,
 | 
						|
		})
 | 
						|
	}
 | 
						|
	return out
 | 
						|
}
 |