1
0
mirror of https://github.com/lxc/incus.git synced 2026-02-05 09:46:19 +01:00

client: Add GetClusterMembersWithFilter

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
This commit is contained in:
Stéphane Graber
2025-07-25 15:47:55 -04:00
parent 44ff34ed3b
commit a1b00c9a25
2 changed files with 22 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ package incus
import (
"errors"
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
)
@@ -100,6 +101,26 @@ func (r *ProtocolIncus) GetClusterMemberNames() ([]string, error) {
return urlsToResourceNames(baseURL, urls...)
}
// GetClusterMembersWithFilter returns a filtered list of cluster members as ClusterMember structs.
func (r *ProtocolIncus) GetClusterMembersWithFilter(filters []string) ([]api.ClusterMember, error) {
if !r.HasExtension("clustering") {
return nil, errors.New("The server is missing the required \"clustering\" API extension")
}
members := []api.ClusterMember{}
v := url.Values{}
v.Set("recursion", "1")
v.Set("filter", parseFilters(filters))
_, err := r.queryStruct("GET", fmt.Sprintf("/cluster/members?%s", v.Encode()), nil, "", &members)
if err != nil {
return nil, err
}
return members, nil
}
// GetClusterMembers returns the current members of the cluster.
func (r *ProtocolIncus) GetClusterMembers() ([]api.ClusterMember, error) {
if !r.HasExtension("clustering") {

View File

@@ -399,6 +399,7 @@ type InstanceServer interface {
DeletePendingClusterMember(name string, force bool) (err error)
GetClusterMemberNames() (names []string, err error)
GetClusterMembers() (members []api.ClusterMember, err error)
GetClusterMembersWithFilter(filters []string) ([]api.ClusterMember, error)
GetClusterMember(name string) (member *api.ClusterMember, ETag string, err error)
UpdateClusterMember(name string, member api.ClusterMemberPut, ETag string) (err error)
RenameClusterMember(name string, member api.ClusterMemberPost) (err error)