github.com/vmware/govmomi@v0.51.0/cli/sso/group/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 group 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/cli/sso" 15 "github.com/vmware/govmomi/ssoadmin" 16 "github.com/vmware/govmomi/ssoadmin/types" 17 ) 18 19 type update struct { 20 *flags.ClientFlag 21 22 d string 23 a string 24 r string 25 g bool 26 } 27 28 func init() { 29 cli.Register("sso.group.update", &update{}) 30 } 31 32 func (cmd *update) Register(ctx context.Context, f *flag.FlagSet) { 33 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 34 cmd.ClientFlag.Register(ctx, f) 35 36 f.StringVar(&cmd.d, "d", "", "Group description") 37 f.StringVar(&cmd.a, "a", "", "Add user/group to group") 38 f.StringVar(&cmd.r, "r", "", "Remove user/group from group") 39 f.BoolVar(&cmd.g, "g", false, "Add/Remove group from group") 40 } 41 42 func (cmd *update) Description() string { 43 return `Update SSO group. 44 45 Examples: 46 govc sso.group.update -d "Group description" NAME 47 govc sso.group.update -a user1 NAME 48 govc sso.group.update -r user2 NAME 49 govc sso.group.update -g -a group1 NAME 50 govc sso.group.update -g -r group2 NAME` 51 } 52 53 func (cmd *update) Run(ctx context.Context, f *flag.FlagSet) error { 54 if f.NArg() != 1 { 55 return flag.ErrHelp 56 } 57 id := f.Arg(0) 58 59 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 60 if cmd.d != "" { 61 err := c.UpdateGroup(ctx, id, types.AdminGroupDetails{Description: cmd.d}) 62 if err != nil { 63 return err 64 } 65 } 66 67 if cmd.a != "" { 68 if cmd.g { 69 group, err := c.FindGroup(ctx, cmd.a) 70 if err != nil { 71 return err 72 } 73 if group == nil { 74 return fmt.Errorf("group %q not found", cmd.a) 75 } 76 if err = c.AddGroupsToGroup(ctx, id, group.Id); err != nil { 77 return err 78 } 79 } else { 80 user, err := c.FindUser(ctx, cmd.a) 81 if err != nil { 82 return err 83 } 84 if user == nil { 85 return fmt.Errorf("user %q not found", cmd.a) 86 } 87 if err = c.AddUsersToGroup(ctx, id, user.Id); err != nil { 88 return err 89 } 90 } 91 } 92 93 if cmd.r != "" { 94 var pid types.PrincipalId 95 if cmd.g { 96 group, err := c.FindGroup(ctx, cmd.r) 97 if err != nil { 98 return err 99 } 100 if group == nil { 101 return fmt.Errorf("group %q not found", cmd.r) 102 } 103 pid = group.Id 104 } else { 105 user, err := c.FindUser(ctx, cmd.r) 106 if err != nil { 107 return err 108 } 109 if user == nil { 110 return fmt.Errorf("user %q not found", cmd.r) 111 } 112 pid = user.Id 113 } 114 115 if err := c.RemoveUsersFromGroup(ctx, id, pid); err != nil { 116 return err 117 } 118 } 119 120 return nil 121 }) 122 }