github.com/vmware/govmomi@v0.51.0/cli/cluster/module/ls.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package module
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  	"io"
    12  	"text/tabwriter"
    13  
    14  	"github.com/vmware/govmomi/cli"
    15  	"github.com/vmware/govmomi/cli/flags"
    16  	"github.com/vmware/govmomi/vapi/cluster"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  type ls struct {
    21  	*flags.ClientFlag
    22  	*flags.OutputFlag
    23  	moduleID string
    24  }
    25  
    26  func init() {
    27  	cli.Register("cluster.module.ls", &ls{})
    28  }
    29  
    30  func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) {
    31  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    32  	cmd.ClientFlag.Register(ctx, f)
    33  
    34  	cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx)
    35  	cmd.OutputFlag.Register(ctx, f)
    36  
    37  	f.StringVar(&cmd.moduleID, "id", "", "Module ID")
    38  }
    39  
    40  func (cmd *ls) Process(ctx context.Context) error {
    41  	return cmd.ClientFlag.Process(ctx)
    42  }
    43  
    44  func (cmd *ls) Description() string {
    45  	return `List cluster modules.
    46  
    47  When -id is specified, that module's members are listed.
    48  
    49  Examples:
    50    govc cluster.module.ls
    51    govc cluster.module.ls -json | jq .
    52    govc cluster.module.ls -id module_id`
    53  }
    54  
    55  type lsResult []cluster.ModuleSummary
    56  
    57  func (r lsResult) Write(w io.Writer) error {
    58  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    59  
    60  	for _, i := range r {
    61  		fmt.Fprintf(tw, "%s\t%s\n", i.Cluster, i.Module)
    62  	}
    63  
    64  	return tw.Flush()
    65  }
    66  
    67  func (cmd *ls) List(ctx context.Context, m *cluster.Manager) error {
    68  	var res lsResult
    69  
    70  	res, err := m.ListModules(ctx)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	return cmd.WriteResult(res)
    76  }
    77  
    78  type lsMemberResult []types.ManagedObjectReference
    79  
    80  func (r lsMemberResult) Write(w io.Writer) error {
    81  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    82  
    83  	for _, i := range r {
    84  		fmt.Fprintf(tw, "%s\t%s\n", i.Reference().Type, i.Reference().Value)
    85  	}
    86  
    87  	return tw.Flush()
    88  }
    89  
    90  func (cmd *ls) ListMembers(ctx context.Context, m *cluster.Manager, moduleID string) error {
    91  	var res lsMemberResult
    92  
    93  	res, err := m.ListModuleMembers(ctx, moduleID)
    94  	if err != nil {
    95  		return err
    96  	}
    97  
    98  	return cmd.WriteResult(res)
    99  }
   100  
   101  func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error {
   102  	if f.NArg() != 0 {
   103  		return flag.ErrHelp
   104  	}
   105  
   106  	c, err := cmd.RestClient()
   107  	if err != nil {
   108  		return err
   109  	}
   110  
   111  	m := cluster.NewManager(c)
   112  
   113  	if cmd.moduleID == "" {
   114  		return cmd.List(ctx, m)
   115  	}
   116  
   117  	return cmd.ListMembers(ctx, m, cmd.moduleID)
   118  }