github.com/vmware/govmomi@v0.51.0/cli/version/command.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 version
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  	"strings"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/cli/flags"
    15  )
    16  
    17  type version struct {
    18  	*flags.EmptyFlag
    19  
    20  	require string
    21  	long    bool // detailed govc version output
    22  }
    23  
    24  func init() {
    25  	cli.Register("version", &version{})
    26  }
    27  
    28  func (cmd *version) Register(ctx context.Context, f *flag.FlagSet) {
    29  	f.StringVar(&cmd.require, "require", "", "Require govc version >= this value")
    30  	f.BoolVar(&cmd.long, "l", false, "Print detailed govc version information")
    31  }
    32  
    33  func (cmd *version) Run(ctx context.Context, f *flag.FlagSet) error {
    34  	ver := strings.TrimPrefix(flags.BuildVersion, "v")
    35  	if cmd.require != "" {
    36  		v, err := flags.ParseVersion(ver)
    37  		if err != nil {
    38  			panic(err)
    39  		}
    40  
    41  		rv, err := flags.ParseVersion(cmd.require)
    42  		if err != nil {
    43  			return fmt.Errorf("failed to parse required version '%s': %s", cmd.require, err)
    44  		}
    45  
    46  		if !rv.Lte(v) {
    47  			return fmt.Errorf("version %s or higher is required, this is version %s", cmd.require, ver)
    48  		}
    49  	}
    50  
    51  	if cmd.long {
    52  		fmt.Printf("Build Version: %s\n", flags.BuildVersion)
    53  		fmt.Printf("Build Commit: %s\n", flags.BuildCommit)
    54  		fmt.Printf("Build Date: %s\n", flags.BuildDate)
    55  	} else {
    56  		fmt.Printf("govc %s\n", ver)
    57  	}
    58  
    59  	return nil
    60  }