forked from libopenstorage/stork
/
groupsnapshot.go
60 lines (50 loc) · 1.46 KB
/
groupsnapshot.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
package groupsnapshot
import (
"fmt"
"github.com/libopenstorage/stork/drivers/volume"
"github.com/libopenstorage/stork/pkg/groupsnapshot/controllers"
"github.com/libopenstorage/stork/pkg/rule"
"github.com/portworx/sched-ops/k8s"
"github.com/sirupsen/logrus"
"k8s.io/api/core/v1"
"k8s.io/client-go/tools/record"
)
// GroupSnapshot instance
type GroupSnapshot struct {
Driver volume.Driver
Recorder record.EventRecorder
groupSnapshotController *controllers.GroupSnapshotController
}
// Init init
func (m *GroupSnapshot) Init() error {
m.groupSnapshotController = &controllers.GroupSnapshotController{
Driver: m.Driver,
Recorder: m.Recorder,
}
if err := m.groupSnapshotController.Init(); err != nil {
return fmt.Errorf("error initializing groupSnapshot controller: %v", err)
}
if err := m.performRuleRecovery(); err != nil {
return fmt.Errorf("error doing recovery on pending group snapshot rules: %v", err)
}
return nil
}
func (m *GroupSnapshot) performRuleRecovery() error {
allGroupSnaps, err := k8s.Instance().ListGroupSnapshots(v1.NamespaceAll)
if err != nil {
logrus.Errorf("Failed to list all group snapshots due to: %v. Will retry.", err)
return err
}
if allGroupSnaps == nil {
return nil
}
var lastError error
for _, groupSnap := range allGroupSnaps.Items {
controllers.SetKind(&groupSnap)
err := rule.PerformRuleRecovery(&groupSnap)
if err != nil {
lastError = err
}
}
return lastError
}