/
volumes.go
73 lines (64 loc) · 1.96 KB
/
volumes.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
67
68
69
70
71
72
73
package convertor
import (
"fmt"
"time"
"github.com/pouchcontainer/d2p-migrator/utils"
volumetypes "github.com/alibaba/pouch/storage/volume/types"
volumemeta "github.com/alibaba/pouch/storage/volume/types/meta"
dockertypes "github.com/docker/engine-api/types"
"github.com/pborman/uuid"
)
var (
// SupportVolumeDrivers specify volume drivers d2p supported
SupportVolumeDrivers = []string{"ultron", "local", "alilocal"}
)
// ToVolume converts docker volume information to pouch volume
func ToVolume(vol *dockertypes.Volume) (*volumetypes.Volume, error) {
fmt.Printf("Start convert docker volume %+v\n", vol)
now := time.Now()
return &volumetypes.Volume{
ObjectMeta: volumemeta.ObjectMeta{
Name: vol.Name,
Claimer: "pouch",
Namespace: "pouch",
UID: uuid.NewRandom().String(),
Generation: volumemeta.ObjectPhasePreCreate,
Labels: vol.Labels,
CreationTimestamp: &now,
ModifyTimestamp: &now,
},
Spec: &volumetypes.VolumeSpec{
Backend: vol.Driver,
Extra: map[string]string{
"mount": vol.Mountpoint,
},
Selector: make(volumetypes.Selector, 0),
VolumeConfig: &volumetypes.VolumeConfig{
Size: "",
},
},
Status: &volumetypes.VolumeStatus{
MountPoint: vol.Mountpoint,
},
}, nil
}
// ToVolumes convert docker volume slice to pouch volume slice.
func ToVolumes(volumes []*dockertypes.Volume) ([]*volumetypes.Volume, error) {
pouchVolumes := []*volumetypes.Volume{}
// check volume's driver, now only support local driver
for _, vol := range volumes {
if !utils.StringInSlice(SupportVolumeDrivers, vol.Driver) {
return nil, fmt.Errorf("not support volume driver %s", vol.Driver)
}
// no need create remote disk
if vol.Driver == "ultron" {
continue
}
newVol, err := ToVolume(vol)
if err != nil {
return nil, fmt.Errorf("failed to convert volume %s: %v", vol.Name, err)
}
pouchVolumes = append(pouchVolumes, newVol)
}
return pouchVolumes, nil
}