Skip to content

Commit 1f0544f

Browse files
oceanDrew Robinson
andauthored
fix: Deployment (and cronjob) template error handling (#453)
* Fix: add error handling for deployment template With error logging and test. * Fix: add error handling for cronjob template With error logging and associated test * Chore: Correctly format Go files (sorry) --------- Co-authored-by: Drew Robinson <[email protected]>
1 parent aaef086 commit 1f0544f

File tree

4 files changed

+83
-2
lines changed

4 files changed

+83
-2
lines changed

internal/templating/templates_cronjob.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,10 @@ func GenerateCronjobTemplate(
119119
if err != nil {
120120
return nil, err
121121
}
122-
podTemplateSpec, _ := generatePodTemplateSpec(buildValues, serviceValues, serviceTypeValues, cronjob.ObjectMeta, templateAnnotations, nCronjob.Name, nCronjob.Command)
122+
podTemplateSpec, err := generatePodTemplateSpec(buildValues, serviceValues, serviceTypeValues, cronjob.ObjectMeta, templateAnnotations, nCronjob.Name, nCronjob.Command)
123+
if err != nil {
124+
return nil, fmt.Errorf("couldn't generate cronjob template for service %s: %v", serviceValues.OverrideName, err)
125+
}
123126
// end cronjob template
124127
cronjob.Spec.JobTemplate.Spec.Template = *podTemplateSpec
125128
result = append(result, *cronjob)

internal/templating/templates_cronjob_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package templating
33
import (
44
"os"
55
"reflect"
6+
"strings"
67
"testing"
78

89
"github.com/andreyvit/diff"
@@ -222,3 +223,43 @@ func TestGenerateCronjobTemplate(t *testing.T) {
222223
})
223224
}
224225
}
226+
227+
func TestGenerateCronjobTemplate_ErrorHandling(t *testing.T) {
228+
// Test that errors from generatePodTemplateSpec are properly propagated
229+
buildValues := generator.BuildValues{
230+
Project: "test-project",
231+
Environment: "test-env",
232+
EnvironmentType: "production",
233+
Namespace: "test-namespace",
234+
Branch: "main",
235+
GitSHA: "abcd1234",
236+
LagoonVersion: "v2.0.0",
237+
Kubernetes: "local",
238+
Services: []generator.ServiceValues{
239+
{
240+
Name: "cli",
241+
OverrideName: "cli",
242+
Type: "cli",
243+
NativeCronjobs: []lagoon.Cronjob{
244+
{
245+
Name: "test-cronjob",
246+
Schedule: "0 * * * *",
247+
Command: "echo test",
248+
},
249+
},
250+
},
251+
},
252+
// Intentionally missing ImageReferences to trigger error
253+
ImageReferences: map[string]string{},
254+
}
255+
256+
_, err := GenerateCronjobTemplate(buildValues)
257+
if err == nil {
258+
t.Error("GenerateCronjobTemplate() should return error when image reference is missing")
259+
}
260+
261+
expectedErrMsg := "couldn't generate cronjob template for service cli"
262+
if err != nil && !strings.Contains(err.Error(), expectedErrMsg) {
263+
t.Errorf("GenerateCronjobTemplate() error = %v, want error containing %v", err, expectedErrMsg)
264+
}
265+
}

internal/templating/templates_deployment.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ func GenerateDeploymentTemplate(
140140
}
141141
deployment.Spec.Strategy = serviceTypeValues.Strategy
142142

143-
podTemplateSpec, _ := generatePodTemplateSpec(buildValues, serviceValues, serviceTypeValues, deployment.ObjectMeta, templateAnnotations, serviceTypeValues.PrimaryContainer.Name, "")
143+
podTemplateSpec, err := generatePodTemplateSpec(buildValues, serviceValues, serviceTypeValues, deployment.ObjectMeta, templateAnnotations, serviceTypeValues.PrimaryContainer.Name, "")
144+
if err != nil {
145+
return nil, fmt.Errorf("couldn't generate deployment template for service %s: %v", serviceValues.OverrideName, err)
146+
}
144147
// end cronjob template
145148
deployment.Spec.Template = *podTemplateSpec
146149
if buildValues.PodSpreadConstraints {

internal/templating/templates_deployment_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"os"
66
"reflect"
7+
"strings"
78
"testing"
89

910
"github.com/andreyvit/diff"
@@ -1176,3 +1177,36 @@ func TestLinkedServiceCalculator(t *testing.T) {
11761177
})
11771178
}
11781179
}
1180+
1181+
func TestGenerateDeploymentTemplate_ErrorHandling(t *testing.T) {
1182+
// Test that errors from generatePodTemplateSpec are properly propagated
1183+
buildValues := generator.BuildValues{
1184+
Project: "test-project",
1185+
Environment: "test-env",
1186+
EnvironmentType: "production",
1187+
Namespace: "test-namespace",
1188+
Branch: "main",
1189+
GitSHA: "abcd1234",
1190+
LagoonVersion: "v2.0.0",
1191+
Kubernetes: "local",
1192+
Services: []generator.ServiceValues{
1193+
{
1194+
Name: "nginx",
1195+
OverrideName: "nginx",
1196+
Type: "nginx",
1197+
},
1198+
},
1199+
// Intentionally missing ImageReferences to trigger error
1200+
ImageReferences: map[string]string{},
1201+
}
1202+
1203+
_, err := GenerateDeploymentTemplate(buildValues)
1204+
if err == nil {
1205+
t.Error("GenerateDeploymentTemplate() should return error when image reference is missing")
1206+
}
1207+
1208+
expectedErrMsg := "couldn't generate deployment template for service nginx"
1209+
if err != nil && !strings.Contains(err.Error(), expectedErrMsg) {
1210+
t.Errorf("GenerateDeploymentTemplate() error = %v, want error containing %v", err, expectedErrMsg)
1211+
}
1212+
}

0 commit comments

Comments
 (0)