Skip to content

Commit 6c88626

Browse files
authored
feat: use K8sNameUUID instead of K8sNameHash and let each mcp have its own namespace (#114)
1 parent 720cfa3 commit 6c88626

File tree

11 files changed

+133
-59
lines changed

11 files changed

+133
-59
lines changed

api/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/openmcp-project/openmcp-operator/api
33
go 1.25.0
44

55
require (
6-
github.com/openmcp-project/controller-utils v0.17.0
6+
github.com/openmcp-project/controller-utils v0.18.0
77
k8s.io/api v0.33.4
88
k8s.io/apiextensions-apiserver v0.33.4
99
k8s.io/apimachinery v0.33.4
@@ -53,13 +53,13 @@ require (
5353
golang.org/x/text v0.28.0 // indirect
5454
golang.org/x/time v0.10.0 // indirect
5555
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
56-
google.golang.org/protobuf v1.36.6 // indirect
56+
google.golang.org/protobuf v1.36.7 // indirect
5757
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
5858
gopkg.in/inf.v0 v0.9.1 // indirect
5959
gopkg.in/yaml.v3 v3.0.1 // indirect
6060
k8s.io/klog/v2 v2.130.1 // indirect
6161
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
62-
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
62+
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d // indirect
6363
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
6464
sigs.k8s.io/randfill v1.0.0 // indirect
6565
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect

api/go.sum

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
2+
github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
13
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
24
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
35
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
@@ -42,8 +44,8 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX
4244
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
4345
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
4446
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
45-
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
46-
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
47+
github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6 h1:EEHtgt9IwisQ2AZ4pIsMjahcegHh6rmhqxzIRQIyepY=
48+
github.com/google/pprof v0.0.0-20250820193118-f64d9cf942d6/go.mod h1:I6V7YzU0XDpsHqbsyrghnFZLO1gwK6NPTNvmetQIk9U=
4749
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
4850
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4951
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -69,12 +71,12 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
6971
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
7072
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
7173
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
72-
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
73-
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
74-
github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY=
75-
github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o=
76-
github.com/openmcp-project/controller-utils v0.17.0 h1:dZsMX2ur/b1759+aKJmcJRdkOVJ131czE6AtIGKX1dE=
77-
github.com/openmcp-project/controller-utils v0.17.0/go.mod h1:RgatwIEftAvHbhd3FIyXb2Sm0N6/AK8A2aF8zBxK930=
74+
github.com/onsi/ginkgo/v2 v2.25.1 h1:Fwp6crTREKM+oA6Cz4MsO8RhKQzs2/gOIVOUscMAfZY=
75+
github.com/onsi/ginkgo/v2 v2.25.1/go.mod h1:ppTWQ1dh9KM/F1XgpeRqelR+zHVwV81DGRSDnFxK7Sk=
76+
github.com/onsi/gomega v1.38.1 h1:FaLA8GlcpXDwsb7m0h2A9ew2aTk3vnZMlzFgg5tz/pk=
77+
github.com/onsi/gomega v1.38.1/go.mod h1:LfcV8wZLvwcYRwPiJysphKAEsmcFnLMK/9c+PjvlX8g=
78+
github.com/openmcp-project/controller-utils v0.18.0 h1:9UESJdCuGkoXhsvRZ/gWPpJrdK8bHvjx0ZP5fROib3k=
79+
github.com/openmcp-project/controller-utils v0.18.0/go.mod h1:S4Ym/PWOR8hy8A4LN1hfLyIf9XTNGUrnryvGtFMiq/U=
7880
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
7981
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
8082
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -96,8 +98,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
9698
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
9799
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
98100
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
99-
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
100-
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
101+
github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8=
102+
github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
101103
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
102104
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
103105
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -112,8 +114,8 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
112114
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
113115
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
114116
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
115-
go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE=
116-
go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI=
117+
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
118+
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
117119
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
118120
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
119121
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -157,8 +159,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
157159
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
158160
gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
159161
gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
160-
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
161-
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
162+
google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A=
163+
google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
162164
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
163165
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
164166
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -180,8 +182,8 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
180182
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
181183
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
182184
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
183-
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
184-
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
185+
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0=
186+
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
185187
sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8=
186188
sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM=
187189
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
dario.cat/mergo v1.0.2
1111
github.com/onsi/ginkgo/v2 v2.25.1
1212
github.com/onsi/gomega v1.38.1
13-
github.com/openmcp-project/controller-utils v0.17.0
13+
github.com/openmcp-project/controller-utils v0.18.0
1414
github.com/openmcp-project/openmcp-operator/api v0.11.0
1515
github.com/spf13/cobra v1.9.1
1616
k8s.io/api v0.33.4
@@ -79,7 +79,7 @@ require (
7979
go.uber.org/zap v1.27.0 // indirect
8080
go.yaml.in/yaml/v2 v2.4.2 // indirect
8181
go.yaml.in/yaml/v3 v3.0.4 // indirect
82-
golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 // indirect
82+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect
8383
golang.org/x/net v0.43.0 // indirect
8484
golang.org/x/oauth2 v0.27.0 // indirect
8585
golang.org/x/sync v0.16.0 // indirect

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ github.com/onsi/ginkgo/v2 v2.25.1 h1:Fwp6crTREKM+oA6Cz4MsO8RhKQzs2/gOIVOUscMAfZY
9797
github.com/onsi/ginkgo/v2 v2.25.1/go.mod h1:ppTWQ1dh9KM/F1XgpeRqelR+zHVwV81DGRSDnFxK7Sk=
9898
github.com/onsi/gomega v1.38.1 h1:FaLA8GlcpXDwsb7m0h2A9ew2aTk3vnZMlzFgg5tz/pk=
9999
github.com/onsi/gomega v1.38.1/go.mod h1:LfcV8wZLvwcYRwPiJysphKAEsmcFnLMK/9c+PjvlX8g=
100-
github.com/openmcp-project/controller-utils v0.17.0 h1:dZsMX2ur/b1759+aKJmcJRdkOVJ131czE6AtIGKX1dE=
101-
github.com/openmcp-project/controller-utils v0.17.0/go.mod h1:RgatwIEftAvHbhd3FIyXb2Sm0N6/AK8A2aF8zBxK930=
100+
github.com/openmcp-project/controller-utils v0.18.0 h1:9UESJdCuGkoXhsvRZ/gWPpJrdK8bHvjx0ZP5fROib3k=
101+
github.com/openmcp-project/controller-utils v0.18.0/go.mod h1:S4Ym/PWOR8hy8A4LN1hfLyIf9XTNGUrnryvGtFMiq/U=
102102
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
103103
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
104104
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -133,8 +133,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
133133
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
134134
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
135135
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
136-
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
137-
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
136+
github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8=
137+
github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
138138
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
139139
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
140140
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -174,8 +174,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
174174
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
175175
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
176176
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
177-
golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 h1:3yiSh9fhy5/RhCSntf4Sy0Tnx50DmMpQ4MQdKKk4yg4=
178-
golang.org/x/exp v0.0.0-20250811191247-51f88131bc50/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg=
177+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0=
178+
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4=
179179
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
180180
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
181181
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=

lib/clusteraccess/clusteraccess.go

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package clusteraccess
33
import (
44
"context"
55
"fmt"
6+
"strings"
67
"time"
78

89
"github.com/openmcp-project/controller-utils/pkg/logging"
@@ -26,7 +27,9 @@ import (
2627
)
2728

2829
const (
29-
controllerName = "ClusterAccess"
30+
controllerName = "ClusterAccess"
31+
requestSuffixMCP = "--mcp"
32+
requestSuffixWorkload = "--wl"
3033
)
3134

3235
// Reconciler is an interface for reconciling access to openMCP clusters.
@@ -123,10 +126,14 @@ func (r *reconcilerImpl) WithWorkloadScheme(scheme *runtime.Scheme) Reconciler {
123126
}
124127

125128
func (r *reconcilerImpl) MCPCluster(ctx context.Context, request reconcile.Request) (*clusters.Cluster, error) {
129+
platformNamespace, err := libutils.StableMCPNamespace(request.Name, request.Namespace)
130+
if err != nil {
131+
return nil, err
132+
}
126133
mcpAccessRequest := &clustersv1alpha1.AccessRequest{
127134
ObjectMeta: metav1.ObjectMeta{
128-
Name: libutils.StableRequestNameMCP(request.Name, r.controllerName),
129-
Namespace: libutils.StableRequestNamespace(request.Namespace),
135+
Name: StableRequestName(r.controllerName, request) + requestSuffixMCP,
136+
Namespace: platformNamespace,
130137
},
131138
}
132139

@@ -143,10 +150,14 @@ func (r *reconcilerImpl) MCPCluster(ctx context.Context, request reconcile.Reque
143150
}
144151

145152
func (r *reconcilerImpl) WorkloadCluster(ctx context.Context, request reconcile.Request) (*clusters.Cluster, error) {
153+
platformNamespace, err := libutils.StableMCPNamespace(request.Name, request.Namespace)
154+
if err != nil {
155+
return nil, err
156+
}
146157
workloadAccessRequest := &clustersv1alpha1.AccessRequest{
147158
ObjectMeta: metav1.ObjectMeta{
148-
Name: libutils.StableRequestNameWorkload(request.Name, r.controllerName),
149-
Namespace: libutils.StableRequestNamespace(request.Namespace),
159+
Name: StableRequestName(r.controllerName, request) + requestSuffixWorkload,
160+
Namespace: platformNamespace,
150161
},
151162
}
152163

@@ -165,9 +176,13 @@ func (r *reconcilerImpl) WorkloadCluster(ctx context.Context, request reconcile.
165176
func (r *reconcilerImpl) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
166177
log := logging.FromContextOrPanic(ctx).WithName(controllerName)
167178

168-
requestNamespace := libutils.StableRequestNamespace(request.Namespace)
169-
requestNameMCP := libutils.StableRequestNameMCP(request.Name, r.controllerName)
170-
requestNameWorkload := libutils.StableRequestNameWorkload(request.Name, r.controllerName)
179+
platformNamespace, err := libutils.StableMCPNamespace(request.Name, request.Namespace)
180+
if err != nil {
181+
return reconcile.Result{}, err
182+
}
183+
requestNamespace := platformNamespace
184+
requestNameMCP := StableRequestName(r.controllerName, request) + requestSuffixMCP
185+
requestNameWorkload := StableRequestName(r.controllerName, request) + requestSuffixWorkload
171186

172187
metadata := requestMetadata(r.controllerName, request)
173188

@@ -258,9 +273,13 @@ func (r *reconcilerImpl) Reconcile(ctx context.Context, request reconcile.Reques
258273
}
259274

260275
func (r *reconcilerImpl) ReconcileDelete(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
261-
requestNamespace := libutils.StableRequestNamespace(request.Namespace)
262-
requestNameMCP := libutils.StableRequestNameMCP(request.Name, r.controllerName)
263-
requestNameWorkload := libutils.StableRequestNameWorkload(request.Name, r.controllerName)
276+
platformNamespace, err := libutils.StableMCPNamespace(request.Name, request.Namespace)
277+
if err != nil {
278+
return reconcile.Result{}, err
279+
}
280+
requestNamespace := platformNamespace
281+
requestNameMCP := StableRequestName(r.controllerName, request) + requestSuffixMCP
282+
requestNameWorkload := StableRequestName(r.controllerName, request) + requestSuffixWorkload
264283

265284
// Delete the Workload AccessRequest if it exists
266285
workloadAccessDeleted, err := deleteAccessRequest(ctx, r.platformClusterClient, requestNameWorkload, requestNamespace)
@@ -719,3 +738,10 @@ func (m *accessRequestMutator) Mutate(accessRequest *clustersv1alpha1.AccessRequ
719738
return nil
720739
}
721740
}
741+
742+
// StableRequestName generates a stable name for a Cluster- or AccessRequest related to an MCP.
743+
// This basically results in '<lowercase_controller_name>--<request_name>'.
744+
func StableRequestName(controllerName string, request reconcile.Request) string {
745+
controllerName = strings.ToLower(controllerName)
746+
return fmt.Sprintf("%s--%s", controllerName, request.Name)
747+
}

lib/clusteraccess/clusteraccess_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919

2020
clustersv1alpha1 "github.com/openmcp-project/openmcp-operator/api/clusters/v1alpha1"
2121
"github.com/openmcp-project/openmcp-operator/lib/clusteraccess"
22-
"github.com/openmcp-project/openmcp-operator/lib/utils"
2322

2423
"sigs.k8s.io/controller-runtime/pkg/client"
2524

@@ -118,7 +117,7 @@ var _ = Describe("ClusterAccessReconciler", func() {
118117
It("should create MCP-/Workload ClusterRequests/AccessRequests", func() {
119118
var reconcileResult reconcile.Result
120119

121-
expectedRequestNamespace := "ob-test"
120+
expectedRequestNamespace := "mcp--80158a25-6874-80a6-a75d-94f57da600c0"
122121

123122
request := reconcile.Request{
124123
NamespacedName: client.ObjectKey{
@@ -129,21 +128,21 @@ var _ = Describe("ClusterAccessReconciler", func() {
129128

130129
accessRequestMCP := &clustersv1alpha1.AccessRequest{
131130
ObjectMeta: metav1.ObjectMeta{
132-
Name: utils.StableRequestNameMCP(request.Name, controllerName),
131+
Name: clusteraccess.StableRequestName(controllerName, request) + "--mcp",
133132
Namespace: expectedRequestNamespace,
134133
},
135134
}
136135

137136
clusterRequestWorkload := &clustersv1alpha1.ClusterRequest{
138137
ObjectMeta: metav1.ObjectMeta{
139-
Name: utils.StableRequestNameWorkload(request.Name, controllerName),
138+
Name: clusteraccess.StableRequestName(controllerName, request) + "--wl",
140139
Namespace: expectedRequestNamespace,
141140
},
142141
}
143142

144143
accessRequestWorkload := &clustersv1alpha1.AccessRequest{
145144
ObjectMeta: metav1.ObjectMeta{
146-
Name: utils.StableRequestNameWorkload(request.Name, controllerName),
145+
Name: clusteraccess.StableRequestName(controllerName, request) + "--wl",
147146
Namespace: expectedRequestNamespace,
148147
},
149148
}
@@ -239,7 +238,7 @@ var _ = Describe("ClusterAccessReconciler", func() {
239238
It("should delete MCP-/Workload ClusterRequests/AccessRequests", func() {
240239
var reconcileResult reconcile.Result
241240

242-
expectedRequestNamespace := "ob-test"
241+
expectedRequestNamespace := "mcp--80158a25-6874-80a6-a75d-94f57da600c0"
243242

244243
request := reconcile.Request{
245244
NamespacedName: client.ObjectKey{
@@ -250,21 +249,21 @@ var _ = Describe("ClusterAccessReconciler", func() {
250249

251250
accessRequestMCP := &clustersv1alpha1.AccessRequest{
252251
ObjectMeta: metav1.ObjectMeta{
253-
Name: utils.StableRequestNameMCP(request.Name, controllerName),
252+
Name: clusteraccess.StableRequestName(controllerName, request) + "--mcp",
254253
Namespace: expectedRequestNamespace,
255254
},
256255
}
257256

258257
clusterRequestWorkload := &clustersv1alpha1.ClusterRequest{
259258
ObjectMeta: metav1.ObjectMeta{
260-
Name: utils.StableRequestNameWorkload(request.Name, controllerName),
259+
Name: clusteraccess.StableRequestName(controllerName, request) + "--wl",
261260
Namespace: expectedRequestNamespace,
262261
},
263262
}
264263

265264
accessRequestWorkload := &clustersv1alpha1.AccessRequest{
266265
ObjectMeta: metav1.ObjectMeta{
267-
Name: utils.StableRequestNameWorkload(request.Name, controllerName),
266+
Name: clusteraccess.StableRequestName(controllerName, request) + "--wl",
268267
Namespace: expectedRequestNamespace,
269268
},
270269
}

0 commit comments

Comments
 (0)