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 }