/
volume.go
79 lines (65 loc) · 1.89 KB
/
volume.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
74
75
76
77
78
79
package volume
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
volumetypes "github.com/docker/docker/api/types/volume"
"github.com/google/uuid"
"github.com/synalice/gobox/docker/controller"
)
// Find finds a specified volume
func Find(controller *controller.Controller, volumeName string) (volume *types.Volume, err error) {
volumes, err := controller.Cli.VolumeList(context.Background(), filters.NewArgs())
if err != nil {
return nil, err
}
for _, v := range volumes.Volumes {
if v.Name == volumeName {
return v, nil
}
}
return nil, nil
}
// Ensure makes sure specified volume exists and creates it if it is not
// present. Use empty string to generate name randomly.
func Ensure(controller *controller.Controller, volumeName string) (volume *types.Volume, err error) {
if volumeName == "" {
vol, err := controller.Cli.VolumeCreate(context.Background(), volumetypes.VolumeCreateBody{
Driver: "local",
Name: generateVolumeName(),
})
return &vol, err
}
volume, err = Find(controller, volumeName)
if err != nil {
return nil, err
}
if volume != nil {
return volume, nil
}
vol, err := controller.Cli.VolumeCreate(context.Background(), volumetypes.VolumeCreateBody{
Driver: "local",
Name: volumeName,
})
return &vol, err
}
// Remove removes specified volume
func Remove(controller *controller.Controller, volumeName string) error {
vol, err := Find(controller, volumeName)
if err != nil {
return fmt.Errorf("couldn't find volume: %w", err)
}
if vol == nil {
return nil
}
err = controller.Cli.VolumeRemove(context.Background(), volumeName, true)
if err != nil {
return fmt.Errorf("couldn't remove volume: %w", err)
}
return nil
}
// generateVolumeName generates unique UUID name for each new volume
func generateVolumeName() string {
return "gobox" + "-" + "volume" + "-" + uuid.NewString()
}