@@ -11,6 +11,7 @@ import (
1111 fluxmeta "github.com/fluxcd/pkg/apis/meta"
1212 sourcev1 "github.com/fluxcd/source-controller/api/v1"
1313 clustersv1alpha1 "github.com/openmcp-project/openmcp-operator/api/clusters/v1alpha1"
14+ corev1 "k8s.io/api/core/v1"
1415 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1516 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1617 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -32,25 +33,32 @@ type Gateway struct {
3233 DNSConfig v1alpha1.DNSConfig
3334 PlatformClient client.Client
3435 ClusterClient client.Client
35- //PullSecrets []corev1.LocalObjectReference
3636 FluxKubeconfig * fluxmeta.KubeConfigReference
3737}
3838
3939func (g * Gateway ) InstallOrUpdate (ctx context.Context ) error {
4040 repo := g .getRepo ()
4141 helmRelease := g .getHelmRelease ()
4242
43+ imagePullSecretOps , err := g .ensureSecrets (ctx , g .Cluster .Namespace , deploymentNamespace )
44+ if err != nil {
45+ return fmt .Errorf ("failed to ensure image pull secrets: %w" , err )
46+ }
47+
4348 ops := []applyOperation {
4449 ensureNamespace (deploymentNamespace , g .ClusterClient ),
45- {
50+ }
51+ ops = append (ops , imagePullSecretOps ... )
52+ ops = append (ops ,
53+ applyOperation {
4654 obj : repo ,
4755 f : g .reconcileOCIRepositoryFunc (repo ),
4856 },
49- {
57+ applyOperation {
5058 obj : helmRelease ,
5159 f : g .reconcileHelmReleaseFunc (repo .Name , helmRelease ),
5260 },
53- }
61+ )
5462
5563 return createOrUpdate (ctx , g .PlatformClient , ops ... )
5664}
@@ -131,6 +139,36 @@ func (g *Gateway) reconcileHelmReleaseFunc(repoName string, obj *helmv2.HelmRele
131139 }
132140}
133141
142+ // ----- Secrets -----
143+
144+ func (g * Gateway ) ensureSecrets (ctx context.Context , sourceNamespace , targetNamespace string ) ([]applyOperation , error ) {
145+ secretList := & corev1.SecretList {}
146+ if err := g .PlatformClient .List (ctx , secretList , client .InNamespace (sourceNamespace )); err != nil {
147+ return nil , fmt .Errorf ("failed to list secrets in namespace %s: %w" , sourceNamespace , err )
148+ }
149+
150+ ops := make ([]applyOperation , 0 , len (secretList .Items ))
151+ for _ , imagePullSecret := range g .EnvoyConfig .Images .ImagePullSecrets {
152+ for _ , secret := range secretList .Items {
153+ if imagePullSecret .Name == secret .Name {
154+ ops = append (ops , applyOperation {
155+ obj : & corev1.Secret {
156+ ObjectMeta : metav1.ObjectMeta {
157+ Name : secret .Name ,
158+ Namespace : targetNamespace ,
159+ },
160+ Data : secret .Data ,
161+ Type : secret .Type ,
162+ },
163+ c : g .ClusterClient ,
164+ })
165+ }
166+ }
167+ }
168+
169+ return ops , nil
170+ }
171+
134172func (g * Gateway ) generateHelmValuesJSON () (* apiextensionsv1.JSON , error ) {
135173 values := g .generateHelmValues ()
136174 raw , err := json .Marshal (values )
0 commit comments