@@ -18,7 +18,9 @@ import (
1818 "context"
1919 "fmt"
2020
21+ corev1 "k8s.io/api/core/v1"
2122 "k8s.io/apimachinery/pkg/runtime"
23+ "k8s.io/apimachinery/pkg/types"
2224 "sigs.k8s.io/controller-runtime/pkg/client"
2325 "sigs.k8s.io/controller-runtime/pkg/controller"
2426 "sigs.k8s.io/controller-runtime/pkg/handler"
@@ -28,6 +30,7 @@ import (
2830
2931 operatorv1 "github.com/tigera/operator/api/v1"
3032 "github.com/tigera/operator/pkg/common"
33+ "github.com/tigera/operator/pkg/controller/certificatemanager"
3134 "github.com/tigera/operator/pkg/controller/options"
3235 "github.com/tigera/operator/pkg/controller/status"
3336 "github.com/tigera/operator/pkg/controller/utils"
@@ -36,6 +39,7 @@ import (
3639 "github.com/tigera/operator/pkg/render"
3740 "github.com/tigera/operator/pkg/render/monitor"
3841 "github.com/tigera/operator/pkg/render/whisker"
42+ "github.com/tigera/operator/pkg/tls/certificatemanagement"
3943)
4044
4145const (
@@ -65,6 +69,7 @@ func Add(mgr manager.Manager, opts options.AddOptions) error {
6569 for _ , secretName := range []string {
6670 monitor .PrometheusServerTLSSecretName ,
6771 whisker .ManagedClusterConnectionSecretName ,
72+ certificatemanagement .CASecretName ,
6873 render .ProjectCalicoAPIServerTLSSecretName (operatorv1 .TigeraSecureEnterprise ),
6974 render .ProjectCalicoAPIServerTLSSecretName (operatorv1 .Calico ),
7075 } {
@@ -73,11 +78,20 @@ func Add(mgr manager.Manager, opts options.AddOptions) error {
7378 }
7479 }
7580
81+ if err = utils .AddConfigMapWatch (c , certificatemanagement .TrustedCertConfigMapName , common .OperatorNamespace (), & handler.EnqueueRequestForObject {}); err != nil {
82+ return fmt .Errorf ("failed to add watch for config map %s/%s: %w" , common .OperatorNamespace (), certificatemanagement .TrustedCertConfigMapName , err )
83+ }
84+
7685 err = c .WatchObject (& operatorv1.Whisker {}, & handler.EnqueueRequestForObject {})
7786 if err != nil {
7887 return fmt .Errorf ("%s failed to watch primary resource: %w" , controllerName , err )
7988 }
8089
90+ err = c .WatchObject (& operatorv1.ManagementClusterConnection {}, & handler.EnqueueRequestForObject {})
91+ if err != nil {
92+ return fmt .Errorf ("%s failed to watch management cluster connection resource: %w" , controllerName , err )
93+ }
94+
8195 if err = utils .AddInstallationWatch (c ); err != nil {
8296 return fmt .Errorf ("%s failed to watch Installation resource: %w" , controllerName , err )
8397 }
@@ -136,20 +150,19 @@ type Reconciler struct {
136150func (r * Reconciler ) Reconcile (ctx context.Context , request reconcile.Request ) (reconcile.Result , error ) {
137151 reqLogger := log .WithValues ("Request.Namespace" , request .Namespace , "Request.Name" , request .Name )
138152 reqLogger .Info ("Reconciling Whisker" )
139- result := reconcile.Result {}
140153
141154 variant , installation , err := utils .GetInstallation (ctx , r .cli )
142155 if err != nil {
143- return result , err
156+ return reconcile. Result {} , err
144157 }
145158
146159 whiskerCR , err := utils .GetIfExists [operatorv1.Whisker ](ctx , utils .DefaultInstanceKey , r .cli )
147160 if err != nil {
148161 r .status .SetDegraded (operatorv1 .ResourceReadError , "Error querying Whisker CR" , err , reqLogger )
149- return result , err
162+ return reconcile. Result {} , err
150163 } else if whiskerCR == nil {
151164 r .status .OnCRNotFound ()
152- return result , nil
165+ return reconcile. Result {} , nil
153166 }
154167 r .status .OnCRFound ()
155168 // SetMetaData in the TigeraStatus such as observedGenerations.
@@ -158,14 +171,48 @@ func (r *Reconciler) Reconcile(ctx context.Context, request reconcile.Request) (
158171 pullSecrets , err := utils .GetNetworkingPullSecrets (installation , r .cli )
159172 if err != nil {
160173 r .status .SetDegraded (operatorv1 .ResourceReadError , "Error retrieving pull secrets" , err , reqLogger )
161- return result , err
174+ return reconcile.Result {}, err
175+ }
176+
177+ var tunnelSecret * corev1.Secret
178+ managementClusterConnection , err := utils .GetIfExists [operatorv1.ManagementClusterConnection ](ctx , utils .DefaultTSEEInstanceKey , r .cli )
179+ if err != nil {
180+ r .status .SetDegraded (operatorv1 .ResourceReadError , "Error querying ManagementClusterConnection" , err , reqLogger )
181+ return reconcile.Result {}, err
182+ } else if managementClusterConnection != nil {
183+ tunnelSecret , err = utils .GetIfExists [corev1.Secret ](ctx , types.NamespacedName {Name : render .GuardianSecretName , Namespace : common .OperatorNamespace ()}, r .cli )
184+ if err != nil {
185+ return reconcile.Result {}, err
186+ }
187+
188+ if err := utils .ApplyDefaults (ctx , r .cli , managementClusterConnection ); err != nil {
189+ r .status .SetDegraded (operatorv1 .ResourceUpdateError , err .Error (), err , reqLogger )
190+ return reconcile.Result {}, err
191+ }
192+
193+ log .V (2 ).Info ("Loaded ManagementClusterConnection config" , managementClusterConnection )
194+ }
195+
196+ certificateManager , err := certificatemanager .Create (r .cli , installation , r .clusterDomain , common .OperatorNamespace ())
197+ if err != nil {
198+ r .status .SetDegraded (operatorv1 .ResourceCreateError , "Unable to create the certificate manager" , err , reqLogger )
199+ return reconcile.Result {}, err
200+ }
201+
202+ trustedCertBundle , err := certificateManager .LoadTrustedBundle (ctx , r .cli , whisker .WhiskerNamespace )
203+ if err != nil {
204+ r .status .SetDegraded (operatorv1 .ResourceReadError , "Error loading trusted cert bundle" , err , reqLogger )
205+ return reconcile.Result {}, err
162206 }
163207
164208 ch := utils .NewComponentHandler (log , r .cli , r .scheme , whiskerCR )
165209 cfg := & whisker.Configuration {
166- PullSecrets : pullSecrets ,
167- OpenShift : r .provider .IsOpenShift (),
168- Installation : installation ,
210+ PullSecrets : pullSecrets ,
211+ OpenShift : r .provider .IsOpenShift (),
212+ Installation : installation ,
213+ TunnelSecret : tunnelSecret ,
214+ TrustedCertBundle : trustedCertBundle ,
215+ ManagementClusterConnection : managementClusterConnection ,
169216 }
170217
171218 components := []render.Component {whisker .Whisker (cfg )}
@@ -177,12 +224,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, request reconcile.Request) (
177224 for _ , component := range components {
178225 if err := ch .CreateOrUpdateOrDelete (ctx , component , r .status ); err != nil {
179226 r .status .SetDegraded (operatorv1 .ResourceUpdateError , "Error creating / updating resource" , err , reqLogger )
180- return result , err
227+ return reconcile. Result {} , err
181228 }
182229 }
183230
184231 r .status .ReadyToMonitor ()
185232 r .status .ClearDegraded ()
186233
187- return result , nil
234+ return reconcile. Result {} , nil
188235}
0 commit comments