/
applicationbackup.go
154 lines (135 loc) · 6.94 KB
/
applicationbackup.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package v1alpha1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
const (
// ApplicationBackupResourceName is name for "applicationbackup" resource
ApplicationBackupResourceName = "applicationbackup"
// ApplicationBackupResourcePlural is plural for "applicationbackup" resource
ApplicationBackupResourcePlural = "applicationbackups"
)
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// ApplicationBackup represents applicationbackup object
type ApplicationBackup struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ApplicationBackupSpec `json:"spec"`
Status ApplicationBackupStatus `json:"status"`
}
// ApplicationBackupSpec is the spec used to backup applications
type ApplicationBackupSpec struct {
Namespaces []string `json:"namespaces"`
BackupLocation string `json:"backupLocation"`
Selectors map[string]string `json:"selectors"`
PreExecRule string `json:"preExecRule"`
PostExecRule string `json:"postExecRule"`
ReclaimPolicy ApplicationBackupReclaimPolicyType `json:"reclaimPolicy"`
SkipServiceUpdate bool `json:"skipServiceUpdate"`
// Options to be passed in to the driver
Options map[string]string `json:"options"`
IncludeResources []ObjectInfo `json:"includeResources"`
ResourceTypes []string `json:"resourceTypes"`
BackupType string `json:"backupType"`
}
// ApplicationBackupReclaimPolicyType is the reclaim policy for the application backup
type ApplicationBackupReclaimPolicyType string
const (
// ApplicationBackupReclaimPolicyDelete is to specify that the backup should
// be deleted when the object is deleted
ApplicationBackupReclaimPolicyDelete ApplicationBackupReclaimPolicyType = "Delete"
// ApplicationBackupReclaimPolicyRetain is to specify that the backup should
// be retained when the object is deleted
ApplicationBackupReclaimPolicyRetain ApplicationBackupReclaimPolicyType = "Retain"
)
// ApplicationBackupStatus is the status of a application backup operation
type ApplicationBackupStatus struct {
Stage ApplicationBackupStageType `json:"stage"`
Status ApplicationBackupStatusType `json:"status"`
Reason string `json:"reason"`
Resources []*ApplicationBackupResourceInfo `json:"resources"`
Volumes []*ApplicationBackupVolumeInfo `json:"volumes"`
BackupPath string `json:"backupPath"`
TriggerTimestamp metav1.Time `json:"triggerTimestamp"`
LastUpdateTimestamp metav1.Time `json:"lastUpdateTimestamp"`
FinishTimestamp metav1.Time `json:"finishTimestamp"`
TotalSize uint64 `json:"totalSize"`
}
// ObjectInfo contains info about an object being backed up or restored
type ObjectInfo struct {
Name string `json:"name"`
Namespace string `json:"namespace"`
metav1.GroupVersionKind `json:",inline"`
}
// ApplicationBackupResourceInfo is the info for the backup of a resource
type ApplicationBackupResourceInfo struct {
ObjectInfo `json:",inline"`
}
// ApplicationBackupVolumeInfo is the info for the backup of a volume
type ApplicationBackupVolumeInfo struct {
PersistentVolumeClaim string `json:"persistentVolumeClaim"`
Namespace string `json:"namespace"`
Volume string `json:"volume"`
BackupID string `json:"backupID"`
DriverName string `json:"driverName"`
Zones []string `json:"zones"`
Status ApplicationBackupStatusType `json:"status"`
Reason string `json:"reason"`
Options map[string]string `jons:"options"`
TotalSize uint64 `json:"totalSize"`
ActualSize uint64 `json:"actualSize"`
StorageClass string `json:"storageClass"`
}
// ApplicationBackupStatusType is the status of the application backup
type ApplicationBackupStatusType string
const (
// ApplicationBackupStatusInitial is the initial state when backup is created
ApplicationBackupStatusInitial ApplicationBackupStatusType = ""
// ApplicationBackupStatusPending for when backup is still pending
ApplicationBackupStatusPending ApplicationBackupStatusType = "Pending"
// ApplicationBackupStatusInProgress for when backup is in progress
ApplicationBackupStatusInProgress ApplicationBackupStatusType = "InProgress"
// ApplicationBackupStatusFailed for when backup has failed
ApplicationBackupStatusFailed ApplicationBackupStatusType = "Failed"
// ApplicationBackupStatusPartialSuccess for when backup was partially successful
ApplicationBackupStatusPartialSuccess ApplicationBackupStatusType = "PartialSuccess"
// ApplicationBackupStatusSuccessful for when backup has completed successfully
ApplicationBackupStatusSuccessful ApplicationBackupStatusType = "Successful"
)
// ApplicationBackupStageType is the stage of the backup
type ApplicationBackupStageType string
const (
// ApplicationBackupStageInitial for when backup is created
ApplicationBackupStageInitial ApplicationBackupStageType = ""
// ApplicationBackupStagePreExecRule for when the PreExecRule is being executed
ApplicationBackupStagePreExecRule ApplicationBackupStageType = "PreExecRule"
// ApplicationBackupStagePostExecRule for when the PostExecRule is being executed
ApplicationBackupStagePostExecRule ApplicationBackupStageType = "PostExecRule"
// ApplicationBackupStageVolumes for when volumes are being backed up
ApplicationBackupStageVolumes ApplicationBackupStageType = "Volumes"
// ApplicationBackupStageApplications for when applications are being backed up
ApplicationBackupStageApplications ApplicationBackupStageType = "Applications"
// ApplicationBackupStageFinal is the final stage for backup
ApplicationBackupStageFinal ApplicationBackupStageType = "Final"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// ApplicationBackupList is a list of ApplicationBackups
type ApplicationBackupList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ApplicationBackup `json:"items"`
}
// CreateObjectsMap create a map of objects that are to be included in an
// operation. Allows quick lookup of objects
func CreateObjectsMap(
includeObjects []ObjectInfo,
) map[ObjectInfo]bool {
objectsMap := make(map[ObjectInfo]bool)
for i := 0; i < len(includeObjects); i++ {
if includeObjects[i].Group == "" {
includeObjects[i].Group = "core"
}
objectsMap[includeObjects[i]] = true
}
return objectsMap
}