From e668524847c2e11cd3b7984c97bc6bb5f1a15f3d Mon Sep 17 00:00:00 2001 From: Johnny Steenbergen Date: Thu, 7 May 2020 14:42:06 -0700 Subject: [PATCH] feat(influx): add pkger list stacks command --- cmd/influx/pkg.go | 74 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/cmd/influx/pkg.go b/cmd/influx/pkg.go index 935fd88e97..78b19a8bf3 100644 --- a/cmd/influx/pkg.go +++ b/cmd/influx/pkg.go @@ -47,10 +47,12 @@ type cmdPkgBuilder struct { hideHeaders bool json bool name string + names []string org organization quiet bool recurse bool stackID string + stackIDs []string urls []string applyOpts struct { @@ -364,7 +366,10 @@ func (b *cmdPkgBuilder) cmdPkgValidate() *cobra.Command { func (b *cmdPkgBuilder) cmdStack() *cobra.Command { cmd := b.newCmd("stack", nil, false) cmd.Short = "Stack management commands" - cmd.AddCommand(b.cmdStackInit()) + cmd.AddCommand( + b.cmdStackInit(), + b.cmdStackList(), + ) return cmd } @@ -426,6 +431,73 @@ func (b *cmdPkgBuilder) stackInitRunEFn(cmd *cobra.Command, args []string) error return nil } +func (b *cmdPkgBuilder) cmdStackList() *cobra.Command { + cmd := b.newCmd("list [flags]", b.stackListRunEFn, true) + cmd.Short = "List stack(s) and associated resources" + cmd.Aliases = []string{"ls"} + + cmd.Flags().StringArrayVar(&b.stackIDs, "stack-id", nil, "Stack IDs to filter by") + cmd.Flags().StringArrayVar(&b.names, "stack-name", nil, "Stack names to filter by") + registerPrintOptions(cmd, &b.hideHeaders, &b.json) + + b.org.register(cmd, false) + + return cmd +} + +func (b *cmdPkgBuilder) stackListRunEFn(cmd *cobra.Command, args []string) error { + pkgSVC, orgSVC, err := b.svcFn() + if err != nil { + return err + } + + orgID, err := b.org.getID(orgSVC) + if err != nil { + return err + } + + var stackIDs []influxdb.ID + for _, rawID := range b.stackIDs { + id, err := influxdb.IDFromString(rawID) + if err != nil { + return err + } + stackIDs = append(stackIDs, *id) + } + + stacks, err := pkgSVC.ListStacks(context.Background(), orgID, pkger.ListFilter{ + StackIDs: stackIDs, + Names: b.names, + }) + if err != nil { + return err + } + + if b.json { + return b.writeJSON(stacks) + } + + tabW := b.newTabWriter() + defer tabW.Flush() + + tabW.HideHeaders(b.hideHeaders) + tabW.WriteHeaders("ID", "OrgID", "Name", "Description", "Num Resources", "URLs", "Created At") + + for _, stack := range stacks { + tabW.Write(map[string]interface{}{ + "ID": stack.ID, + "OrgID": stack.OrgID, + "Name": stack.Name, + "Description": stack.Description, + "Num Resources": len(stack.Resources), + "URLs": stack.URLs, + "Created At": stack.CreatedAt, + }) + } + + return nil +} + func (b *cmdPkgBuilder) registerPkgPrintOpts(cmd *cobra.Command) { cmd.Flags().BoolVarP(&b.disableColor, "disable-color", "c", false, "Disable color in output") cmd.Flags().BoolVar(&b.disableTableBorders, "disable-table-borders", false, "Disable table borders")