govmomi

380 views
Skip to first unread message

bhuvane...@ptechnosoft.com

unread,
Sep 14, 2015, 11:12:10 AM9/14/15
to golang-nuts
  

Hi Everyone ,

            I m new to vmware and i started exploring different formats in vmdk ,snapshots and all.I m using golang as a programming language.I found out that govmomi library that supports vsphere APIs that is similar to pyvmomi .I ve created snapshots using createSnapshotTask method .But i m stuck with QuerychangedDiskAreas method that retrieves list of changed blocks.I have some doubts regarding it.Can anyone help me to clear my doubts? This is the code to get changed blocks .


func main(){
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())
}
}


Can anyone please tell if i am missing anything?












shri vanitha

unread,
Feb 17, 2020, 8:44:35 AM2/17/20
to golang-nuts
Got any conclusion for this?
Reply all
Reply to author
Forward
0 new messages