github.com/vmware/govmomi@v0.51.0/cli/host/service/command.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 service
     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/object"
    15  	"github.com/vmware/govmomi/vim25/types"
    16  )
    17  
    18  type service struct {
    19  	*flags.ClientFlag
    20  	*flags.HostSystemFlag
    21  }
    22  
    23  func init() {
    24  	cli.Register("host.service", &service{})
    25  }
    26  
    27  func (cmd *service) Register(ctx context.Context, f *flag.FlagSet) {
    28  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    29  	cmd.ClientFlag.Register(ctx, f)
    30  
    31  	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
    32  	cmd.HostSystemFlag.Register(ctx, f)
    33  }
    34  
    35  func (cmd *service) Process(ctx context.Context) error {
    36  	if err := cmd.ClientFlag.Process(ctx); err != nil {
    37  		return err
    38  	}
    39  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    40  		return err
    41  	}
    42  	return nil
    43  }
    44  
    45  func (cmd *service) Usage() string {
    46  	return "ACTION ID"
    47  }
    48  
    49  func (cmd *service) Description() string {
    50  	return `Apply host service ACTION to service ID.
    51  
    52  Where ACTION is one of: start, stop, restart, status, enable, disable
    53  
    54  Examples:
    55    govc host.service enable TSM-SSH
    56    govc host.service start TSM-SSH`
    57  }
    58  
    59  func (cmd *service) status(ctx context.Context, s *object.HostServiceSystem, id string) (string, error) {
    60  	services, err := s.Service(ctx)
    61  	if err != nil {
    62  		return "", err
    63  	}
    64  
    65  	for _, service := range services {
    66  		if id == service.Key {
    67  			return Status(service), nil
    68  		}
    69  	}
    70  
    71  	return "N/A", nil
    72  }
    73  
    74  func (cmd *service) Run(ctx context.Context, f *flag.FlagSet) error {
    75  	host, err := cmd.HostSystem()
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	if f.NArg() != 2 {
    81  		return flag.ErrHelp
    82  	}
    83  
    84  	arg := f.Arg(0)
    85  	id := f.Arg(1)
    86  
    87  	s, err := host.ConfigManager().ServiceSystem(ctx)
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	switch arg {
    93  	case "start":
    94  		return s.Start(ctx, id)
    95  	case "stop":
    96  		return s.Stop(ctx, id)
    97  	case "restart":
    98  		return s.Restart(ctx, id)
    99  	case "status":
   100  		ss, err := cmd.status(ctx, s, id)
   101  		if err != nil {
   102  			return err
   103  		}
   104  		fmt.Println(ss)
   105  		return nil
   106  	case "enable":
   107  		return s.UpdatePolicy(ctx, id, string(types.HostServicePolicyOn))
   108  	case "disable":
   109  		return s.UpdatePolicy(ctx, id, string(types.HostServicePolicyOff))
   110  	}
   111  
   112  	return flag.ErrHelp
   113  }