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

Merge pull request #2015 from rahafjrw/filter_incus_project_list

Add server-side filtering for `incus project list`
This commit is contained in:
Stéphane Graber
2025-04-28 22:23:08 -04:00
committed by GitHub
3 changed files with 65 additions and 2 deletions

View File

@@ -44,6 +44,26 @@ func (r *ProtocolIncus) GetProjects() ([]api.Project, error) {
return projects, nil
}
// GetProjectsWithFilter returns a filtered list of projects as Project structs.
func (r *ProtocolIncus) GetProjectsWithFilter(filters []string) ([]api.Project, error) {
if !r.HasExtension("projects") {
return nil, fmt.Errorf("The server is missing the required \"projects\" API extension")
}
projects := []api.Project{}
v := url.Values{}
v.Set("recursion", "1")
v.Set("filter", parseFilters(filters))
_, err := r.queryStruct("GET", fmt.Sprintf("/projects?%s", v.Encode()), nil, "", &projects)
if err != nil {
return nil, err
}
return projects, nil
}
// GetProject returns a Project entry for the provided name.
func (r *ProtocolIncus) GetProject(name string) (*api.Project, string, error) {
if !r.HasExtension("projects") {

View File

@@ -305,6 +305,7 @@ type InstanceServer interface {
// Project functions
GetProjectNames() (names []string, err error)
GetProjects() (projects []api.Project, err error)
GetProjectsWithFilter(filters []string) (projects []api.Project, err error)
GetProject(name string) (project *api.Project, ETag string, err error)
GetProjectState(name string) (project *api.ProjectState, err error)
GetProjectAccess(name string) (access api.Access, err error)