github.com/vmware/govmomi@v0.51.0/cli/disk/metadata/update.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 metadata 6 7 import ( 8 "context" 9 "flag" 10 "strings" 11 "time" 12 13 "github.com/vmware/govmomi/cli" 14 "github.com/vmware/govmomi/cli/flags" 15 "github.com/vmware/govmomi/vim25/types" 16 "github.com/vmware/govmomi/vslm" 17 ) 18 19 type update struct { 20 *flags.ClientFlag 21 22 remove flags.StringList 23 } 24 25 func init() { 26 cli.Register("disk.metadata.update", &update{}) 27 } 28 29 func (cmd *update) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 33 f.Var(&cmd.remove, "d", "Delete keys") 34 } 35 36 func (cmd *update) Usage() string { 37 return "ID" 38 } 39 40 func (cmd *update) Description() string { 41 return `Update metadata for disk ID. 42 43 Examples: 44 govc disk.metadata.update $id foo=bar biz=baz 45 govc disk.metadata.update -d foo -d biz $id` 46 } 47 48 func (cmd *update) Run(ctx context.Context, f *flag.FlagSet) error { 49 c, err := cmd.Client() 50 if err != nil { 51 return err 52 } 53 54 vc, err := vslm.NewClient(ctx, c) 55 if err != nil { 56 return err 57 } 58 59 m := vslm.NewGlobalObjectManager(vc) 60 61 id := types.ID{Id: f.Arg(0)} 62 63 var update []types.KeyValue 64 65 for _, arg := range f.Args()[1:] { 66 kv := strings.SplitN(arg, "=", 2) 67 if len(kv) == 1 { 68 kv = append(kv, "") 69 } 70 update = append(update, types.KeyValue{Key: kv[0], Value: kv[1]}) 71 } 72 73 task, err := m.UpdateMetadata(ctx, id, update, cmd.remove) 74 if err != nil { 75 return err 76 } 77 78 _, err = task.Wait(ctx, time.Hour) 79 return err 80 }