forked from oVirt/go-ovirt-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient_template_copy_disk.go
66 lines (58 loc) · 1.58 KB
/
client_template_copy_disk.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package ovirtclient
import (
"fmt"
"sync"
ovirtsdk "github.com/ovirt/go-ovirt"
)
func (o *oVirtClient) CopyTemplateDiskToStorageDomain(
diskID string,
storageDomainID string,
retries ...RetryStrategy) (result Disk, err error) {
retries = defaultRetries(retries, defaultReadTimeouts())
progress, err := o.StartCopyTemplateDiskToStorageDomain(diskID, storageDomainID, retries...)
if err != nil {
return nil, err
}
return progress.Wait()
}
func (o *oVirtClient) StartCopyTemplateDiskToStorageDomain(
diskID string,
storageDomainID string,
retries ...RetryStrategy) (DiskUpdate, error) {
retries = defaultRetries(retries, defaultWriteTimeouts())
correlationID := fmt.Sprintf("template_disk_copy_%s", generateRandomID(5, o.nonSecureRandom))
sdkStorageDomain := ovirtsdk.NewStorageDomainBuilder().Id(storageDomainID)
sdkDisk := ovirtsdk.NewDiskBuilder().Id(diskID)
storageDomain, _ := o.GetStorageDomain(storageDomainID)
disk, _ := o.GetDisk(diskID)
err := retry(
fmt.Sprintf("copying disk %s to storage domain %s", diskID, storageDomainID),
o.logger,
retries,
func() error {
_, err := o.conn.
SystemService().
DisksService().
DiskService(diskID).
Copy().
StorageDomain(sdkStorageDomain.MustBuild()).
Disk(sdkDisk.MustBuild()).
Query("correlation_id", correlationID).
Send()
if err != nil {
return err
}
return nil
},
)
if err != nil {
return nil, err
}
return &storageDomainDiskWait{
client: o,
disk: disk,
storageDomain: storageDomain,
correlationID: correlationID,
lock: &sync.Mutex{},
}, nil
}