本文整理匯總了Golang中github.com/vmware/govmomi/vim25/types.VirtualMachineCloneSpec.Location方法的典型用法代碼示例。如果您正苦於以下問題:Golang VirtualMachineCloneSpec.Location方法的具體用法?Golang VirtualMachineCloneSpec.Location怎麽用?Golang VirtualMachineCloneSpec.Location使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/vmware/govmomi/vim25/types.VirtualMachineCloneSpec
的用法示例。
在下文中一共展示了VirtualMachineCloneSpec.Location方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Create
//.........這裏部分代碼省略.........
var imageMoRef mo.VirtualMachine
err = image.Properties(ctx, image.Reference(), []string{"parent", "config.template", "resourcePool", "snapshot", "guest.toolsVersionStatus2", "config.guestFullName"}, &imageMoRef)
if err != nil {
return fmt.Errorf("Error reading base VM properties: %s", err)
}
// Create a CloneSpec to clone the VM
datastoreref := dss.Reference()
folderref := folder.Reference()
poolref := rp.Reference()
relocateSpec.Datastore = &datastoreref
relocateSpec.Folder = &folderref
relocateSpec.Pool = &poolref
spec := types.VirtualMachineConfigSpec{
Name: d.MachineName,
GuestId: "otherLinux64Guest",
Files: &types.VirtualMachineFileInfo{VmPathName: fmt.Sprintf("[%s]", dss.Name())},
NumCPUs: d.CPU,
MemoryMB: int64(d.Memory),
}
cloneSpec := types.VirtualMachineCloneSpec{
Config: &spec,
}
if imageMoRef.Snapshot != nil {
relocateSpec.DiskMoveType = "createNewChildDiskBacking"
cloneSpec.Snapshot = imageMoRef.Snapshot.CurrentSnapshot
} else {
return fmt.Errorf("No snapshots for template, cannot use for cloning")
}
if d.Network != "" {
// search for the first network card of the source
devices, err := image.Device(ctx)
if err != nil {
return fmt.Errorf("Error reading base VM devices: %s", err)
}
var card *types.VirtualEthernetCard
for _, device := range devices {
if c, ok := device.(types.BaseVirtualEthernetCard); ok {
card = c.GetVirtualEthernetCard()
break
}
}
if card == nil {
return fmt.Errorf("No network device found for the template.")
}
// get the new backing information
net, err := f.NetworkOrDefault(ctx, d.Network)
if err != nil {
return fmt.Errorf("Network not found: %s", err)
}
backing, err := net.EthernetCardBackingInfo(ctx)
if err != nil {
return fmt.Errorf("Network backing not found: %s", err)
}
netdev, err := object.EthernetCardTypes().CreateEthernetCard("vmxnet3", backing)
if err != nil {
return fmt.Errorf("Failed to create ethernet card: %s", err)
}
//set backing info
card.Backing = netdev.(types.BaseVirtualEthernetCard).GetVirtualEthernetCard().Backing
// prepare virtual device config spec for network card
configSpecs := []types.BaseVirtualDeviceConfigSpec{
&types.VirtualDeviceConfigSpec{
Operation: types.VirtualDeviceConfigSpecOperationEdit,
Device: card,
},
}
relocateSpec.DeviceChange = configSpecs
}
cloneSpec.Location = relocateSpec
task, err := image.Clone(ctx, folder, d.MachineName, cloneSpec)
if err != nil {
return fmt.Errorf("Error cloning vm: %s", err)
}
info, err := task.WaitForResult(ctx, nil)
if err != nil {
return fmt.Errorf("Error cloning vm: %s", err)
}
vmMoRef := info.Result.(types.ManagedObjectReference)
vm := object.NewVirtualMachine(c.Client, vmMoRef)
// Power On the VM
if err := d.Start(); err != nil {
return err
}
// Upload the bundle
return d.uploadBundle(vm.Reference(), ctx, c.Client)
}