github.com/vmware/govmomi@v0.51.0/cli/vapp/destroy.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 vapp 6 7 import ( 8 "context" 9 "flag" 10 11 "github.com/vmware/govmomi/cli" 12 "github.com/vmware/govmomi/cli/flags" 13 "github.com/vmware/govmomi/fault" 14 "github.com/vmware/govmomi/find" 15 "github.com/vmware/govmomi/vim25/types" 16 ) 17 18 type destroy struct { 19 *flags.DatacenterFlag 20 } 21 22 func init() { 23 cli.Register("vapp.destroy", &destroy{}) 24 } 25 26 func (cmd *destroy) Register(ctx context.Context, f *flag.FlagSet) { 27 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 28 cmd.DatacenterFlag.Register(ctx, f) 29 } 30 31 func (cmd *destroy) Process(ctx context.Context) error { 32 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 33 return err 34 } 35 return nil 36 } 37 38 func (cmd *destroy) Usage() string { 39 return "VAPP..." 40 } 41 42 func (cmd *destroy) Run(ctx context.Context, f *flag.FlagSet) error { 43 if f.NArg() == 0 { 44 return flag.ErrHelp 45 } 46 47 finder, err := cmd.Finder() 48 if err != nil { 49 return err 50 } 51 52 for _, arg := range f.Args() { 53 vapps, err := finder.VirtualAppList(ctx, arg) 54 if err != nil { 55 if _, ok := err.(*find.NotFoundError); ok { 56 // Ignore if vapp cannot be found 57 continue 58 } 59 60 return err 61 } 62 63 for _, vapp := range vapps { 64 powerOff := func() error { 65 task, err := vapp.PowerOff(ctx, false) 66 if err != nil { 67 return err 68 } 69 err = task.Wait(ctx) 70 if err != nil { 71 // it's safe to ignore if the vapp is already powered off 72 if fault.Is(err, &types.InvalidPowerState{}) { 73 return nil 74 } 75 return err 76 } 77 return nil 78 } 79 if err := powerOff(); err != nil { 80 return err 81 } 82 83 destroy := func() error { 84 task, err := vapp.Destroy(ctx) 85 if err != nil { 86 return err 87 } 88 err = task.Wait(ctx) 89 if err != nil { 90 return err 91 } 92 return nil 93 } 94 if err := destroy(); err != nil { 95 return err 96 } 97 } 98 } 99 100 return nil 101 }