## What this PR does This patch narrows the scope of the Velero backup strategy controller to simply template Velero Backups according to the application being backed up and the template in the strategy. Creating storage locations is now out of scope. ### Release note ```release-note [backups] Implement templating for Velero backups and remove creation of backup storage locations and volume snapshot locations. ``` Signed-off-by: Timofei Larkin <lllamnyp@gmail.com>
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package template
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func TestTemplate_PodTemplateSpec(t *testing.T) {
|
|
original := corev1.PodTemplateSpec{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "my-pod",
|
|
Labels: map[string]string{
|
|
"app": "demo",
|
|
},
|
|
Annotations: map[string]string{
|
|
"note": "hello",
|
|
},
|
|
},
|
|
Spec: corev1.PodSpec{
|
|
Containers: []corev1.Container{
|
|
{
|
|
Name: "{{ .Release.Name }}",
|
|
Image: "nginx:1.21",
|
|
Args: []string{"--flag={{ .Values.value }}"},
|
|
Env: []corev1.EnvVar{
|
|
{
|
|
Name: "FOO",
|
|
Value: "{{ .Release.Namespace }}",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
templateContext := map[string]any{
|
|
"Release": map[string]any{
|
|
"Name": "foo",
|
|
"Namespace": "notdefault",
|
|
},
|
|
"Values": map[string]any{
|
|
"value": 3,
|
|
},
|
|
}
|
|
reference := *original.DeepCopy()
|
|
reference.Spec.Containers[0].Name = "foo"
|
|
reference.Spec.Containers[0].Args[0] = "--flag=3"
|
|
reference.Spec.Containers[0].Env[0].Value = "notdefault"
|
|
got, err := Template(&original, templateContext)
|
|
if err != nil {
|
|
t.Fatalf("Template returned error: %v", err)
|
|
}
|
|
b1, err := json.Marshal(reference)
|
|
t.Logf("reference:\n%s", string(b1))
|
|
if err != nil {
|
|
t.Fatalf("failed to marshal reference value: %v", err)
|
|
}
|
|
b2, err := json.Marshal(got)
|
|
t.Logf("got:\n%s", string(b2))
|
|
if err != nil {
|
|
t.Fatalf("failed to marshal transformed value: %v", err)
|
|
}
|
|
if string(b1) != string(b2) {
|
|
t.Fatalf("transformed value not equal to reference value, expected: %s, got: %s", string(b1), string(b2))
|
|
}
|
|
}
|