-
Notifications
You must be signed in to change notification settings - Fork 33
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Authorino CR reconcile moved to state of the world reconciler. (#865)
* Authorino CR reconcile moved to state of the world reconciler. # Conflicts: # api/v1beta1/topology.go # controllers/state_of_the_world.go * PR comments updates * Fix integration test. * Fix integration test attempt 2. * Refactor * Change logic on finding initial root kuadrant * Improve logging statements * Kuadrant only expects one kuadrant CR on the cluster. Recent changes enforces the creation of only one authorino. This enforcement was causing the tests to fail as it was creating a second kuadrant CR that would never go to a ready state. * Improve the getting of the kuadrant CR. * Get the oldest kuadrant CR and use that as the only CR. * Refactor structure * PR comment changes * Rebase from main for changes in the policy machinery --------- Signed-off-by: Jim Fitzpatrick <[email protected]>
- Loading branch information
Showing
6 changed files
with
369 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
package controllers | ||
|
||
import ( | ||
"context" | ||
"strings" | ||
"sync" | ||
|
||
v1beta2 "github.com/kuadrant/authorino-operator/api/v1beta1" | ||
"github.com/kuadrant/policy-machinery/controller" | ||
"github.com/kuadrant/policy-machinery/machinery" | ||
"github.com/samber/lo" | ||
"k8s.io/apimachinery/pkg/api/errors" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
"k8s.io/client-go/dynamic" | ||
"k8s.io/utils/ptr" | ||
|
||
"github.com/kuadrant/kuadrant-operator/api/v1beta1" | ||
) | ||
|
||
type AuthorinoCrReconciler struct { | ||
Client *dynamic.DynamicClient | ||
} | ||
|
||
func NewAuthorinoCrReconciler(client *dynamic.DynamicClient) *AuthorinoCrReconciler { | ||
return &AuthorinoCrReconciler{Client: client} | ||
} | ||
|
||
func (r *AuthorinoCrReconciler) Subscription() *controller.Subscription { | ||
return &controller.Subscription{ | ||
ReconcileFunc: r.Reconcile, | ||
Events: []controller.ResourceEventMatcher{ | ||
{Kind: ptr.To(v1beta1.KuadrantKind), EventType: ptr.To(controller.CreateEvent)}, | ||
{Kind: ptr.To(v1beta1.AuthorinoKind), EventType: ptr.To(controller.DeleteEvent)}, | ||
}, | ||
} | ||
} | ||
|
||
func (r *AuthorinoCrReconciler) Reconcile(ctx context.Context, _ []controller.ResourceEvent, topology *machinery.Topology, _ error, _ *sync.Map) error { | ||
logger := controller.LoggerFromContext(ctx).WithName("AuthorinoCrReconciler") | ||
logger.Info("reconciling authorino resource", "status", "started") | ||
defer logger.Info("reconciling authorino resource", "status", "completed") | ||
|
||
kobjs := lo.FilterMap(topology.Objects().Roots(), func(item machinery.Object, _ int) (*v1beta1.Kuadrant, bool) { | ||
if item.GroupVersionKind().Kind == v1beta1.KuadrantKind.Kind { | ||
return item.(*v1beta1.Kuadrant), true | ||
} | ||
return nil, false | ||
}) | ||
|
||
kobj, err := GetOldestKuadrant(kobjs) | ||
if err != nil { | ||
if strings.Contains(err.Error(), "empty list passed") { | ||
logger.Info("kuadrant resource not found, ignoring", "status", "skipping") | ||
return err | ||
} | ||
logger.Error(err, "cannot find Kuadrant resource", "status", "error") | ||
return err | ||
} | ||
|
||
aobjs := lo.FilterMap(topology.Objects().Objects().Children(kobj), func(item machinery.Object, _ int) (machinery.Object, bool) { | ||
if item.GroupVersionKind().Kind == v1beta1.AuthorinoKind.Kind { | ||
return item, true | ||
} | ||
return nil, false | ||
}) | ||
|
||
if len(aobjs) > 0 { | ||
logger.Info("authorino resource already exists, no need to create", "status", "skipping") | ||
return nil | ||
} | ||
|
||
authorino := &v1beta2.Authorino{ | ||
TypeMeta: metav1.TypeMeta{ | ||
Kind: "Authorino", | ||
APIVersion: "operator.authorino.kuadrant.io/v1beta1", | ||
}, | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Name: "authorino", | ||
Namespace: kobj.Namespace, | ||
OwnerReferences: []metav1.OwnerReference{ | ||
{ | ||
APIVersion: kobj.GroupVersionKind().GroupVersion().String(), | ||
Kind: kobj.GroupVersionKind().Kind, | ||
Name: kobj.Name, | ||
UID: kobj.UID, | ||
BlockOwnerDeletion: ptr.To(true), | ||
Controller: ptr.To(true), | ||
}, | ||
}, | ||
}, | ||
Spec: v1beta2.AuthorinoSpec{ | ||
ClusterWide: true, | ||
SupersedingHostSubsets: true, | ||
Listener: v1beta2.Listener{ | ||
Tls: v1beta2.Tls{ | ||
Enabled: ptr.To(false), | ||
}, | ||
}, | ||
OIDCServer: v1beta2.OIDCServer{ | ||
Tls: v1beta2.Tls{ | ||
Enabled: ptr.To(false), | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
unstructuredAuthorino, err := controller.Destruct(authorino) | ||
if err != nil { | ||
logger.Error(err, "failed to destruct authorino", "status", "error") | ||
} | ||
logger.Info("creating authorino resource", "status", "processing") | ||
_, err = r.Client.Resource(v1beta1.AuthorinoResource).Namespace(authorino.Namespace).Create(ctx, unstructuredAuthorino, metav1.CreateOptions{}) | ||
if err != nil { | ||
if errors.IsAlreadyExists(err) { | ||
logger.Info("already created authorino resource", "status", "acceptable") | ||
} else { | ||
logger.Error(err, "failed to create authorino resource", "status", "error") | ||
} | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.