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 }