Skip to content

Commit 1df0c34

Browse files
authored
[K8s Plugin] Add helper function to add variant label and annotation (#5857)
* Add a function to add variant labels and annotations to the given manifests. Signed-off-by: Shinnosuke Sawada-Dazai <[email protected]> * Use a helper function to add variant labels and annotations to all manifests. Signed-off-by: Shinnosuke Sawada-Dazai <[email protected]> * Define and use addVariantLabelsAndAnnotations function in k8s_multicluster plugin Signed-off-by: Shinnosuke Sawada-Dazai <[email protected]> * Add t.Parallel() to test cases. Signed-off-by: Shinnosuke Sawada-Dazai <[email protected]> --------- Signed-off-by: Shinnosuke Sawada-Dazai <[email protected]>
1 parent e5ce1cc commit 1df0c34

File tree

9 files changed

+179
-45
lines changed

9 files changed

+179
-45
lines changed

pkg/app/pipedv1/plugin/kubernetes/deployment/misc.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,15 @@ func makeSuffixedName(name, suffix string) string {
106106
}
107107
return name
108108
}
109+
110+
// addVariantLabelsAndAnnotations adds the variant label and annotation to the given manifests.
111+
func addVariantLabelsAndAnnotations(m []provider.Manifest, variantLabel, variant string) {
112+
for _, m := range m {
113+
m.AddLabels(map[string]string{
114+
variantLabel: variant,
115+
})
116+
m.AddAnnotations(map[string]string{
117+
variantLabel: variant,
118+
})
119+
}
120+
}

pkg/app/pipedv1/plugin/kubernetes/deployment/misc_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,3 +276,78 @@ spec:
276276
})
277277
}
278278
}
279+
280+
func TestAddVariantLabelsAndAnnotations(t *testing.T) {
281+
t.Parallel()
282+
283+
testcases := []struct {
284+
name string
285+
inputYAML string
286+
variantLabel string
287+
variant string
288+
wantLabels map[string]string
289+
wantAnnots map[string]string
290+
}{
291+
{
292+
name: "single manifest",
293+
inputYAML: `
294+
apiVersion: v1
295+
kind: ConfigMap
296+
metadata:
297+
name: test-config
298+
`,
299+
variantLabel: "pipecd.dev/variant",
300+
variant: "primary",
301+
wantLabels: map[string]string{"pipecd.dev/variant": "primary"},
302+
wantAnnots: map[string]string{"pipecd.dev/variant": "primary"},
303+
},
304+
{
305+
name: "multiple manifests",
306+
inputYAML: `
307+
apiVersion: v1
308+
kind: ConfigMap
309+
metadata:
310+
name: config1
311+
---
312+
apiVersion: v1
313+
kind: ConfigMap
314+
metadata:
315+
name: config2
316+
`,
317+
variantLabel: "custom/label",
318+
variant: "canary",
319+
wantLabels: map[string]string{"custom/label": "canary"},
320+
wantAnnots: map[string]string{"custom/label": "canary"},
321+
},
322+
}
323+
324+
for _, tc := range testcases {
325+
t.Run(tc.name, func(t *testing.T) {
326+
t.Parallel()
327+
328+
manifests, err := provider.ParseManifests(tc.inputYAML)
329+
require.NoError(t, err)
330+
require.NotEmpty(t, manifests)
331+
332+
addVariantLabelsAndAnnotations(manifests, tc.variantLabel, tc.variant)
333+
334+
for _, m := range manifests {
335+
labelsMap, _, err := m.NestedMap("metadata", "labels")
336+
require.NoError(t, err)
337+
labels := map[string]string{}
338+
for k, v := range labelsMap {
339+
if strVal, ok := v.(string); ok {
340+
labels[k] = strVal
341+
}
342+
}
343+
for k, v := range tc.wantLabels {
344+
assert.Equal(t, v, labels[k], "label %q should be %q", k, v)
345+
}
346+
annots := m.GetAnnotations()
347+
for k, v := range tc.wantAnnots {
348+
assert.Equal(t, v, annots[k], "annotation %q should be %q", k, v)
349+
}
350+
}
351+
})
352+
}
353+
}

