@@ -33,25 +33,29 @@ type Gateway struct {
3333 DNSConfig v1alpha1.DNSConfig
3434 PlatformClient client.Client
3535 ClusterClient client.Client
36- PullSecrets []corev1.LocalObjectReference
3736 FluxKubeconfig * fluxmeta.KubeConfigReference
3837}
3938
4039func (g * Gateway ) InstallOrUpdate (ctx context.Context ) error {
4140 repo := g .getRepo ()
4241 helmRelease := g .getHelmRelease ()
4342
43+ imagePullSecretOps := g .ensureSecrets (ctx , deploymentNamespace )
44+
4445 ops := []applyOperation {
4546 ensureNamespace (deploymentNamespace , g .ClusterClient ),
46- {
47+ }
48+ ops = append (ops , imagePullSecretOps ... )
49+ ops = append (ops ,
50+ applyOperation {
4751 obj : repo ,
4852 f : g .reconcileOCIRepositoryFunc (repo ),
4953 },
50- {
54+ applyOperation {
5155 obj : helmRelease ,
5256 f : g .reconcileHelmReleaseFunc (repo .Name , helmRelease ),
5357 },
54- }
58+ )
5559
5660 return createOrUpdate (ctx , g .PlatformClient , ops ... )
5761}
@@ -93,11 +97,7 @@ func (g *Gateway) reconcileOCIRepositoryFunc(obj *sourcev1.OCIRepository) func()
9397 Tag : g .EnvoyConfig .Chart .Tag ,
9498 }
9599
96- if len (g .PullSecrets ) > 0 {
97- obj .Spec .SecretRef = & fluxmeta.LocalObjectReference {
98- Name : g .PullSecrets [0 ].Name ,
99- }
100- }
100+ obj .Spec .SecretRef = g .EnvoyConfig .Chart .SecretRef
101101
102102 return nil
103103 }
@@ -136,6 +136,42 @@ func (g *Gateway) reconcileHelmReleaseFunc(repoName string, obj *helmv2.HelmRele
136136 }
137137}
138138
139+ func (g * Gateway ) reconcileSecretFunc (ctx context.Context , obj * corev1.Secret ) func () error {
140+ return func () error {
141+ sourceSecret := & corev1.Secret {}
142+ sourceKey := client.ObjectKey {
143+ Namespace : g .Cluster .Namespace ,
144+ Name : obj .Name ,
145+ }
146+ if err := g .PlatformClient .Get (ctx , sourceKey , sourceSecret ); err != nil {
147+ return fmt .Errorf ("failed to get secret %s: %w" , sourceKey , err )
148+ }
149+
150+ obj .Data = sourceSecret .Data
151+ obj .Type = sourceSecret .Type
152+ return nil
153+ }
154+ }
155+
156+ func (g * Gateway ) ensureSecrets (ctx context.Context , targetNamespace string ) []applyOperation {
157+ ops := make ([]applyOperation , len (g .EnvoyConfig .Images .ImagePullSecrets ))
158+ for i , imagePullSecret := range g .EnvoyConfig .Images .ImagePullSecrets {
159+ obj := & corev1.Secret {
160+ ObjectMeta : metav1.ObjectMeta {
161+ Name : imagePullSecret .Name ,
162+ Namespace : targetNamespace ,
163+ },
164+ }
165+ ops [i ] = applyOperation {
166+ obj : obj ,
167+ f : g .reconcileSecretFunc (ctx , obj ),
168+ c : g .ClusterClient ,
169+ }
170+ }
171+
172+ return ops
173+ }
174+
139175func (g * Gateway ) generateHelmValuesJSON () (* apiextensionsv1.JSON , error ) {
140176 values := g .generateHelmValues ()
141177 raw , err := json .Marshal (values )
@@ -160,7 +196,7 @@ func (g *Gateway) generateHelmValues() map[string]any {
160196 return map [string ]any {
161197 "global" : map [string ]any {
162198 "images" : images ,
163- "imagePullSecrets" : g .PullSecrets ,
199+ "imagePullSecrets" : g .EnvoyConfig . Images . ImagePullSecrets ,
164200 },
165201 }
166202}
0 commit comments