github.com/vmware/govmomi@v0.51.0/cli/host/date/change.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 date
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"strings"
    11  	"time"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/cli/flags"
    15  	"github.com/vmware/govmomi/vim25/types"
    16  )
    17  
    18  type change struct {
    19  	*flags.HostSystemFlag
    20  
    21  	types.HostNtpConfig
    22  	types.HostDateTimeConfig
    23  	date string
    24  }
    25  
    26  func init() {
    27  	cli.Register("host.date.change", &change{})
    28  }
    29  
    30  type serverConfig types.HostNtpConfig
    31  
    32  func (s *serverConfig) String() string {
    33  	return strings.Join(s.Server, ",")
    34  }
    35  
    36  func (s *serverConfig) Set(v string) error {
    37  	s.Server = append(s.Server, v)
    38  	return nil
    39  }
    40  
    41  func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) {
    42  	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
    43  	cmd.HostSystemFlag.Register(ctx, f)
    44  
    45  	f.Var((*serverConfig)(&cmd.HostNtpConfig), "server", "IP or FQDN for NTP server(s)")
    46  	f.StringVar(&cmd.TimeZone, "tz", "", "Change timezone of the host")
    47  	f.StringVar(&cmd.date, "date", "", "Update the date/time on the host")
    48  }
    49  
    50  func (cmd *change) Description() string {
    51  	return `Change date and time for HOST.
    52  
    53  Examples:
    54    govc host.date.change -date "$(date -u)"
    55    govc host.date.change -server time.vmware.com
    56    govc host.service enable ntpd
    57    govc host.service start ntpd`
    58  }
    59  
    60  func (cmd *change) Process(ctx context.Context) error {
    61  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    62  		return err
    63  	}
    64  	return nil
    65  }
    66  
    67  func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error {
    68  	host, err := cmd.HostSystem()
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	s, err := host.ConfigManager().DateTimeSystem(ctx)
    74  	if err != nil {
    75  		return err
    76  	}
    77  
    78  	if cmd.date != "" {
    79  		d, err := time.Parse(time.UnixDate, cmd.date)
    80  		if err != nil {
    81  			return err
    82  		}
    83  		return s.Update(ctx, d)
    84  	}
    85  
    86  	if len(cmd.HostNtpConfig.Server) > 0 {
    87  		cmd.NtpConfig = &cmd.HostNtpConfig
    88  	}
    89  
    90  	return s.UpdateConfig(ctx, cmd.HostDateTimeConfig)
    91  }