/
create_disk.go
53 lines (46 loc) · 1.35 KB
/
create_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
package action
import (
bosherr "github.com/cloudfoundry/bosh-utils/errors"
"bosh-softlayer-cpi/api"
"bosh-softlayer-cpi/softlayer/disk_service"
instance "bosh-softlayer-cpi/softlayer/virtual_guest_service"
)
type CreateDisk struct {
diskService disk.Service
vmService instance.Service
}
func NewCreateDisk(
diskService disk.Service,
vmService instance.Service,
) CreateDisk {
return CreateDisk{
diskService: diskService,
vmService: vmService,
}
}
func (cd CreateDisk) Run(size int, cloudProps DiskCloudProperties, vmCID VMCID) (string, error) {
// Find the VM (if provided) so we can create the disk in the same datacenter
var location string
if vmCID != 0 {
vm, err := cd.vmService.Find(vmCID.Int())
if err != nil {
if _, ok := err.(api.CloudError); ok {
return "", err
}
return "", bosherr.WrapErrorf(err, "Creating disk with size '%d'", size)
}
location = *vm.Datacenter.Name
} else {
if len(cloudProps.DataCenter) > 0 {
location = cloudProps.DataCenter
} else {
return "", bosherr.Errorf("Creating disk with size '%d': Invalid datacenter name specified.", size)
}
}
// Create the Disk
disk, err := cd.diskService.Create(size, cloudProps.Iops, location, cloudProps.SnapshotSpace)
if err != nil {
return "", bosherr.WrapErrorf(err, "Creating disk with size '%d'", size)
}
return DiskCID(disk).String(), nil
}