github.com/vmware/govmomi@v0.51.0/cli/vm/option/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 option
     6  
     7  import (
     8  	"context"
     9  	"encoding/json"
    10  	"flag"
    11  	"fmt"
    12  	"io"
    13  	"text/tabwriter"
    14  
    15  	"github.com/vmware/govmomi/cli"
    16  	"github.com/vmware/govmomi/cli/flags"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  type ls struct {
    21  	flags.EnvBrowser
    22  }
    23  
    24  func init() {
    25  	cli.Register("vm.option.ls", &ls{})
    26  }
    27  
    28  func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) {
    29  	cmd.EnvBrowser.Register(ctx, f)
    30  }
    31  
    32  func (cmd *ls) Description() string {
    33  	return `List VM config option keys for CLUSTER.
    34  
    35  Examples:
    36    govc vm.option.ls -cluster C0`
    37  }
    38  
    39  func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error {
    40  	b, err := cmd.Browser(ctx)
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	opts, err := b.QueryConfigOptionDescriptor(ctx)
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	return cmd.VirtualMachineFlag.WriteResult(&lsResult{opts})
    51  }
    52  
    53  type lsResult struct {
    54  	opts []types.VirtualMachineConfigOptionDescriptor
    55  }
    56  
    57  func (r *lsResult) Write(w io.Writer) error {
    58  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    59  
    60  	for _, d := range r.opts {
    61  		_, _ = fmt.Fprintf(tw, "%s\t%s\n", d.Key, d.Description)
    62  	}
    63  
    64  	return tw.Flush()
    65  }
    66  
    67  func (r *lsResult) Dump() any {
    68  	return r.opts
    69  }
    70  
    71  func (r *lsResult) MarshalJSON() ([]byte, error) {
    72  	return json.Marshal(r.opts)
    73  }