github.com/vmware/govmomi@v0.51.0/cli/vm/guest/guest.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  	"errors"
    10  	"flag"
    11  	"net/url"
    12  
    13  	"github.com/vmware/govmomi/cli/flags"
    14  	"github.com/vmware/govmomi/guest"
    15  	"github.com/vmware/govmomi/guest/toolbox"
    16  	"github.com/vmware/govmomi/object"
    17  )
    18  
    19  type GuestFlag struct {
    20  	*flags.ClientFlag
    21  	*flags.VirtualMachineFlag
    22  
    23  	*AuthFlag
    24  }
    25  
    26  func newGuestFlag(ctx context.Context) (*GuestFlag, context.Context) {
    27  	f := &GuestFlag{}
    28  	f.ClientFlag, ctx = flags.NewClientFlag(ctx)
    29  	f.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx)
    30  	f.AuthFlag, ctx = newAuthFlag(ctx)
    31  	return f, ctx
    32  }
    33  
    34  func newGuestProcessFlag(ctx context.Context) (*GuestFlag, context.Context) {
    35  	f, gctx := newGuestFlag(ctx)
    36  	f.proc = true
    37  	return f, gctx
    38  }
    39  
    40  func (flag *GuestFlag) Register(ctx context.Context, f *flag.FlagSet) {
    41  	flag.ClientFlag.Register(ctx, f)
    42  	flag.VirtualMachineFlag.Register(ctx, f)
    43  	flag.AuthFlag.Register(ctx, f)
    44  }
    45  
    46  func (flag *GuestFlag) Process(ctx context.Context) error {
    47  	if err := flag.ClientFlag.Process(ctx); err != nil {
    48  		return err
    49  	}
    50  	if err := flag.VirtualMachineFlag.Process(ctx); err != nil {
    51  		return err
    52  	}
    53  	if err := flag.AuthFlag.Process(ctx); err != nil {
    54  		return err
    55  	}
    56  	return nil
    57  }
    58  
    59  func (flag *GuestFlag) Toolbox(ctx context.Context) (*toolbox.Client, error) {
    60  	vm, err := flag.VirtualMachine()
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	c, err := flag.Client()
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	return toolbox.NewClient(ctx, c, vm, flag.Auth())
    71  }
    72  
    73  func (flag *GuestFlag) FileManager() (*guest.FileManager, error) {
    74  	ctx := context.TODO()
    75  	c, err := flag.Client()
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  
    80  	vm, err := flag.VirtualMachine()
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  
    85  	o := guest.NewOperationsManager(c, vm.Reference())
    86  	return o.FileManager(ctx)
    87  }
    88  
    89  func (flag *GuestFlag) ProcessManager() (*guest.ProcessManager, error) {
    90  	ctx := context.TODO()
    91  	c, err := flag.Client()
    92  	if err != nil {
    93  		return nil, err
    94  	}
    95  
    96  	vm, err := flag.VirtualMachine()
    97  	if err != nil {
    98  		return nil, err
    99  	}
   100  
   101  	o := guest.NewOperationsManager(c, vm.Reference())
   102  	return o.ProcessManager(ctx)
   103  }
   104  
   105  func (flag *GuestFlag) ParseURL(urlStr string) (*url.URL, error) {
   106  	c, err := flag.Client()
   107  	if err != nil {
   108  		return nil, err
   109  	}
   110  
   111  	return c.Client.ParseURL(urlStr)
   112  }
   113  
   114  func (flag *GuestFlag) VirtualMachine() (*object.VirtualMachine, error) {
   115  	vm, err := flag.VirtualMachineFlag.VirtualMachine()
   116  	if err != nil {
   117  		return nil, err
   118  	}
   119  	if vm == nil {
   120  		return nil, errors.New("no vm specified")
   121  	}
   122  	return vm, nil
   123  }