Go QueryChangedDiskAreas方法

Go QueryChangedDiskAreas方法,go,vmware,Go,Vmware,我是vmware新手,我开始在vmdk中探索不同的格式,快照等等。我使用golang作为编程语言。我发现govmomi库支持类似于pyvmomi的vsphere API。我使用createSnapshotTask方法创建了快照。但我一直使用QuerychangedDiskAreas方法来检索已更改块的列表。我对此有一些疑问。有人能帮我解决这个问题吗消除我的疑虑? 这是获得更改块的代码 func main(){ } 您能告诉我是否遗漏了什么吗?您有什么疑问吗?QueryChangedDiskAre

我是vmware新手,我开始在vmdk中探索不同的格式,快照等等。我使用golang作为编程语言。我发现govmomi库支持类似于pyvmomi的vsphere API。我使用createSnapshotTask方法创建了快照。但我一直使用QuerychangedDiskAreas方法来检索已更改块的列表。我对此有一些疑问。有人能帮我解决这个问题吗消除我的疑虑? 这是获得更改块的代码

func main(){

}


您能告诉我是否遗漏了什么吗?

您有什么疑问吗?QueryChangedDiskAreas方法将req作为参数之一。req的类型为。QueryChangedDiskAreas类型。我试图将虚拟机引用分配给req。这是一个错误。但我收到的请求引用了一个意外或未知的类型错误。我做得不对吗建议链接到您担心的文档,并尽可能清楚地解释您担心的原因。我发布了我拥有的代码。您能看一下吗?您发布的位置错误。您将其作为答案发布,但它不是答案。请改为在问题中编辑代码。(使用原始问题的“编辑”链接。)
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())
}