Skip to content

Commit 385436d

Browse files
authored
Merge pull request #12 from edenlabllc/feature/RMK-3-add-snapscheduler-when-label
#1 - add snapscheduler.backube/when label for each volume snapshot
2 parents a8ec665 + 69a0aae commit 385436d

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

internal/snapshot/generator.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
package snapshot
22

33
import (
4-
ebsv1alpha1 "ebs-snapshot-provision.operators.infra/api/v1alpha1"
4+
"fmt"
5+
"regexp"
6+
"time"
7+
58
snapv1 "github.com/kubernetes-csi/external-snapshotter/client/v6/apis/volumesnapshot/v1"
69
core_v1 "k8s.io/api/core/v1"
710
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
811

12+
ebsv1alpha1 "ebs-snapshot-provision.operators.infra/api/v1alpha1"
913
"ebs-snapshot-provision.operators.infra/internal/aws"
1014
)
1115

16+
const (
17+
snapshotTimeLayout = "200601021504"
18+
)
19+
1220
var (
1321
volumeSnapshotMeta = metav1.TypeMeta{
1422
APIVersion: "snapshot.storage.k8s.io/v1",
@@ -21,6 +29,7 @@ var (
2129
}
2230

2331
volumeSnapshotContentSourceVolumeMode = core_v1.PersistentVolumeFilesystem
32+
snapshotTimeRe = regexp.MustCompile(`(\d{12})$`)
2433
)
2534

2635
type InputFromCRD struct {
@@ -71,11 +80,20 @@ func (sg *DefaultSnapshotCreator) CreateVolumeSnapshots(input *InputFromCRD) ([]
7180

7281
}
7382

83+
labels := make(map[string]string)
84+
snapshotTime, err := extractTimeFromName(name)
85+
if err != nil {
86+
return nil, nil, err
87+
}
88+
89+
labels["snapscheduler.backube/when"] = snapshotTime
90+
7491
volumeSnapshots = append(volumeSnapshots, snapv1.VolumeSnapshot{
7592
TypeMeta: volumeSnapshotMeta,
7693
ObjectMeta: metav1.ObjectMeta{
7794
Namespace: namespace,
7895
Name: name,
96+
Labels: labels,
7997
},
8098
Spec: snapv1.VolumeSnapshotSpec{
8199
VolumeSnapshotClassName: &input.CRD.Spec.VolumeSnapshotClassName,
@@ -112,3 +130,17 @@ func (sg *DefaultSnapshotCreator) CreateVolumeSnapshots(input *InputFromCRD) ([]
112130

113131
return volumeSnapshots, volumeSnapshotContents, nil
114132
}
133+
134+
func extractTimeFromName(name string) (string, error) {
135+
match := snapshotTimeRe.FindString(name)
136+
if match == "" {
137+
return "", fmt.Errorf("timestamp not found in snapshot name %q", name)
138+
}
139+
140+
t, err := time.Parse(snapshotTimeLayout, match)
141+
if err != nil {
142+
return "", fmt.Errorf("failed to parse timestamp %q from snapshot name %q: %w", match, name, err)
143+
}
144+
145+
return t.Format(snapshotTimeLayout), nil
146+
}

0 commit comments

Comments
 (0)