github.com/vmware/govmomi@v0.51.0/cli/object/method.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 object 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/object" 14 ) 15 16 type method struct { 17 *flags.DatacenterFlag 18 19 name string 20 reason string 21 source string 22 enable bool 23 } 24 25 func init() { 26 cli.Register("object.method", &method{}) 27 } 28 29 func (cmd *method) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 31 cmd.DatacenterFlag.Register(ctx, f) 32 33 f.StringVar(&cmd.name, "name", "", "Method name") 34 f.StringVar(&cmd.reason, "reason", "", "Reason for disabling method") 35 f.StringVar(&cmd.source, "source", "govc", "Source ID") 36 f.BoolVar(&cmd.enable, "enable", true, "Enable method") 37 } 38 39 func (cmd *method) Usage() string { 40 return "PATH..." 41 } 42 43 func (cmd *method) Description() string { 44 return `Enable or disable methods for managed objects. 45 46 Examples: 47 govc object.method -name Destroy_Task -enable=false /dc1/vm/foo 48 govc object.collect /dc1/vm/foo disabledMethod | grep --color Destroy_Task 49 govc object.method -name Destroy_Task -enable /dc1/vm/foo` 50 } 51 52 func (cmd *method) Process(ctx context.Context) error { 53 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 54 return err 55 } 56 return nil 57 } 58 59 func (cmd *method) Run(ctx context.Context, f *flag.FlagSet) error { 60 if f.NArg() == 0 { 61 return flag.ErrHelp 62 } 63 64 if cmd.name == "" { 65 return flag.ErrHelp 66 } 67 68 c, err := cmd.Client() 69 if err != nil { 70 return err 71 } 72 73 objs, err := cmd.ManagedObjects(ctx, f.Args()) 74 if err != nil { 75 return err 76 } 77 78 m := object.NewAuthorizationManager(c) 79 80 if cmd.enable { 81 return m.EnableMethods(ctx, objs, []string{cmd.name}, cmd.source) 82 } 83 84 method := []object.DisabledMethodRequest{ 85 { 86 Method: cmd.name, 87 Reason: cmd.reason, 88 }, 89 } 90 91 return m.DisableMethods(ctx, objs, method, cmd.source) 92 }