From e2a8d98c75d250675b3ca890d446613c934754fd Mon Sep 17 00:00:00 2001 From: ALTHAF <114910365+Althaf66@users.noreply.github.com> Date: Tue, 19 Nov 2024 20:05:12 +0530 Subject: [PATCH] modified project list cmd (#260) Signed-off-by: ALTHAF --- cmd/harbor/root/project/list.go | 23 +++++++++++++++++++---- pkg/api/project_handler.go | 16 ++++++++++++++++ pkg/prompt/prompt.go | 2 +- pkg/views/project/list/view.go | 4 ++-- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/cmd/harbor/root/project/list.go b/cmd/harbor/root/project/list.go index e8a5594b..71f18de2 100644 --- a/cmd/harbor/root/project/list.go +++ b/cmd/harbor/root/project/list.go @@ -1,6 +1,7 @@ package project import ( + "github.com/goharbor/go-client/pkg/sdk/v2.0/client/project" "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/utils" list "github.com/goharbor/harbor-cli/pkg/views/project/list" @@ -9,15 +10,28 @@ import ( "github.com/spf13/viper" ) -// NewListProjectCommand creates a new `harbor list project` command func ListProjectCommand() *cobra.Command { var opts api.ListFlags - + var private bool + var public bool + var projects project.ListProjectsOK + var err error cmd := &cobra.Command{ Use: "list", Short: "list project", Run: func(cmd *cobra.Command, args []string) { - projects, err := api.ListProject(opts) + if private && public { + log.Fatal("Cannot specify both --private and --public flags") + } else if private { + opts.Public = false + projects, err = api.ListProject(opts) + } else if public { + opts.Public = true + projects, err = api.ListProject(opts) + } else { + projects, err = api.ListAllProjects(opts) + } + if err != nil { log.Fatalf("failed to get projects list: %v", err) } @@ -35,7 +49,8 @@ func ListProjectCommand() *cobra.Command { flags.StringVarP(&opts.Name, "name", "", "", "Name of the project") flags.Int64VarP(&opts.Page, "page", "", 1, "Page number") flags.Int64VarP(&opts.PageSize, "page-size", "", 10, "Size of per page") - flags.BoolVarP(&opts.Public, "public", "", false, "Project is public or private") + flags.BoolVarP(&private, "private", "", false, "Show only private projects") + flags.BoolVarP(&public, "public", "", false, "Show only public projects") flags.StringVarP(&opts.Q, "query", "q", "", "Query string to query resources") flags.StringVarP(&opts.Sort, "sort", "", "", "Sort the resource list in ascending or descending order") diff --git a/pkg/api/project_handler.go b/pkg/api/project_handler.go index 07824a30..3ab9f022 100644 --- a/pkg/api/project_handler.go +++ b/pkg/api/project_handler.go @@ -86,6 +86,22 @@ func ListProject(opts ...ListFlags) (project.ListProjectsOK, error) { return *response, nil } +func ListAllProjects(opts ...ListFlags) (project.ListProjectsOK, error) { + ctx, client, err := utils.ContextWithClient() + if err != nil { + return project.ListProjectsOK{}, err + } + var listFlags ListFlags + if len(opts) > 0 { + listFlags = opts[0] + } + response, err := client.Project.ListProjects(ctx, &project.ListProjectsParams{Page: &listFlags.Page, PageSize: &listFlags.PageSize, Q: &listFlags.Q, Sort: &listFlags.Sort, Name: &listFlags.Name}) + if err != nil { + return project.ListProjectsOK{}, err + } + return *response, nil +} + func LogsProject(projectName string) (*project.GetLogsOK, error) { ctx, client, err := utils.ContextWithClient() if err != nil { diff --git a/pkg/prompt/prompt.go b/pkg/prompt/prompt.go index f67f9b94..ccf96a5c 100644 --- a/pkg/prompt/prompt.go +++ b/pkg/prompt/prompt.go @@ -26,7 +26,7 @@ func GetRegistryNameFromUser() int64 { func GetProjectNameFromUser() string { projectName := make(chan string) go func() { - response, _ := api.ListProject() + response, _ := api.ListAllProjects() pview.ProjectList(response.Payload, projectName) }() diff --git a/pkg/views/project/list/view.go b/pkg/views/project/list/view.go index 5f979844..51dbb487 100644 --- a/pkg/views/project/list/view.go +++ b/pkg/views/project/list/view.go @@ -14,11 +14,11 @@ import ( var columns = []table.Column{ {Title: "ID", Width: 6}, - {Title: "Project Name", Width: 12}, + {Title: "Project Name", Width: 20}, {Title: "Access Level", Width: 12}, {Title: "Type", Width: 12}, {Title: "Repo Count", Width: 12}, - {Title: "Creation Time", Width: 30}, + {Title: "Creation Time", Width: 18}, } func ListProjects(projects []*models.Project) {