github.com/vmware/govmomi@v0.51.0/cli/vm/guest/chown.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 guest
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"strconv"
    11  	"strings"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/vim25/types"
    15  )
    16  
    17  type chown struct {
    18  	*GuestFlag
    19  }
    20  
    21  func init() {
    22  	cli.Register("guest.chown", &chown{})
    23  }
    24  
    25  func (cmd *chown) Register(ctx context.Context, f *flag.FlagSet) {
    26  	cmd.GuestFlag, ctx = newGuestFlag(ctx)
    27  	cmd.GuestFlag.Register(ctx, f)
    28  }
    29  
    30  func (cmd *chown) Process(ctx context.Context) error {
    31  	if err := cmd.GuestFlag.Process(ctx); err != nil {
    32  		return err
    33  	}
    34  	return nil
    35  }
    36  
    37  func (cmd *chown) Usage() string {
    38  	return "UID[:GID] FILE"
    39  }
    40  
    41  func (cmd *chown) Description() string {
    42  	return `Change FILE UID and GID on VM.
    43  
    44  Examples:
    45    govc guest.chown -vm $name UID[:GID] /var/log/foo.log`
    46  }
    47  
    48  func (cmd *chown) Run(ctx context.Context, f *flag.FlagSet) error {
    49  	if f.NArg() != 2 {
    50  		return flag.ErrHelp
    51  	}
    52  
    53  	m, err := cmd.FileManager()
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	var attr types.GuestPosixFileAttributes
    59  
    60  	ids := strings.SplitN(f.Arg(0), ":", 2)
    61  	if len(ids) == 0 {
    62  		return flag.ErrHelp
    63  	}
    64  
    65  	ownerIDStr := ids[0]
    66  	ownerID, err := strconv.Atoi(ownerIDStr)
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	attr.OwnerId = new(int32)
    72  	*attr.OwnerId = int32(ownerID)
    73  
    74  	if len(ids) == 2 {
    75  		groupIDStr := ids[1]
    76  		groupID, err := strconv.Atoi(groupIDStr)
    77  		if err != nil {
    78  			return err
    79  		}
    80  
    81  		attr.GroupId = new(int32)
    82  		*attr.GroupId = int32(groupID)
    83  	}
    84  
    85  	return m.ChangeFileAttributes(ctx, cmd.Auth(), f.Arg(1), &attr)
    86  }