@@ -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,46 @@ 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+ if g .EnvoyConfig .Images == nil || len (g .EnvoyConfig .Images .ImagePullSecrets ) == 0 {
158+ return nil
159+ }
160+
161+ ops := make ([]applyOperation , len (g .EnvoyConfig .Images .ImagePullSecrets ))
162+ for i , imagePullSecret := range g .EnvoyConfig .Images .ImagePullSecrets {
163+ obj := & corev1.Secret {
164+ ObjectMeta : metav1.ObjectMeta {
165+ Name : imagePullSecret .Name ,
166+ Namespace : targetNamespace ,
167+ },
168+ }
169+ ops [i ] = applyOperation {
170+ obj : obj ,
171+ f : g .reconcileSecretFunc (ctx , obj ),
172+ c : g .ClusterClient ,
173+ }
174+ }
175+
176+ return ops
177+ }
178+
139179func (g * Gateway ) generateHelmValuesJSON () (* apiextensionsv1.JSON , error ) {
140180 values := g .generateHelmValues ()
141181 raw , err := json .Marshal (values )
@@ -160,7 +200,7 @@ func (g *Gateway) generateHelmValues() map[string]any {
160200 return map [string ]any {
161201 "global" : map [string ]any {
162202 "images" : images ,
163- "imagePullSecrets" : g .PullSecrets ,
203+ "imagePullSecrets" : g .EnvoyConfig . Images . ImagePullSecrets ,
164204 },
165205 }
166206}
0 commit comments