This repository has been archived by the owner on Jan 3, 2024. It is now read-only.
forked from longhorn/longhorn-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathengineimage.go
109 lines (94 loc) · 2.99 KB
/
engineimage.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package manager
import (
"fmt"
"time"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/longhorn/longhorn-manager/datastore"
"github.com/longhorn/longhorn-manager/types"
"github.com/longhorn/longhorn-manager/util"
longhorn "github.com/longhorn/longhorn-manager/k8s/pkg/apis/longhorn/v1beta2"
)
var (
WaitForEngineImageCount = 20
WaitForEngineImageInterval = 6 * time.Second
)
func (m *VolumeManager) ListEngineImagesByName() (map[string]*longhorn.EngineImage, error) {
return m.ds.ListEngineImages()
}
func (m *VolumeManager) ListEngineImagesSorted() ([]*longhorn.EngineImage, error) {
engineImageMap, err := m.ListEngineImagesByName()
if err != nil {
return []*longhorn.EngineImage{}, err
}
engineImages := make([]*longhorn.EngineImage, len(engineImageMap))
engineImageNames, err := util.SortKeys(engineImageMap)
if err != nil {
return []*longhorn.EngineImage{}, err
}
for i, engineImageName := range engineImageNames {
engineImages[i] = engineImageMap[engineImageName]
}
return engineImages, nil
}
func (m *VolumeManager) GetEngineImageByName(name string) (*longhorn.EngineImage, error) {
return m.ds.GetEngineImage(name)
}
func (m *VolumeManager) GetEngineImageByImage(image string) (*longhorn.EngineImage, error) {
name := types.GetEngineImageChecksumName(image)
return m.ds.GetEngineImage(name)
}
func (m *VolumeManager) CreateEngineImage(image string) (*longhorn.EngineImage, error) {
name := types.GetEngineImageChecksumName(image)
ei := &longhorn.EngineImage{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Labels: types.GetEngineImageLabels(name),
},
Spec: longhorn.EngineImageSpec{
Image: image,
},
}
ei, err := m.ds.CreateEngineImage(ei)
if err != nil {
return nil, err
}
logrus.Infof("Created engine image %v (%v)", ei.Name, ei.Spec.Image)
return ei, nil
}
func (m *VolumeManager) DeleteEngineImageByName(name string) error {
ei, err := m.GetEngineImageByName(name)
if err != nil {
if datastore.ErrorIsNotFound(err) {
return nil
}
return errors.Wrapf(err, "unable to get engine image '%s'", name)
}
defaultImage, err := m.GetSettingValueExisted(types.SettingNameDefaultEngineImage)
if err != nil {
return errors.Wrap(err, "unable to delete engine image")
}
if ei.Spec.Image == defaultImage {
return fmt.Errorf("unable to delete the default engine image")
}
if ei.Status.RefCount != 0 {
return fmt.Errorf("unable to delete the engine image while being used")
}
if err := m.ds.DeleteEngineImage(name); err != nil {
return err
}
logrus.Infof("Deleted engine image %v (%v)", ei.Name, ei.Spec.Image)
return nil
}
func (m *VolumeManager) DeployEngineImage(image string) error {
if _, err := m.GetEngineImageByImage(image); err != nil {
if !datastore.ErrorIsNotFound(err) {
return errors.Wrapf(err, "cannot get engine image %v", image)
}
if _, err = m.CreateEngineImage(image); err != nil {
return errors.Wrapf(err, "cannot create engine image for %v", image)
}
}
return nil
}