ctx, cancel := context.WithCancel(context.Background())
defer cancel()
flag.Parse()
// Parse URL from string
u, err := url.Parse(*urlFlag)
if err != nil {
exit(err)
}
// Override username and/or password as required
processOverride(u)
// Connect and log in to ESX or vCenter
c, err := govmomi.NewClient(ctx, u, *insecureFlag)
if err != nil {
exit(err)
}
f := find.NewFinder(c.Client, true)
// Find one and only datacenter
dc, err := f.DefaultDatacenter(ctx)
if err != nil {
exit(err)
}
// Make future calls local to this datacenter
f.SetDatacenter(dc)
// Find datastores in datacenter
dss, err := f.DatastoreList(ctx, "*")
if err != nil {
exit(err)
}
pc := property.DefaultCollector(c.Client)
// Convert datastores into list of references
var refs []types.ManagedObjectReference
for _, ds := range dss {
refs = append(refs, ds.Reference())
}
// Retrieve summary property for all datastores
var dst []mo.Datastore
err = pc.Retrieve(ctx, refs, []string{"summary"}, &dst)
if err != nil {
exit(err)
}
//get Virtual Machines
vms, err := f.VirtualMachineList(ctx, "*")
if err != nil {
}
//apps, _ := f.VirtualAppList(ctx, "")
//fmt.Println(apps[0].String())
//r.dataStore = r.f.DefaultDatastore(r.ctx, "*")
// Convert virtual machines into list of references
var vmrefs types.ManagedObjectReference
var device *types.VirtualDevice
fmt.Println(device)
var devices object.VirtualDeviceList
name := ""
for i, vm := range vms {
name, _ = vm.Name(ctx)
if name == "Ubuntu Target" {
fmt.Println(name)
devices, _ = vm.Device(ctx)
device = devices[i].GetVirtualDevice()
vmrefs = vm.Common.Reference()
break
}
}
req := new(types.CreateSnapshot_Task)
req.Description = "Snapshot created by Data Migration Tool."
req.Name = "Ubuntu Target"
req.Memory = false
req.This.Type = vmrefs.Type
req.This.Value = vmrefs.Value
s, e := methods.CreateSnapshot_Task(ctx, c.RoundTripper, req)
if e != nil {
fmt.Println(e)
}
time.Sleep(time.Second * 3)
queryReq := new(types.QueryChangedDiskAreas)
queryReq.ChangeId = "*"
queryReq.DeviceKey = device.Key
queryReq.Snapshot = new(types.ManagedObjectReference)
queryReq.Snapshot.Type = s.Returnval.Type
queryReq.Snapshot.Value = s.Returnval.Value
queryReq.StartOffset = 0
queryReq.This.Type =vmrefs.Type
queryReq.This.Value= =vmrefs.Value
_, e = methods.QueryChangedDiskAreas(ctx, c.RoundTripper, queryReq)
if e != nil {
fmt.Println("error in query", e.Error())
}
}