pkg/app/pipedv1/plugin/kubernetes/deployment/primary.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,7 @@ func (p *Plugin) executeK8sPrimaryRolloutStage(ctx context.Context, input *sdk.E
107107
}
108108
lp.Successf("Successfully generated %d manifests for PRIMARY variant", len(primaryManifests))
109109

110-
// Add variant annotations to all manifests.
111-
for i := range primaryManifests {
112-
primaryManifests[i].AddLabels(map[string]string{
113-
variantLabel: primaryVariant,
114-
})
115-
primaryManifests[i].AddAnnotations(map[string]string{
116-
variantLabel: primaryVariant,
117-
})
118-
}
110+
addVariantLabelsAndAnnotations(primaryManifests, variantLabel, primaryVariant)
119111

120112
if err := annotateConfigHash(primaryManifests); err != nil {
121113
lp.Errorf("Unable to set %q annotation into the workload manifest (%v)", provider.AnnotationConfigHash, err)

pkg/app/pipedv1/plugin/kubernetes/deployment/rollback.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,7 @@ func (p *Plugin) executeK8sRollbackStage(ctx context.Context, input *sdk.Execute
7171
}
7272
}
7373

74-
// Add variant labels and annotations to all manifests.
75-
for i := range manifests {
76-
manifests[i].AddLabels(map[string]string{
77-
variantLabel: primaryVariant,
78-
})
79-
manifests[i].AddAnnotations(map[string]string{
80-
variantLabel: primaryVariant,
81-
})
82-
}
74+
addVariantLabelsAndAnnotations(manifests, variantLabel, primaryVariant)
8375

8476
if err := annotateConfigHash(manifests); err != nil {
8577
lp.Errorf("Unable to set %q annotation into the workload manifest (%v)", provider.AnnotationConfigHash, err)

pkg/app/pipedv1/plugin/kubernetes/deployment/sync.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,7 @@ func (p *Plugin) executeK8sSyncStage(ctx context.Context, input *sdk.ExecuteStag
8383
}
8484
}
8585

86-
// Add variant annotations to all manifests.
87-
for i := range manifests {
88-
manifests[i].AddLabels(map[string]string{
89-
variantLabel: primaryVariant,
90-
})
91-
manifests[i].AddAnnotations(map[string]string{
92-
variantLabel: primaryVariant,
93-
})
94-
}
86+
addVariantLabelsAndAnnotations(manifests, variantLabel, primaryVariant)
9587

9688
if err := annotateConfigHash(manifests); err != nil {
9789
lp.Errorf("Unable to set %q annotation into the workload manifest (%v)", provider.AnnotationConfigHash, err)

pkg/app/pipedv1/plugin/kubernetes_multicluster/deployment/misc.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,15 @@ func ensureVariantSelectorInWorkload(m provider.Manifest, variantLabel, variant
2525
}
2626
return m.AddStringMapValues(variantMap, "spec", "template", "metadata", "labels")
2727
}
28+
29+
// addVariantLabelsAndAnnotations adds the variant label and annotation to the given manifests.
30+
func addVariantLabelsAndAnnotations(m []provider.Manifest, variantLabel, variant string) {
31+
for _, m := range m {
32+
m.AddLabels(map[string]string{
33+
variantLabel: variant,
34+
})
35+
m.AddAnnotations(map[string]string{
36+
variantLabel: variant,
37+
})
38+
}
39+
}

pkg/app/pipedv1/plugin/kubernetes_multicluster/deployment/misc_test.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,3 +160,78 @@ spec:
160160
}
161161

