Skip to content

Commit 27eebaa

Browse files
authoredOct 11, 2024··
feat(appset): add 'project' to the Cluster Generator params (#20338)
Signed-off-by: cef <moncef.abboud95@gmail.com>
1 parent b05cafd commit 27eebaa

File tree

5 files changed

+47
-19
lines changed

5 files changed

+47
-19
lines changed
 

‎applicationset/generators/cluster.go

+8
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ func (g *ClusterGenerator) GenerateParams(appSetGenerator *argoappsetv1alpha1.Ap
107107
params["name"] = cluster.Name
108108
params["nameNormalized"] = cluster.Name
109109
params["server"] = cluster.Server
110+
params["project"] = ""
110111

111112
err = appendTemplatedValues(appSetGenerator.Clusters.Values, params, appSet.Spec.GoTemplate, appSet.Spec.GoTemplateOptions)
112113
if err != nil {
@@ -131,6 +132,13 @@ func (g *ClusterGenerator) GenerateParams(appSetGenerator *argoappsetv1alpha1.Ap
131132
params["nameNormalized"] = utils.SanitizeName(string(cluster.Data["name"]))
132133
params["server"] = string(cluster.Data["server"])
133134

135+
project, ok := cluster.Data["project"]
136+
if ok {
137+
params["project"] = string(project)
138+
} else {
139+
params["project"] = ""
140+
}
141+
134142
if appSet.Spec.GoTemplate {
135143
meta := map[string]interface{}{}
136144

‎applicationset/generators/cluster_test.go

+32-17
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ func TestGenerateParams(t *testing.T) {
7676
},
7777
},
7878
Data: map[string][]byte{
79-
"config": []byte("{}"),
80-
"name": []byte("production_01/west"),
81-
"server": []byte("https://production-01.example.com"),
79+
"config": []byte("{}"),
80+
"name": []byte("production_01/west"),
81+
"server": []byte("https://production-01.example.com"),
82+
"project": []byte("prod-project"),
8283
},
8384
Type: corev1.SecretType("Opaque"),
8485
},
@@ -106,15 +107,15 @@ func TestGenerateParams(t *testing.T) {
106107
"aaa": "{{ server }}",
107108
"no-op": "{{ this-does-not-exist }}",
108109
}, expected: []map[string]interface{}{
109-
{"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "{{ metadata.annotations.foo.argoproj.io }}", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "{{ metadata.labels.environment }}", "values.aaa": "https://kubernetes.default.svc", "nameNormalized": "in-cluster", "name": "in-cluster", "server": "https://kubernetes.default.svc"},
110+
{"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "{{ metadata.annotations.foo.argoproj.io }}", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "{{ metadata.labels.environment }}", "values.aaa": "https://kubernetes.default.svc", "nameNormalized": "in-cluster", "name": "in-cluster", "server": "https://kubernetes.default.svc", "project": ""},
110111
{
111112
"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "production", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "production", "values.aaa": "https://production-01.example.com", "name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
112-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
113+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
113114
},
114115

115116
{
116117
"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "staging", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "staging", "values.aaa": "https://staging-01.example.com", "name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
117-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
118+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
118119
},
119120
},
120121
clientError: false,
@@ -131,12 +132,12 @@ func TestGenerateParams(t *testing.T) {
131132
expected: []map[string]interface{}{
132133
{
133134
"name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
134-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
135+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
135136
},
136137

137138
{
138139
"name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
139-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
140+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
140141
},
141142
},
142143
clientError: false,
@@ -155,7 +156,7 @@ func TestGenerateParams(t *testing.T) {
155156
expected: []map[string]interface{}{
156157
{
157158
"values.foo": "bar", "name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
158-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
159+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
159160
},
160161
},
161162
clientError: false,
@@ -181,11 +182,11 @@ func TestGenerateParams(t *testing.T) {
181182
expected: []map[string]interface{}{
182183
{
183184
"values.foo": "bar", "name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
184-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
185+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
185186
},
186187
{
187188
"values.foo": "bar", "name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
188-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
189+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
189190
},
190191
},
191192
clientError: false,
@@ -214,7 +215,7 @@ func TestGenerateParams(t *testing.T) {
214215
expected: []map[string]interface{}{
215216
{
216217
"values.name": "baz", "name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
217-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
218+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
218219
},
219220
},
220221
clientError: false,
@@ -244,15 +245,15 @@ func TestGenerateParams(t *testing.T) {
244245
expected: []map[string]interface{}{
245246
{
246247
"clusters": []map[string]interface{}{
247-
{"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "{{ metadata.annotations.foo.argoproj.io }}", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "{{ metadata.labels.environment }}", "values.aaa": "https://kubernetes.default.svc", "nameNormalized": "in-cluster", "name": "in-cluster", "server": "https://kubernetes.default.svc"},
248+
{"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "{{ metadata.annotations.foo.argoproj.io }}", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "{{ metadata.labels.environment }}", "values.aaa": "https://kubernetes.default.svc", "nameNormalized": "in-cluster", "name": "in-cluster", "server": "https://kubernetes.default.svc", "project": ""},
248249
{
249250
"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "production", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "production", "values.aaa": "https://production-01.example.com", "name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
250-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
251+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
251252
},
252253

253254
{
254255
"values.lol1": "lol", "values.lol2": "{{values.lol1}}{{values.lol1}}", "values.lol3": "{{values.lol2}}{{values.lol2}}{{values.lol2}}", "values.foo": "bar", "values.bar": "staging", "values.no-op": "{{ this-does-not-exist }}", "values.bat": "staging", "values.aaa": "https://staging-01.example.com", "name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
255-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
256+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
256257
},
257258
},
258259
},
@@ -284,11 +285,11 @@ func TestGenerateParams(t *testing.T) {
284285
"clusters": []map[string]interface{}{
285286
{
286287
"values.foo": "bar", "name": "production_01/west", "nameNormalized": "production-01-west", "server": "https://production-01.example.com", "metadata.labels.environment": "production", "metadata.labels.org": "bar",
287-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production",
288+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "production", "project": "prod-project",
288289
},
289290
{
290291
"values.foo": "bar", "name": "staging-01", "nameNormalized": "staging-01", "server": "https://staging-01.example.com", "metadata.labels.environment": "staging", "metadata.labels.org": "foo",
291-
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging",
292+
"metadata.labels.argocd.argoproj.io/secret-type": "cluster", "metadata.annotations.foo.argoproj.io": "staging", "project": "",
292293
},
293294
},
294295
},
@@ -419,6 +420,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
419420
"name": "production_01/west",
420421
"nameNormalized": "production-01-west",
421422
"server": "https://production-01.example.com",
423+
"project": "",
422424
"metadata": map[string]interface{}{
423425
"labels": map[string]string{
424426
"argocd.argoproj.io/secret-type": "cluster",
@@ -444,6 +446,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
444446
"name": "staging-01",
445447
"nameNormalized": "staging-01",
446448
"server": "https://staging-01.example.com",
449+
"project": "",
447450
"metadata": map[string]interface{}{
448451
"labels": map[string]string{
449452
"argocd.argoproj.io/secret-type": "cluster",
@@ -469,6 +472,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
469472
"nameNormalized": "in-cluster",
470473
"name": "in-cluster",
471474
"server": "https://kubernetes.default.svc",
475+
"project": "",
472476
"values": map[string]string{
473477
"lol1": "lol",
474478
"lol2": "<no value><no value>",
@@ -497,6 +501,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
497501
"name": "production_01/west",
498502
"nameNormalized": "production-01-west",
499503
"server": "https://production-01.example.com",
504+
"project": "",
500505
"metadata": map[string]interface{}{
501506
"labels": map[string]string{
502507
"argocd.argoproj.io/secret-type": "cluster",
@@ -512,6 +517,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
512517
"name": "staging-01",
513518
"nameNormalized": "staging-01",
514519
"server": "https://staging-01.example.com",
520+
"project": "",
515521
"metadata": map[string]interface{}{
516522
"labels": map[string]string{
517523
"argocd.argoproj.io/secret-type": "cluster",
@@ -542,6 +548,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
542548
"name": "production_01/west",
543549
"nameNormalized": "production-01-west",
544550
"server": "https://production-01.example.com",
551+
"project": "",
545552
"metadata": map[string]interface{}{
546553
"labels": map[string]string{
547554
"argocd.argoproj.io/secret-type": "cluster",
@@ -582,6 +589,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
582589
"name": "production_01/west",
583590
"nameNormalized": "production-01-west",
584591
"server": "https://production-01.example.com",
592+
"project": "",
585593
"metadata": map[string]interface{}{
586594
"labels": map[string]string{
587595
"argocd.argoproj.io/secret-type": "cluster",
@@ -600,6 +608,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
600608
"name": "staging-01",
601609
"nameNormalized": "staging-01",
602610
"server": "https://staging-01.example.com",
611+
"project": "",
603612
"metadata": map[string]interface{}{
604613
"labels": map[string]string{
605614
"argocd.argoproj.io/secret-type": "cluster",
@@ -643,6 +652,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
643652
"name": "staging-01",
644653
"nameNormalized": "staging-01",
645654
"server": "https://staging-01.example.com",
655+
"project": "",
646656
"metadata": map[string]interface{}{
647657
"labels": map[string]string{
648658
"argocd.argoproj.io/secret-type": "cluster",
@@ -690,6 +700,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
690700
"nameNormalized": "in-cluster",
691701
"name": "in-cluster",
692702
"server": "https://kubernetes.default.svc",
703+
"project": "",
693704
"values": map[string]string{
694705
"lol1": "lol",
695706
"lol2": "<no value><no value>",
@@ -705,6 +716,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
705716
"name": "production_01/west",
706717
"nameNormalized": "production-01-west",
707718
"server": "https://production-01.example.com",
719+
"project": "",
708720
"metadata": map[string]interface{}{
709721
"labels": map[string]string{
710722
"argocd.argoproj.io/secret-type": "cluster",
@@ -730,6 +742,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
730742
"name": "staging-01",
731743
"nameNormalized": "staging-01",
732744
"server": "https://staging-01.example.com",
745+
"project": "",
733746
"metadata": map[string]interface{}{
734747
"labels": map[string]string{
735748
"argocd.argoproj.io/secret-type": "cluster",
@@ -782,6 +795,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
782795
"name": "production_01/west",
783796
"nameNormalized": "production-01-west",
784797
"server": "https://production-01.example.com",
798+
"project": "",
785799
"metadata": map[string]interface{}{
786800
"labels": map[string]string{
787801
"argocd.argoproj.io/secret-type": "cluster",
@@ -800,6 +814,7 @@ func TestGenerateParamsGoTemplate(t *testing.T) {
800814
"name": "staging-01",
801815
"nameNormalized": "staging-01",
802816
"server": "https://staging-01.example.com",
817+
"project": "",
803818
"metadata": map[string]interface{}{
804819
"labels": map[string]string{
805820
"argocd.argoproj.io/secret-type": "cluster",

‎applicationset/generators/generator_spec_processor_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ func TestTransForm(t *testing.T) {
199199
"name": "production_01/west",
200200
"nameNormalized": "production-01-west",
201201
"server": "https://production-01.example.com",
202+
"project": "",
202203
}},
203204
},
204205
{
@@ -214,6 +215,7 @@ func TestTransForm(t *testing.T) {
214215
"name": "some-really-long-server-url",
215216
"nameNormalized": "some-really-long-server-url",
216217
"server": "https://some-really-long-url-that-will-exceed-63-characters.com",
218+
"project": "",
217219
}},
218220
},
219221
}

‎applicationset/generators/matrix_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -578,8 +578,8 @@ func TestInterpolatedMatrixGenerate(t *testing.T) {
578578
},
579579
},
580580
expected: []map[string]interface{}{
581-
{"path": "examples/git-generator-files-discovery/cluster-config/dev/config.json", "path.basename": "dev", "path.basenameNormalized": "dev", "name": "dev-01", "nameNormalized": "dev-01", "server": "https://dev-01.example.com", "metadata.labels.environment": "dev", "metadata.labels.argocd.argoproj.io/secret-type": "cluster"},
582-
{"path": "examples/git-generator-files-discovery/cluster-config/prod/config.json", "path.basename": "prod", "path.basenameNormalized": "prod", "name": "prod-01", "nameNormalized": "prod-01", "server": "https://prod-01.example.com", "metadata.labels.environment": "prod", "metadata.labels.argocd.argoproj.io/secret-type": "cluster"},
581+
{"path": "examples/git-generator-files-discovery/cluster-config/dev/config.json", "path.basename": "dev", "path.basenameNormalized": "dev", "name": "dev-01", "nameNormalized": "dev-01", "server": "https://dev-01.example.com", "metadata.labels.environment": "dev", "metadata.labels.argocd.argoproj.io/secret-type": "cluster", "project": ""},
582+
{"path": "examples/git-generator-files-discovery/cluster-config/prod/config.json", "path.basename": "prod", "path.basenameNormalized": "prod", "name": "prod-01", "nameNormalized": "prod-01", "server": "https://prod-01.example.com", "metadata.labels.environment": "prod", "metadata.labels.argocd.argoproj.io/secret-type": "cluster", "project": ""},
583583
},
584584
clientError: false,
585585
},
@@ -734,6 +734,7 @@ func TestInterpolatedMatrixGenerateGoTemplate(t *testing.T) {
734734
"name": "dev-01",
735735
"nameNormalized": "dev-01",
736736
"server": "https://dev-01.example.com",
737+
"project": "",
737738
"metadata": map[string]interface{}{
738739
"labels": map[string]string{
739740
"environment": "dev",
@@ -750,6 +751,7 @@ func TestInterpolatedMatrixGenerateGoTemplate(t *testing.T) {
750751
"name": "prod-01",
751752
"nameNormalized": "prod-01",
752753
"server": "https://prod-01.example.com",
754+
"project": "",
753755
"metadata": map[string]interface{}{
754756
"labels": map[string]string{
755757
"environment": "prod",

‎docs/operator-manual/applicationset/Generators-Cluster.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ It automatically provides the following parameter values to the Application temp
99
- `name`
1010
- `nameNormalized` *('name' but normalized to contain only lowercase alphanumeric characters, '-' or '.')*
1111
- `server`
12+
- `project` *(the Secret's 'project' field, if present; otherwise, it defaults to '')*
1213
- `metadata.labels.<key>` *(for each label in the Secret)*
1314
- `metadata.annotations.<key>` *(for each annotation in the Secret)*
1415

0 commit comments

Comments
 (0)
Please sign in to comment.