Skip to content

wip - Debugging sync controller #388

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
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