github.com/vmware/govmomi@v0.51.0/object/virtual_app.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 object 6 7 import ( 8 "context" 9 10 "github.com/vmware/govmomi/vim25" 11 "github.com/vmware/govmomi/vim25/methods" 12 "github.com/vmware/govmomi/vim25/types" 13 ) 14 15 type VirtualApp struct { 16 *ResourcePool 17 } 18 19 func NewVirtualApp(c *vim25.Client, ref types.ManagedObjectReference) *VirtualApp { 20 return &VirtualApp{ 21 ResourcePool: NewResourcePool(c, ref), 22 } 23 } 24 25 func (p VirtualApp) CreateChildVM(ctx context.Context, config types.VirtualMachineConfigSpec, host *HostSystem) (*Task, error) { 26 req := types.CreateChildVM_Task{ 27 This: p.Reference(), 28 Config: config, 29 } 30 31 if host != nil { 32 ref := host.Reference() 33 req.Host = &ref 34 } 35 36 res, err := methods.CreateChildVM_Task(ctx, p.c, &req) 37 if err != nil { 38 return nil, err 39 } 40 41 return NewTask(p.c, res.Returnval), nil 42 } 43 44 func (p VirtualApp) UpdateConfig(ctx context.Context, spec types.VAppConfigSpec) error { 45 req := types.UpdateVAppConfig{ 46 This: p.Reference(), 47 Spec: spec, 48 } 49 50 _, err := methods.UpdateVAppConfig(ctx, p.c, &req) 51 return err 52 } 53 54 func (p VirtualApp) PowerOn(ctx context.Context) (*Task, error) { 55 req := types.PowerOnVApp_Task{ 56 This: p.Reference(), 57 } 58 59 res, err := methods.PowerOnVApp_Task(ctx, p.c, &req) 60 if err != nil { 61 return nil, err 62 } 63 64 return NewTask(p.c, res.Returnval), nil 65 } 66 67 func (p VirtualApp) PowerOff(ctx context.Context, force bool) (*Task, error) { 68 req := types.PowerOffVApp_Task{ 69 This: p.Reference(), 70 Force: force, 71 } 72 73 res, err := methods.PowerOffVApp_Task(ctx, p.c, &req) 74 if err != nil { 75 return nil, err 76 } 77 78 return NewTask(p.c, res.Returnval), nil 79 80 } 81 82 func (p VirtualApp) Suspend(ctx context.Context) (*Task, error) { 83 req := types.SuspendVApp_Task{ 84 This: p.Reference(), 85 } 86 87 res, err := methods.SuspendVApp_Task(ctx, p.c, &req) 88 if err != nil { 89 return nil, err 90 } 91 92 return NewTask(p.c, res.Returnval), nil 93 } 94 95 func (p VirtualApp) Clone(ctx context.Context, name string, target types.ManagedObjectReference, spec types.VAppCloneSpec) (*Task, error) { 96 req := types.CloneVApp_Task{ 97 This: p.Reference(), 98 Name: name, 99 Target: target, 100 Spec: spec, 101 } 102 103 res, err := methods.CloneVApp_Task(ctx, p.c, &req) 104 if err != nil { 105 return nil, err 106 } 107 108 return NewTask(p.c, res.Returnval), nil 109 }