github.com/vmware/govmomi@v0.51.0/cli/extension/info.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 extension
     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/object"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  type info struct {
    21  	*flags.ClientFlag
    22  	*flags.OutputFlag
    23  }
    24  
    25  func init() {
    26  	cli.Register("extension.info", &info{})
    27  }
    28  
    29  func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) {
    30  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    31  	cmd.ClientFlag.Register(ctx, f)
    32  
    33  	cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx)
    34  	cmd.OutputFlag.Register(ctx, f)
    35  }
    36  
    37  func (cmd *info) Process(ctx context.Context) error {
    38  	if err := cmd.ClientFlag.Process(ctx); err != nil {
    39  		return err
    40  	}
    41  	if err := cmd.OutputFlag.Process(ctx); err != nil {
    42  		return err
    43  	}
    44  	return nil
    45  }
    46  
    47  func (cmd *info) Usage() string {
    48  	return "[KEY]..."
    49  }
    50  
    51  func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error {
    52  	c, err := cmd.Client()
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	m, err := object.GetExtensionManager(c)
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	var res infoResult
    63  	exts := make(map[string]types.Extension)
    64  
    65  	if f.NArg() == 1 {
    66  		e, err := m.Find(ctx, f.Arg(0))
    67  		if err != nil {
    68  			return err
    69  		}
    70  		if e != nil {
    71  			exts[f.Arg(0)] = *e
    72  		}
    73  	} else {
    74  		list, err := m.List(ctx)
    75  		if err != nil {
    76  			return err
    77  		}
    78  		if f.NArg() == 0 {
    79  			res.Extensions = list
    80  		} else {
    81  			for _, e := range list {
    82  				exts[e.Key] = e
    83  			}
    84  		}
    85  	}
    86  
    87  	for _, key := range f.Args() {
    88  		if e, ok := exts[key]; ok {
    89  			res.Extensions = append(res.Extensions, e)
    90  		} else {
    91  			return fmt.Errorf("extension %s not found", key)
    92  		}
    93  	}
    94  
    95  	return cmd.WriteResult(&res)
    96  }
    97  
    98  type infoResult struct {
    99  	Extensions []types.Extension `json:"extensions"`
   100  }
   101  
   102  func (r *infoResult) Write(w io.Writer) error {
   103  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
   104  
   105  	for _, e := range r.Extensions {
   106  		fmt.Fprintf(tw, "Name:\t%s\n", e.Key)
   107  		fmt.Fprintf(tw, "  Version:\t%s\n", e.Version)
   108  		fmt.Fprintf(tw, "  Description:\t%s\n", e.Description.GetDescription().Summary)
   109  		fmt.Fprintf(tw, "  Company:\t%s\n", e.Company)
   110  		fmt.Fprintf(tw, "  Last heartbeat time:\t%s\n", e.LastHeartbeatTime)
   111  		fmt.Fprintf(tw, "  Subject name:\t%s\n", e.SubjectName)
   112  		fmt.Fprintf(tw, "  Type:\t%s\n", e.Type)
   113  	}
   114  
   115  	return tw.Flush()
   116  }