github.com/vmware/govmomi@v0.51.0/cli/kms/export.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 "fmt" 11 "net/url" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/vapi/crypto" 16 ) 17 18 type export struct { 19 *flags.ClientFlag 20 21 spec crypto.KmsProviderExportSpec 22 file string 23 } 24 25 func init() { 26 cli.Register("kms.export", &export{}) 27 } 28 29 func (cmd *export) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 33 f.StringVar(&cmd.file, "f", "", "File name") 34 f.StringVar(&cmd.spec.Password, "p", "", "Password") 35 } 36 37 func (cmd *export) Usage() string { 38 return "NAME" 39 } 40 41 func (cmd *export) Description() string { 42 return `Export KMS cluster for backup. 43 44 Examples: 45 govc kms.export my-kp 46 govc kms.export -f my-backup.p12 my-kp` 47 } 48 49 func (cmd *export) Run(ctx context.Context, f *flag.FlagSet) error { 50 id := f.Arg(0) 51 if id == "" { 52 return flag.ErrHelp 53 } 54 55 rc, err := cmd.RestClient() 56 if err != nil { 57 return err 58 } 59 60 m := crypto.NewManager(rc) 61 62 cmd.spec.Provider = id 63 export, err := m.KmsProviderExport(ctx, cmd.spec) 64 if err != nil { 65 return err 66 } 67 68 if export.Type != "LOCATION" { 69 return fmt.Errorf("unsupported export type: %s", export.Type) 70 } 71 72 // Rewrite URL to use the host we connected to vCenter with 73 u, err := url.Parse(export.Location.URL) 74 if err != nil { 75 return err 76 } 77 78 u.Host = rc.URL().Host 79 export.Location.URL = u.String() 80 81 req, err := m.KmsProviderExportRequest(ctx, export.Location) 82 if err != nil { 83 return err 84 } 85 86 return rc.DownloadAttachment(ctx, req, cmd.file) 87 }