@@ -54,6 +54,8 @@ import (
5454 dataplanev1 "github.com/openstack-k8s-operators/openstack-operator/apis/dataplane/v1beta1"
5555 deployment "github.com/openstack-k8s-operators/openstack-operator/pkg/dataplane"
5656 dataplaneutil "github.com/openstack-k8s-operators/openstack-operator/pkg/dataplane/util"
57+
58+ machineconfig "github.com/openshift/api/machineconfiguration/v1"
5759)
5860
5961const (
@@ -121,8 +123,8 @@ func (r *OpenStackDataPlaneNodeSetReconciler) GetLogger(ctx context.Context) log
121123// +kubebuilder:rbac:groups="image.openshift.io",resources=imagestreamtags,verbs=get;list;watch
122124
123125// RBAC for ImageContentSourcePolicy and MachineConfig
124- // +kubebuilder:rbac:groups="operator.openshift.io",resources=imagecontentsourcepolicy ,verbs=get;list
125- // +kubebuilder:rbac:groups="machineconfiguration.openshift.io",resources=machineconfig ,verbs=get;list
126+ // +kubebuilder:rbac:groups="operator.openshift.io",resources=imagecontentsourcepolicies ,verbs=get;list
127+ // +kubebuilder:rbac:groups="machineconfiguration.openshift.io",resources=machineconfigs ,verbs=get;list;watch
126128
127129// Reconcile is part of the main kubernetes reconciliation loop which aims to
128130// move the current state of the cluster closer to the desired state.
@@ -644,9 +646,46 @@ func (r *OpenStackDataPlaneNodeSetReconciler) SetupWithManager(
644646 builder .WithPredicates (predicate.ResourceVersionChangedPredicate {})).
645647 Watches (& openstackv1.OpenStackVersion {},
646648 handler .EnqueueRequestsFromMapFunc (r .genericWatcherFn )).
649+ Watches (& machineconfig.MachineConfig {},
650+ handler .EnqueueRequestsFromMapFunc (r .machineConfigWatcherFn ),
651+ builder .WithPredicates (predicate.ResourceVersionChangedPredicate {})).
647652 Complete (r )
648653}
649654
655+ // machineConfigWatcherFn - watches for changes to the registries MachineConfig resource and queues
656+ // a reconcile of each NodeSet if the MachineConfig is changed.
657+ func (r * OpenStackDataPlaneNodeSetReconciler ) machineConfigWatcherFn (
658+ ctx context.Context , obj client.Object ,
659+ ) []reconcile.Request {
660+ Log := r .GetLogger (ctx )
661+ nodeSets := & dataplanev1.OpenStackDataPlaneNodeSetList {}
662+ kind := strings .ToLower (obj .GetObjectKind ().GroupVersionKind ().Kind )
663+ const registryMachineConfigName string = "99-master-generated-registries"
664+
665+ mcNamespacedName := types.NamespacedName {
666+ Name : registryMachineConfigName ,
667+ Namespace : "" ,
668+ }
669+
670+ if err := r .Get (ctx , mcNamespacedName , obj ); err != nil {
671+ Log .Error (err , fmt .Sprintf ("Unable to retrieve MachingConfig %s" , registryMachineConfigName ))
672+ return nil
673+ }
674+
675+ requests := make ([]reconcile.Request , 0 , len (nodeSets .Items ))
676+ for _ , nodeSet := range nodeSets .Items {
677+ requests = append (requests , reconcile.Request {
678+ NamespacedName : types.NamespacedName {
679+ Namespace : obj .GetNamespace (),
680+ Name : nodeSet .Name ,
681+ },
682+ })
683+ Log .Info (fmt .Sprintf ("reconcile loop for openstackdataplanenodeset %s triggered by %s %s" ,
684+ nodeSet .Name , kind , obj .GetName ()))
685+ }
686+ return requests
687+ }
688+
650689func (r * OpenStackDataPlaneNodeSetReconciler ) secretWatcherFn (
651690 ctx context.Context , obj client.Object ,
652691) []reconcile.Request {
0 commit comments