github.com/vmware/govmomi@v0.51.0/cli/permissions/set.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 permissions
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/vim25/types"
    13  )
    14  
    15  type set struct {
    16  	*PermissionFlag
    17  
    18  	types.Permission
    19  
    20  	role string
    21  }
    22  
    23  func init() {
    24  	cli.Register("permissions.set", &set{})
    25  }
    26  
    27  func (cmd *set) Register(ctx context.Context, f *flag.FlagSet) {
    28  	cmd.PermissionFlag, ctx = NewPermissionFlag(ctx)
    29  	cmd.PermissionFlag.Register(ctx, f)
    30  
    31  	f.StringVar(&cmd.Principal, "principal", "", "User or group for which the permission is defined")
    32  	f.BoolVar(&cmd.Group, "group", false, "True, if principal refers to a group name; false, for a user name")
    33  	f.BoolVar(&cmd.Propagate, "propagate", true, "Whether or not this permission propagates down the hierarchy to sub-entities")
    34  	f.StringVar(&cmd.role, "role", "Admin", "Permission role name")
    35  }
    36  
    37  func (cmd *set) Process(ctx context.Context) error {
    38  	if err := cmd.PermissionFlag.Process(ctx); err != nil {
    39  		return err
    40  	}
    41  	return nil
    42  }
    43  
    44  func (cmd *set) Usage() string {
    45  	return "[PATH]..."
    46  }
    47  
    48  func (cmd *set) Description() string {
    49  	return `Set the permissions managed entities.
    50  
    51  Examples:
    52    govc permissions.set -principal root -role Admin
    53    govc permissions.set -principal $USER@vsphere.local -role Admin /dc1/host/cluster1`
    54  }
    55  
    56  func (cmd *set) Run(ctx context.Context, f *flag.FlagSet) error {
    57  	refs, err := cmd.ManagedObjects(ctx, f.Args())
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	m, err := cmd.Manager(ctx)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	role, err := cmd.Role(cmd.role)
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	cmd.Permission.RoleId = role.RoleId
    73  
    74  	perms := []types.Permission{cmd.Permission}
    75  
    76  	for _, ref := range refs {
    77  		err = m.SetEntityPermissions(ctx, ref, perms)
    78  		if err != nil {
    79  			return err
    80  		}
    81  	}
    82  
    83  	return nil
    84  }