github.com/vmware/govmomi@v0.51.0/cli/kms/add.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 kms
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/flags"
    13  	"github.com/vmware/govmomi/crypto"
    14  	vapicrypto "github.com/vmware/govmomi/vapi/crypto"
    15  	"github.com/vmware/govmomi/vim25/types"
    16  )
    17  
    18  type add struct {
    19  	*flags.ClientFlag
    20  
    21  	types.KmipServerSpec
    22  	native vapicrypto.KmsProviderCreateSpec
    23  	nkp    bool
    24  }
    25  
    26  func init() {
    27  	cli.Register("kms.add", &add{})
    28  }
    29  
    30  func (cmd *add) Register(ctx context.Context, f *flag.FlagSet) {
    31  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    32  	cmd.ClientFlag.Register(ctx, f)
    33  
    34  	f.StringVar(&cmd.Info.Name, "n", "", "Server name")
    35  	f.StringVar(&cmd.Info.Address, "a", "", "Server address")
    36  	cmd.Info.Port = 5696 // default
    37  	f.Var(flags.NewInt32(&cmd.Info.Port), "p", "Server port")
    38  
    39  	f.BoolVar(&cmd.nkp, "N", false, "Add native key provider")
    40  	f.BoolVar(&cmd.native.Constraints.TpmRequired, "tpm", true, "Use only with TPM protected ESXi hosts (native only)")
    41  }
    42  
    43  func (cmd *add) Usage() string {
    44  	return "NAME"
    45  }
    46  
    47  func (cmd *add) Description() string {
    48  	return `Add KMS cluster.
    49  
    50  Server name and address are required, port defaults to 5696.
    51  
    52  Examples:
    53    govc kms.add -N knp
    54    govc kms.add -n my-server -a kms.example.com my-kp`
    55  }
    56  
    57  func (cmd *add) Run(ctx context.Context, f *flag.FlagSet) error {
    58  	id := f.Arg(0)
    59  	if id == "" {
    60  		return flag.ErrHelp
    61  	}
    62  
    63  	if cmd.nkp {
    64  		rc, err := cmd.RestClient()
    65  		if err != nil {
    66  			return err
    67  		}
    68  		cmd.native.Provider = id
    69  		return vapicrypto.NewManager(rc).KmsProviderCreate(ctx, cmd.native)
    70  	}
    71  
    72  	c, err := cmd.Client()
    73  	if err != nil {
    74  		return err
    75  	}
    76  
    77  	m, err := crypto.GetManagerKmip(c)
    78  	if err != nil {
    79  		return err
    80  	}
    81  
    82  	spec := types.KmipServerSpec{
    83  		ClusterId: types.KeyProviderId{Id: id},
    84  		Info:      cmd.Info,
    85  	}
    86  
    87  	return m.RegisterKmipServer(ctx, spec)
    88  }