162162
}
163+
164+
func TestAddVariantLabelsAndAnnotations(t *testing.T) {
165+
t.Parallel()
166+
167+
testcases := []struct {
168+
name string
169+
inputYAML string
170+
variantLabel string
171+
variant string
172+
wantLabels map[string]string
173+
wantAnnots map[string]string
174+
}{
175+
{
176+
name: "single manifest",
177+
inputYAML: `
178+
apiVersion: v1
179+
kind: ConfigMap
180+
metadata:
181+
name: test-config
182+
`,
183+
variantLabel: "pipecd.dev/variant",
184+
variant: "primary",
185+
wantLabels: map[string]string{"pipecd.dev/variant": "primary"},
186+
wantAnnots: map[string]string{"pipecd.dev/variant": "primary"},
187+
},
188+
{
189+
name: "multiple manifests",
190+
inputYAML: `
191+
apiVersion: v1
192+
kind: ConfigMap
193+
metadata:
194+
name: config1
195+
---
196+
apiVersion: v1
197+
kind: ConfigMap
198+
metadata:
199+
name: config2
200+
`,
201+
variantLabel: "custom/label",
202+
variant: "canary",
203+
wantLabels: map[string]string{"custom/label": "canary"},
204+
wantAnnots: map[string]string{"custom/label": "canary"},
205+
},
206+
}
207+
208+
for _, tc := range testcases {
209+
t.Run(tc.name, func(t *testing.T) {
210+
t.Parallel()
211+
212+
manifests, err := provider.ParseManifests(tc.inputYAML)
213+
require.NoError(t, err)
214+
require.NotEmpty(t, manifests)
215+
216+
addVariantLabelsAndAnnotations(manifests, tc.variantLabel, tc.variant)
217+
218+
for _, m := range manifests {
219+
labelsMap, _, err := m.NestedMap("metadata", "labels")
220+
require.NoError(t, err)
221+
labels := map[string]string{}
222+
for k, v := range labelsMap {
223+
if strVal, ok := v.(string); ok {
224+
labels[k] = strVal
225+
}
226+
}
227+
for k, v := range tc.wantLabels {
228+
assert.Equal(t, v, labels[k], "label %q should be %q", k, v)
229+
}
230+
annots := m.GetAnnotations()
231+
for k, v := range tc.wantAnnots {
232+
assert.Equal(t, v, annots[k], "annotation %q should be %q", k, v)
233+
}
234+
}
235+
})
236+
}
237+
}

pkg/app/pipedv1/plugin/kubernetes_multicluster/deployment/rollback.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,7 @@ func (p *Plugin) rollback(ctx context.Context, input *sdk.ExecuteStageInput[kube
161161
}
162162
}
163163

164-
// Add variant labels and annotations to all manifests.
165-
for i := range manifests {
166-
manifests[i].AddLabels(map[string]string{
167-
variantLabel: primaryVariant,
168-
})
169-
manifests[i].AddAnnotations(map[string]string{
170-
variantLabel: primaryVariant,
171-
})
172-
}
164+
addVariantLabelsAndAnnotations(manifests, variantLabel, primaryVariant)
173165

174166
if err := annotateConfigHash(manifests); err != nil {
175167
lp.Errorf("Unable to set %q annotation into the workload manifest (%v)", provider.AnnotationConfigHash, err)

pkg/app/pipedv1/plugin/kubernetes_multicluster/deployment/sync.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,7 @@ func (p *Plugin) sync(
159159
}
160160
}
161161

162-
// Add variant annotations to all manifests.
163-
for i := range manifests {
164-
manifests[i].AddLabels(map[string]string{
165-
variantLabel: primaryVariant,
166-
})
167-
manifests[i].AddAnnotations(map[string]string{
168-
variantLabel: primaryVariant,
169-
})
170-
}
162+
addVariantLabelsAndAnnotations(manifests, variantLabel, primaryVariant)
171163

172164
if err := annotateConfigHash(manifests); err != nil {
173165
lp.Errorf("Unable to set %q annotation into the workload manifest (%v)", provider.AnnotationConfigHash, err)

0 commit comments

Comments
 (0)