github.com/vmware/govmomi@v0.51.0/cli/role/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 role
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/cli/permissions"
    13  )
    14  
    15  type update struct {
    16  	*permissions.PermissionFlag
    17  
    18  	name   string
    19  	remove bool
    20  	add    bool
    21  }
    22  
    23  func init() {
    24  	cli.Register("role.update", &update{})
    25  }
    26  
    27  func (cmd *update) Register(ctx context.Context, f *flag.FlagSet) {
    28  	cmd.PermissionFlag, ctx = permissions.NewPermissionFlag(ctx)
    29  	cmd.PermissionFlag.Register(ctx, f)
    30  
    31  	f.StringVar(&cmd.name, "name", "", "Change role name")
    32  	f.BoolVar(&cmd.remove, "r", false, "Remove given PRIVILEGE(s)")
    33  	f.BoolVar(&cmd.add, "a", false, "Add given PRIVILEGE(s)")
    34  }
    35  
    36  func (cmd *update) Process(ctx context.Context) error {
    37  	if err := cmd.PermissionFlag.Process(ctx); err != nil {
    38  		return err
    39  	}
    40  	return nil
    41  }
    42  
    43  func (cmd *update) Usage() string {
    44  	return "NAME [PRIVILEGE]..."
    45  }
    46  
    47  func (cmd *update) Description() string {
    48  	return `Update authorization role.
    49  
    50  Set, Add or Remove role PRIVILEGE(s).
    51  
    52  Examples:
    53    govc role.update MyRole $(govc role.ls Admin | grep VirtualMachine.)
    54    govc role.update -r MyRole $(govc role.ls Admin | grep VirtualMachine.GuestOperations.)
    55    govc role.update -a MyRole $(govc role.ls Admin | grep Datastore.)
    56    govc role.update -name RockNRole MyRole`
    57  }
    58  
    59  func (cmd *update) Run(ctx context.Context, f *flag.FlagSet) error {
    60  	if f.NArg() == 0 {
    61  		return flag.ErrHelp
    62  	}
    63  
    64  	m, err := cmd.Manager(ctx)
    65  	if err != nil {
    66  		return err
    67  	}
    68  
    69  	role, err := cmd.Role(f.Arg(0))
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	ids := role.Privilege
    75  	args := f.Args()[1:]
    76  
    77  	if cmd.add {
    78  		ids = append(ids, args...)
    79  	} else if cmd.remove {
    80  		ids = nil
    81  		rm := make(map[string]bool, len(args))
    82  		for _, arg := range args {
    83  			rm[arg] = true
    84  		}
    85  
    86  		for _, id := range role.Privilege {
    87  			if !rm[id] {
    88  				ids = append(ids, id)
    89  			}
    90  		}
    91  	} else if len(args) != 0 {
    92  		ids = args
    93  	}
    94  
    95  	if cmd.name == "" {
    96  		cmd.name = role.Name
    97  	}
    98  
    99  	return m.UpdateRole(ctx, role.RoleId, cmd.name, ids)
   100  }