Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 24 additions & 10 deletions pkg/controllers/cloud_config_sync_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/predicate"

configv1 "github.com/openshift/api/config/v1"
Expand Down Expand Up @@ -184,6 +183,8 @@ func (r *CloudConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request)
}

func (r *CloudConfigReconciler) isCloudConfigSyncNeeded(platformStatus *configv1.PlatformStatus, infraCloudConfigRef configv1.ConfigMapFileReference) (bool, error) {
klog.V(1).Info("Checking if cloud config sync needed")

if platformStatus == nil {
return false, fmt.Errorf("platformStatus is required")
}
Expand All @@ -205,6 +206,7 @@ func (r *CloudConfigReconciler) isCloudConfigSyncNeeded(platformStatus *configv1
}

func (r *CloudConfigReconciler) prepareSourceConfigMap(source *corev1.ConfigMap, infra *configv1.Infrastructure) (*corev1.ConfigMap, error) {
klog.V(1).Info("Preparing source config map")
// Keys might be different between openshift-config/cloud-config and openshift-config-managed/kube-cloud-config
// Always use "cloud.conf" which is default one across openshift
cloudConfCm := source.DeepCopy()
Expand All @@ -225,11 +227,13 @@ func (r *CloudConfigReconciler) prepareSourceConfigMap(source *corev1.ConfigMap,
}

func (r *CloudConfigReconciler) isCloudConfigEqual(source *corev1.ConfigMap, target *corev1.ConfigMap) bool {
klog.V(1).Info("Checking if cloud config equal")
return source.Immutable == target.Immutable &&
reflect.DeepEqual(source.Data, target.Data) && reflect.DeepEqual(source.BinaryData, target.BinaryData)
}

func (r *CloudConfigReconciler) syncCloudConfigData(ctx context.Context, source *corev1.ConfigMap, target *corev1.ConfigMap) error {
klog.V(1).Info("Syncing cloud config data")
target.SetName(syncedCloudConfigMapName)
target.SetNamespace(r.ManagedNamespace)
target.Data = source.Data
Expand All @@ -250,6 +254,8 @@ func (r *CloudConfigReconciler) syncCloudConfigData(ctx context.Context, source

// SetupWithManager sets up the controller with the Manager.
func (r *CloudConfigReconciler) SetupWithManager(mgr ctrl.Manager) error {
klog.V(1).Info("Setting up controller")

build := ctrl.NewControllerManagedBy(mgr).
Named("CloudConfigSyncController").
For(
Expand All @@ -260,21 +266,29 @@ func (r *CloudConfigReconciler) SetupWithManager(mgr ctrl.Manager) error {
openshiftCloudConfigMapPredicates(),
),
),
).
Watches(
&configv1.Infrastructure{},
handler.EnqueueRequestsFromMapFunc(toManagedConfigMap),
builder.WithPredicates(infrastructurePredicates()),
).
Watches(
&configv1.Network{},
handler.EnqueueRequestsFromMapFunc(toManagedConfigMap),
)
/*
.
Watches(
&configv1.Infrastructure{},
handler.EnqueueRequestsFromMapFunc(toManagedConfigMap),
builder.WithPredicates(infrastructurePredicates()),
).
Watches(
&configv1.Network{},
handler.EnqueueRequestsFromMapFunc(toManagedConfigMap),
).Watches(
&corev1.ConfigMap{}, handler.EnqueueRequestsFromMapFunc(toManagedConfigMap),

)

*/

return build.Complete(r)
}

func (r *CloudConfigReconciler) setAvailableCondition(ctx context.Context) error {
klog.V(1).Info("Setting available condition")
co, err := r.getOrCreateClusterOperator(ctx)
if err != nil {
return err
Expand Down
10 changes: 8 additions & 2 deletions pkg/controllers/watch_predicates.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ package controllers
import (
"context"

configv1 "github.com/openshift/api/config/v1"
operatorv1 "github.com/openshift/api/operator/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/predicate"
"sigs.k8s.io/controller-runtime/pkg/reconcile"

configv1 "github.com/openshift/api/config/v1"
operatorv1 "github.com/openshift/api/operator/v1"
)

func clusterOperatorPredicates() predicate.Funcs {
Expand All @@ -34,12 +36,14 @@ func toClusterOperator(context.Context, client.Object) []reconcile.Request {
}

func toManagedConfigMap(context.Context, client.Object) []reconcile.Request {
klog.V(1).Info("toManagedConfigMap called")
return []reconcile.Request{{
NamespacedName: client.ObjectKey{Name: syncedCloudConfigMapName, Namespace: DefaultManagedNamespace},
}}
}

func infrastructurePredicates() predicate.Funcs {
klog.V(1).Info("infrastructurePredicates called")
isInfrastructureCluster := func(obj runtime.Object) bool {
infra, ok := obj.(*configv1.Infrastructure)
return ok && infra.GetName() == infrastructureResourceName
Expand Down Expand Up @@ -106,6 +110,8 @@ func openshiftCloudConfigMapPredicates() predicate.Funcs {
isOpenshiftConfigNamespace := configMap.GetNamespace() == OpenshiftConfigNamespace
isManagedCloudConfig := configMap.GetName() == managedCloudConfigMapName && configMap.GetNamespace() == OpenshiftManagedConfigNamespace

klog.V(1).Infof("is ocp configmap %t/%t", isOpenshiftConfigNamespace, isManagedCloudConfig)

return isOpenshiftConfigNamespace || isManagedCloudConfig
}

Expand Down