Skip to content

Commit

Permalink
[istio] Refactoring using wrapper structs
Browse files Browse the repository at this point in the history
  • Loading branch information
didierofrivia committed Jun 19, 2023
1 parent cea9975 commit 57d211c
Show file tree
Hide file tree
Showing 4 changed files with 259 additions and 206 deletions.
61 changes: 23 additions & 38 deletions controllers/kuadrant_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import (

kuadrantv1beta1 "github.com/kuadrant/kuadrant-operator/api/v1beta1"
"github.com/kuadrant/kuadrant-operator/pkg/common"
"github.com/kuadrant/kuadrant-operator/pkg/istio"
"github.com/kuadrant/kuadrant-operator/pkg/log"
"github.com/kuadrant/kuadrant-operator/pkg/reconcilers"
)
Expand Down Expand Up @@ -180,7 +181,7 @@ func (r *KuadrantReconciler) unregisterExternalAuthorizer(ctx context.Context, k

func (r *KuadrantReconciler) unregisterExternalAuthorizerIstio(ctx context.Context) error {
logger, _ := logr.FromContext(ctx)
var configsToUpdate []client.Object
var configsToUpdate []istio.ConfigWrapper

iop := &iopv1alpha1.IstioOperator{}
iopKey := client.ObjectKey{Name: controlPlaneProviderName(), Namespace: controlPlaneProviderNamespace()}
Expand All @@ -192,32 +193,24 @@ func (r *KuadrantReconciler) unregisterExternalAuthorizerIstio(ctx context.Conte
}
// otherwise, we assume that the control plane is istio but no installed by its operator
} else {
configsToUpdate = append(configsToUpdate, iop)
configsToUpdate = append(configsToUpdate, istio.NewOperatorWrapper(iop))
}

istioConfigMap := &corev1.ConfigMap{}
if err := r.Client().Get(ctx, client.ObjectKey{Name: "istio", Namespace: controlPlaneProviderNamespace()}, istioConfigMap); err != nil {
logger.V(1).Info("failed to get istio configMap", "key", iopKey, "err", err)
return err
}
configsToUpdate = append(configsToUpdate, istioConfigMap)
configsToUpdate = append(configsToUpdate, istio.NewConfigMapWrapper(istioConfigMap))

for _, config := range configsToUpdate {
if needsUpdate, err := common.UpdateMeshConfig(
config,
func(meshConfig *istiomeshv1alpha1.MeshConfig) bool {
extProviders := common.ExtensionProvidersFromMeshConfig(meshConfig)
if common.HasKuadrantAuthorizer(extProviders) {
meshConfig.ExtensionProviders = common.RemoveKuadrantAuthorizerFromList(extProviders)
return true
}
return false
},
if needsUpdate, err := config.UpdateConfig(
istio.RemoveKuadrantAuthorizerFromConfig,
); err != nil {
return err
} else if needsUpdate {
logger.Info("remove external authorizer from meshconfig")
if err := r.Client().Update(ctx, config); err != nil {
if err := r.Client().Update(ctx, config.GetConfigObject()); err != nil {
return err
}
}
Expand Down Expand Up @@ -253,23 +246,23 @@ func (r *KuadrantReconciler) unregisterExternalAuthorizerOSSM(ctx context.Contex
if err != nil {
return err
}
meshConfig, _ = common.MeshConfigFromStruct(meshConfigStruct)
meshConfig, _ = istio.MeshConfigFromStruct(meshConfigStruct)
} else {
meshConfig = &istiomeshv1alpha1.MeshConfig{}
}
extensionProviders := common.ExtensionProvidersFromMeshConfig(meshConfig)
extensionProviders := istio.ExtensionProvidersFromMeshConfig(meshConfig)

if !common.HasKuadrantAuthorizer(extensionProviders) {
if !istio.HasKuadrantAuthorizer(extensionProviders) {
return nil
}

for idx, extensionProvider := range extensionProviders {
name := extensionProvider.Name
if name == common.ExtAuthorizerName {
if name == istio.ExtAuthorizerName {
// deletes the element in the array
extensionProviders = append(extensionProviders[:idx], extensionProviders[idx+1:]...)
meshConfig.ExtensionProviders = extensionProviders
meshConfigStruct, err := common.MeshConfigToStruct(meshConfig)
meshConfigStruct, err := istio.MeshConfigToStruct(meshConfig)
if err != nil {
return err
}
Expand Down Expand Up @@ -329,7 +322,7 @@ func (r *KuadrantReconciler) registerExternalAuthorizer(ctx context.Context, kOb

func (r *KuadrantReconciler) registerExternalAuthorizerIstio(ctx context.Context, kObj *kuadrantv1beta1.Kuadrant) error {
logger, _ := logr.FromContext(ctx)
var configsToUpdate []client.Object
var configsToUpdate []istio.ConfigWrapper

iop := &iopv1alpha1.IstioOperator{}
iopKey := client.ObjectKey{Name: controlPlaneProviderName(), Namespace: controlPlaneProviderNamespace()}
Expand All @@ -342,32 +335,24 @@ func (r *KuadrantReconciler) registerExternalAuthorizerIstio(ctx context.Context
}
} else {
// if there is no error, add the iop to the list of configs to update
configsToUpdate = append(configsToUpdate, iop)
configsToUpdate = append(configsToUpdate, istio.NewOperatorWrapper(iop))
}

istioConfigMap := &corev1.ConfigMap{}
if err := r.Client().Get(ctx, client.ObjectKey{Name: "istio", Namespace: controlPlaneProviderNamespace()}, istioConfigMap); err != nil {
logger.V(1).Info("failed to get istio configMap", "key", iopKey, "err", err)
return err
}
configsToUpdate = append(configsToUpdate, istioConfigMap)
configsToUpdate = append(configsToUpdate, istio.NewConfigMapWrapper(istioConfigMap))

for _, config := range configsToUpdate {
if needsUpdate, err := common.UpdateMeshConfig(
config,
func(meshConfig *istiomeshv1alpha1.MeshConfig) bool {
extProviders := common.ExtensionProvidersFromMeshConfig(meshConfig)
if !common.HasKuadrantAuthorizer(extProviders) {
meshConfig.ExtensionProviders = append(meshConfig.ExtensionProviders, common.CreateKuadrantAuthorizer(kObj.Namespace))
return true
}
return false
},
if needsUpdate, err := config.UpdateConfig(
istio.AddKuadrantAuthorizerToConfig(kObj.Namespace),
); err != nil {
return err
} else if needsUpdate {
logger.Info("adding external authorizer to meshconfig")
if err := r.Client().Update(ctx, config); err != nil {
if err := r.Client().Update(ctx, config.GetConfigObject()); err != nil {
return err
}
}
Expand Down Expand Up @@ -404,18 +389,18 @@ func (r *KuadrantReconciler) registerExternalAuthorizerOSSM(ctx context.Context,
if err != nil {
return err
}
meshConfig, _ = common.MeshConfigFromStruct(meshConfigStruct)
meshConfig, _ = istio.MeshConfigFromStruct(meshConfigStruct)
} else {
meshConfig = &istiomeshv1alpha1.MeshConfig{}
}
extensionProviders := common.ExtensionProvidersFromMeshConfig(meshConfig)
extensionProviders := istio.ExtensionProvidersFromMeshConfig(meshConfig)

if common.HasKuadrantAuthorizer(extensionProviders) {
if istio.HasKuadrantAuthorizer(extensionProviders) {
return nil
}

meshConfig.ExtensionProviders = append(meshConfig.ExtensionProviders, common.CreateKuadrantAuthorizer(kObj.Namespace))
meshConfigStruct, err := common.MeshConfigToStruct(meshConfig)
meshConfig.ExtensionProviders = append(meshConfig.ExtensionProviders, istio.CreateKuadrantAuthorizer(kObj.Namespace))
meshConfigStruct, err := istio.MeshConfigToStruct(meshConfig)
if err != nil {
return err
}
Expand Down
159 changes: 0 additions & 159 deletions pkg/common/mesh_config.go

This file was deleted.

Loading

0 comments on commit 57d211c

Please sign in to comment.