github.com/vmware/govmomi@v0.51.0/cli/cluster/mv.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 cluster 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 ) 16 17 type mv struct { 18 *flags.ClusterFlag 19 } 20 21 func init() { 22 cli.Register("cluster.mv", &mv{}) 23 } 24 25 func (cmd *mv) Register(ctx context.Context, f *flag.FlagSet) { 26 cmd.ClusterFlag, ctx = flags.NewClusterFlag(ctx) 27 cmd.ClusterFlag.Register(ctx, f) 28 } 29 30 func (cmd *mv) Process(ctx context.Context) error { 31 if err := cmd.ClusterFlag.Process(ctx); err != nil { 32 return err 33 } 34 35 return nil 36 } 37 38 func (cmd *mv) Description() string { 39 return `Move HOST to CLUSTER. 40 41 The hosts are moved to the cluster specified by the 'cluster' flag. 42 43 Examples: 44 govc cluster.mv -cluster ClusterA host1 host2` 45 } 46 47 func (cmd *mv) Move(ctx context.Context, cluster *object.ClusterComputeResource, hosts []*object.HostSystem) error { 48 task, err := cluster.MoveInto(ctx, hosts...) 49 if err != nil { 50 return err 51 } 52 53 logger := cmd.ProgressLogger(fmt.Sprintf("moving %d hosts to cluster %s... ", len(hosts), cluster.InventoryPath)) 54 defer logger.Wait() 55 56 _, err = task.WaitForResult(ctx, logger) 57 return err 58 } 59 60 func (cmd *mv) Run(ctx context.Context, f *flag.FlagSet) error { 61 if f.NArg() == 0 { 62 return flag.ErrHelp 63 } 64 65 cluster, err := cmd.Cluster() 66 if err != nil { 67 return err 68 } 69 70 finder, err := cmd.Finder() 71 if err != nil { 72 return err 73 } 74 75 var hosts []*object.HostSystem 76 77 for _, path := range f.Args() { 78 list, err := finder.HostSystemList(ctx, path) 79 if err != nil { 80 return err 81 } 82 hosts = append(hosts, list...) 83 } 84 85 return cmd.Move(ctx, cluster, hosts) 86 }