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  }