Skip to content

Commit

Permalink
fix: ensures SMCP is created before any other features (opendatahub-i…
Browse files Browse the repository at this point in the history
…o#1118)

With the opendatahub-io#1052 refactoring, the order of features added to the Registry was
accidentally changed. It results in failing of metrics collection
feature which expects SMCP to be created first, but the creation runs
afterwards. The setup is eventually consistent, as the reconcile will
retry, so this not a bug per se, but results in unnecassary errors.

This fix ensures features are ordered as before and levarages
`.EnabledWhen` instead of wrapping features in `if`s.

(cherry picked from commit d6f25c7)
  • Loading branch information
bartoszmajsak authored and VaishnaviHire committed Jul 24, 2024
1 parent becb032 commit d3463d0
Showing 1 changed file with 31 additions and 34 deletions.
65 changes: 31 additions & 34 deletions controllers/dscinitialization/servicemesh_setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,24 +125,28 @@ func (r *DSCInitializationReconciler) authorizationCapability(ctx context.Contex

func (r *DSCInitializationReconciler) serviceMeshCapabilityFeatures(instance *dsciv1.DSCInitialization) feature.FeaturesProvider {
return func(registry feature.FeaturesRegistry) error {
serviceMeshSpec := instance.Spec.ServiceMesh
controlPlaneSpec := instance.Spec.ServiceMesh.ControlPlane

meshMetricsCollection := func(_ context.Context, _ *feature.Feature) (bool, error) {
return controlPlaneSpec.MetricsCollection == "Istio", nil
}

smcp := feature.Define("mesh-control-plane-creation").
ManifestsLocation(Templates.Location).
Manifests(
path.Join(Templates.ServiceMeshDir),
).
WithData(servicemesh.FeatureData.ControlPlane.Define(&instance.Spec).AsAction()).
PreConditions(
servicemesh.EnsureServiceMeshOperatorInstalled,
feature.CreateNamespaceIfNotExists(serviceMeshSpec.ControlPlane.Namespace),
).
PostConditions(
feature.WaitForPodsToBeReady(serviceMeshSpec.ControlPlane.Namespace),
)

if serviceMeshSpec.ControlPlane.MetricsCollection == "Istio" {
metricsCollectionErr := registry.Add(feature.Define("mesh-metrics-collection").
return registry.Add(
feature.Define("mesh-control-plane-creation").
ManifestsLocation(Templates.Location).
Manifests(
path.Join(Templates.ServiceMeshDir),
).
WithData(servicemesh.FeatureData.ControlPlane.Define(&instance.Spec).AsAction()).
PreConditions(
servicemesh.EnsureServiceMeshOperatorInstalled,
feature.CreateNamespaceIfNotExists(controlPlaneSpec.Namespace),
).
PostConditions(
feature.WaitForPodsToBeReady(controlPlaneSpec.Namespace),
),
feature.Define("mesh-metrics-collection").
EnabledWhen(meshMetricsCollection).
ManifestsLocation(Templates.Location).
Manifests(
path.Join(Templates.MetricsDir),
Expand All @@ -152,23 +156,16 @@ func (r *DSCInitializationReconciler) serviceMeshCapabilityFeatures(instance *ds
).
PreConditions(
servicemesh.EnsureServiceMeshInstalled,
))

if metricsCollectionErr != nil {
return metricsCollectionErr
}
}

cfgMap := feature.Define("mesh-shared-configmap").
WithResources(servicemesh.MeshRefs, servicemesh.AuthRefs).
WithData(
servicemesh.FeatureData.ControlPlane.Define(&instance.Spec).AsAction(),
).
WithData(
servicemesh.FeatureData.Authorization.All(&instance.Spec)...,
)

return registry.Add(smcp, cfgMap)
),
feature.Define("mesh-shared-configmap").
WithResources(servicemesh.MeshRefs, servicemesh.AuthRefs).
WithData(
servicemesh.FeatureData.ControlPlane.Define(&instance.Spec).AsAction(),
).
WithData(
servicemesh.FeatureData.Authorization.All(&instance.Spec)...,
),
)
}
}

Expand Down

0 comments on commit d3463d0

Please sign in to comment.