github.com/vmware/govmomi@v0.51.0/cli/tags/rm.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 tags 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/vapi/tags" 15 ) 16 17 type rm struct { 18 *flags.ClientFlag 19 20 cat string 21 force bool 22 } 23 24 func init() { 25 cli.Register("tags.rm", &rm{}) 26 } 27 28 func (cmd *rm) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 30 cmd.ClientFlag.Register(ctx, f) 31 32 f.StringVar(&cmd.cat, "c", "", "Tag category") 33 f.BoolVar(&cmd.force, "f", false, "Delete tag regardless of attached objects") 34 } 35 36 func (cmd *rm) Usage() string { 37 return "NAME" 38 } 39 40 func (cmd *rm) Description() string { 41 return `Delete tag NAME. 42 43 Fails if tag is attached to any object, unless the '-f' flag is provided. 44 45 Examples: 46 govc tags.rm k8s-zone-us-ca1 47 govc tags.rm -f -c k8s-zone us-ca2` 48 } 49 50 func (cmd *rm) Run(ctx context.Context, f *flag.FlagSet) error { 51 if f.NArg() != 1 { 52 return flag.ErrHelp 53 } 54 55 tagID := f.Arg(0) 56 57 c, err := cmd.RestClient() 58 if err != nil { 59 return err 60 } 61 62 m := tags.NewManager(c) 63 if !cmd.force { 64 objs, err := m.ListAttachedObjects(ctx, tagID) 65 if err != nil { 66 return err 67 } 68 if len(objs) > 0 { 69 return fmt.Errorf("tag %s has %d attached objects", tagID, len(objs)) 70 } 71 } 72 tag, err := m.GetTagForCategory(ctx, tagID, cmd.cat) 73 if err != nil { 74 return err 75 } 76 return m.DeleteTag(ctx, tag) 77 }