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  }