package daemon import ( "cmp" "context" "fmt" "isle/bootstrap" "slices" "golang.org/x/exp/maps" ) // GetHostsResult wraps the results from the GetHosts RPC method. type GetHostsResult struct { Hosts []bootstrap.Host } // RPC exposes all RPC methods which are available to be called over the RPC // interface. type RPC struct { daemon Daemon } // NewRPC initializes and returns an RPC instance. func NewRPC(daemon Daemon) *RPC { return &RPC{daemon} } // GetHosts returns all hosts known to the cluster, sorted by their name. func (r *RPC) GetHosts( ctx context.Context, req struct{}, ) ( GetHostsResult, error, ) { hostsMap, err := r.daemon.GetGarageBootstrapHosts(ctx) if err != nil { return GetHostsResult{}, fmt.Errorf("retrieving hosts: %w", err) } hosts := maps.Values(hostsMap) slices.SortFunc(hosts, func(a, b bootstrap.Host) int { return cmp.Compare(a.Name, b.Name) }) return GetHostsResult{hosts}, nil }