@@ -18,6 +18,7 @@ import (
1818 "github.com/openshift/library-go/pkg/operator/events"
1919 "github.com/pkg/errors"
2020
21+ appsv1 "k8s.io/api/apps/v1"
2122 corev1 "k8s.io/api/core/v1"
2223 "k8s.io/apimachinery/pkg/api/equality"
2324 apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -47,12 +48,15 @@ var log = ctrl.Log.WithName("ClusterManagementAddonReconciler")
4748func RegisterClusterManagementAddonReconciler (
4849 mgr manager.Manager ,
4950 selfSigner selfsigned.SelfSigner ,
51+ hostClient client.Client ,
5052 nativeClient kubernetes.Interface ,
5153 secretInformer informercorev1.SecretInformer ,
5254 supportsV1CSR bool ,
55+ mcMode bool ,
5356) error {
5457 r := & ManagedProxyConfigurationReconciler {
5558 Client : mgr .GetClient (),
59+ HostClient : hostClient ,
5660 SelfSigner : selfSigner ,
5761 CAPair : selfSigner .CA (),
5862 newCertRotatorFunc : func (namespace , name string , sans ... string ) selfsigned.CertRotation {
@@ -72,12 +76,14 @@ func RegisterClusterManagementAddonReconciler(
7276 EventRecorder : events .NewInMemoryRecorder ("ClusterManagementAddonReconciler" ),
7377
7478 supportsV1CSR : supportsV1CSR ,
79+ mcMode : mcMode ,
7580 }
7681 return r .SetupWithManager (mgr )
7782}
7883
7984type ManagedProxyConfigurationReconciler struct {
80- client.Client
85+ Client client.Client
86+ HostClient client.Client
8187 SelfSigner selfsigned.SelfSigner
8288 CAPair * crypto.CA
8389 SecretLister corev1listers.SecretLister
@@ -88,6 +94,7 @@ type ManagedProxyConfigurationReconciler struct {
8894
8995 newCertRotatorFunc func (namespace , name string , sans ... string ) selfsigned.CertRotation
9096 supportsV1CSR bool
97+ mcMode bool
9198}
9299
93100func (c * ManagedProxyConfigurationReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
@@ -171,12 +178,40 @@ func (c *ManagedProxyConfigurationReconciler) deployProxyServer(config *proxyv1a
171178 newProxyServerRole (config ),
172179 newProxyServerRoleBinding (config ),
173180 }
181+ if c .mcMode {
182+ var manager appsv1.Deployment
183+ key := client.ObjectKey {
184+ Namespace : config .Spec .ProxyServer .Namespace ,
185+ Name : "cluster-proxy-addon-manager" ,
186+ }
187+ if err := c .HostClient .Get (context .Background (), key , & manager ); err == nil {
188+ ownerRef := metav1 .NewControllerRef (& manager , schema.GroupVersionKind {
189+ Group : "apps" ,
190+ Version : "v1" ,
191+ Kind : "Deployment" ,
192+ })
193+ for i , resource := range resources {
194+ resource .SetOwnerReferences ([]metav1.OwnerReference {
195+ * ownerRef ,
196+ })
197+ resources [i ] = resource
198+ }
199+ }
200+ } else {
201+ for i , resource := range resources {
202+ resource .SetOwnerReferences ([]metav1.OwnerReference {
203+ newOwnerReference (config ),
204+ })
205+ resources [i ] = resource
206+ }
207+ }
208+
174209 anyCreated := false
175210 createdKinds := sets .NewString ()
176211 anyUpdated := false
177212 updatedKinds := sets .NewString ()
178213 for _ , resource := range resources {
179- gvks , _ , err := c .Scheme ().ObjectKinds (resource )
214+ gvks , _ , err := c .HostClient . Scheme ().ObjectKinds (resource )
180215 if err != nil {
181216 return false , err
182217 }
@@ -224,7 +259,7 @@ func (c *ManagedProxyConfigurationReconciler) ensure(incomingGeneration int64, g
224259 // create if it doesn't exist
225260 current := & unstructured.Unstructured {}
226261 current .SetGroupVersionKind (gvk )
227- if err := c .Client .Get (
262+ if err := c .HostClient .Get (
228263 context .TODO (),
229264 types.NamespacedName {
230265 Namespace : resource .GetNamespace (),
@@ -239,7 +274,7 @@ func (c *ManagedProxyConfigurationReconciler) ensure(incomingGeneration int64, g
239274 )
240275 }
241276 // if not found, then create
242- if err := c .Client .Create (context .TODO (), resource ); err != nil {
277+ if err := c .HostClient .Create (context .TODO (), resource ); err != nil {
243278 if ! apierrors .IsAlreadyExists (err ) {
244279 return false , false , errors .Wrapf (err ,
245280 "failed to create resource kind: %s, namespace: %s, name %s" ,
@@ -270,7 +305,7 @@ func (c *ManagedProxyConfigurationReconciler) ensure(incomingGeneration int64, g
270305 // update if generation bumped
271306 if ! created && int (incomingGeneration ) > currentGeneration {
272307 resource .SetResourceVersion (current .GetResourceVersion ())
273- if err := c .Client .Update (context .TODO (), resource ); err != nil {
308+ if err := c .HostClient .Update (context .TODO (), resource ); err != nil {
274309 if apierrors .IsConflict (err ) {
275310 return c .ensure (incomingGeneration , gvk , resource )
276311 }
@@ -353,7 +388,7 @@ func (c *ManagedProxyConfigurationReconciler) ensureEntrypoint(config *proxyv1al
353388 },
354389 },
355390 }
356- if err := c .Client .Create (context .TODO (), proxyService ); err != nil {
391+ if err := c .HostClient .Create (context .TODO (), proxyService ); err != nil {
357392 if ! apierrors .IsAlreadyExists (err ) {
358393 return "" , errors .Wrapf (err , "failed to ensure entrypoint service for proxy-server" )
359394 }
@@ -451,11 +486,11 @@ func (c *ManagedProxyConfigurationReconciler) ensureBasicResources(config *proxy
451486}
452487
453488func (c * ManagedProxyConfigurationReconciler ) ensureNamespace (config * proxyv1alpha1.ManagedProxyConfiguration ) error {
454- if err := c .Client .Get (context .TODO (), types.NamespacedName {
489+ if err := c .HostClient .Get (context .TODO (), types.NamespacedName {
455490 Name : config .Spec .ProxyServer .Namespace ,
456491 }, & corev1.Namespace {}); err != nil {
457492 if apierrors .IsNotFound (err ) {
458- if err := c .Client .Create (context .TODO (), & corev1.Namespace {
493+ if err := c .HostClient .Create (context .TODO (), & corev1.Namespace {
459494 ObjectMeta : metav1.ObjectMeta {
460495 Name : config .Spec .ProxyServer .Namespace ,
461496 },
0 commit comments