Skip to content

Commit b838708

Browse files
Merge pull request #812 from vyzigold/fix-autoscaling-watching
[OSPRH-22602] Fix resource watching in autoscaling
2 parents c79b1f5 + 64ea2da commit b838708

2 files changed

Lines changed: 82 additions & 76 deletions

File tree

internal/controller/aodh_controller.go

Lines changed: 0 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
corev1 "k8s.io/api/core/v1"
2626
k8s_errors "k8s.io/apimachinery/pkg/api/errors"
27-
"k8s.io/apimachinery/pkg/types"
2827
"k8s.io/utils/ptr"
2928
ctrl "sigs.k8s.io/controller-runtime"
3029
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
@@ -33,14 +32,12 @@ import (
3332
common "github.com/openstack-k8s-operators/lib-common/modules/common"
3433
condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
3534
endpoint "github.com/openstack-k8s-operators/lib-common/modules/common/endpoint"
36-
env "github.com/openstack-k8s-operators/lib-common/modules/common/env"
3735
helper "github.com/openstack-k8s-operators/lib-common/modules/common/helper"
3836
job "github.com/openstack-k8s-operators/lib-common/modules/common/job"
3937
"github.com/openstack-k8s-operators/lib-common/modules/common/labels"
4038
secret "github.com/openstack-k8s-operators/lib-common/modules/common/secret"
4139
service "github.com/openstack-k8s-operators/lib-common/modules/common/service"
4240
statefulset "github.com/openstack-k8s-operators/lib-common/modules/common/statefulset"
43-
"github.com/openstack-k8s-operators/lib-common/modules/common/tls"
4441
util "github.com/openstack-k8s-operators/lib-common/modules/common/util"
4542
mariadbv1 "github.com/openstack-k8s-operators/mariadb-operator/api/v1beta1"
4643

@@ -304,9 +301,6 @@ func (r *AutoscalingReconciler) reconcileNormalAodh(
304301
common.AppSelector: autoscaling.ServiceName,
305302
}
306303

307-
// ConfigVars
308-
configVars := make(map[string]env.Setter)
309-
310304
//
311305
// Handle Topology
312306
//
@@ -521,66 +515,6 @@ func (r *AutoscalingReconciler) reconcileNormalAodh(
521515
return ctrlResult, nil
522516
}
523517

524-
//
525-
// TLS input validation
526-
//
527-
// Validate the CA cert secret if provided
528-
if instance.Spec.Aodh.TLS.CaBundleSecretName != "" {
529-
hash, err := tls.ValidateCACertSecret(
530-
ctx,
531-
helper.GetClient(),
532-
types.NamespacedName{
533-
Name: instance.Spec.Aodh.TLS.CaBundleSecretName,
534-
Namespace: instance.Namespace,
535-
},
536-
)
537-
if err != nil {
538-
if k8s_errors.IsNotFound(err) {
539-
// Since the CA cert secret should have been manually created by the user and provided in the spec,
540-
// we treat this as a warning because it means that the service will not be able to start.
541-
instance.Status.Conditions.Set(condition.FalseCondition(
542-
condition.TLSInputReadyCondition,
543-
condition.ErrorReason,
544-
condition.SeverityWarning,
545-
condition.TLSInputReadyWaitingMessage, instance.Spec.Aodh.TLS.CaBundleSecretName))
546-
return ctrl.Result{}, nil
547-
}
548-
instance.Status.Conditions.Set(condition.FalseCondition(
549-
condition.TLSInputReadyCondition,
550-
condition.ErrorReason,
551-
condition.SeverityWarning,
552-
condition.TLSInputErrorMessage,
553-
err.Error()))
554-
return ctrl.Result{}, err
555-
}
556-
557-
if hash != "" {
558-
configVars[tls.CABundleKey] = env.SetValue(hash)
559-
}
560-
561-
// Validate API service certs secrets
562-
certsHash, err := instance.Spec.Aodh.TLS.API.ValidateCertSecrets(ctx, helper, instance.Namespace)
563-
if err != nil {
564-
if k8s_errors.IsNotFound(err) {
565-
instance.Status.Conditions.Set(condition.FalseCondition(
566-
condition.TLSInputReadyCondition,
567-
condition.RequestedReason,
568-
condition.SeverityInfo,
569-
condition.TLSInputReadyWaitingMessage, err.Error()))
570-
return ctrl.Result{}, nil
571-
}
572-
instance.Status.Conditions.Set(condition.FalseCondition(
573-
condition.TLSInputReadyCondition,
574-
condition.ErrorReason,
575-
condition.SeverityWarning,
576-
condition.TLSInputErrorMessage,
577-
err.Error()))
578-
return ctrl.Result{}, err
579-
}
580-
581-
configVars[tls.TLSHashName] = env.SetValue(certsHash)
582-
}
583-
584518
// remove finalizers from unused MariaDBAccount records
585519
err = mariadbv1.DeleteUnusedMariaDBAccountFinalizers(
586520
ctx, helper, autoscaling.DatabaseCRName,
@@ -589,9 +523,6 @@ func (r *AutoscalingReconciler) reconcileNormalAodh(
589523
return ctrl.Result{}, err
590524
}
591525

592-
// all cert input checks out so report InputReady
593-
instance.Status.Conditions.MarkTrue(condition.TLSInputReadyCondition, condition.InputReadyMessage)
594-
595526
Log.Info("Reconciled Service Aodh successfully")
596527
return ctrl.Result{}, nil
597528
}

internal/controller/autoscaling_controller.go

Lines changed: 82 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,11 @@ func (r *AutoscalingReconciler) Reconcile(ctx context.Context, req ctrl.Request)
221221

222222
// fields to index to reconcile when change
223223
const (
224-
autoscalingPasswordSecretField = ".spec.secret"
225-
autoscalingCaBundleSecretNameField = ".spec.tls.caBundleSecretName" //nolint:gosec // G101: Not actual credentials, just field path
226-
autoscalingTLSAPIInternalField = ".spec.tls.api.internal.secretName"
227-
autoscalingTLSAPIPublicField = ".spec.tls.api.public.secretName"
228-
autoscalingTLSField = ".spec.tls.secretName"
229-
topologyField = ".spec.topologyRef.Name"
224+
autoscalingPasswordSecretField = ".spec.aodh.secret" //nolint:gosec // G101: Not actual credentials, just field path
225+
autoscalingCaBundleSecretNameField = ".spec.aodh.tls.caBundleSecretName" //nolint:gosec // G101: Not actual credentials, just field path
226+
autoscalingTLSAPIInternalField = ".spec.aodh.tls.api.internal.secretName"
227+
autoscalingTLSAPIPublicField = ".spec.aodh.tls.api.public.secretName"
228+
topologyField = ".spec.aodh.topologyRef.Name"
230229
)
231230

232231
var (
@@ -235,7 +234,6 @@ var (
235234
autoscalingCaBundleSecretNameField,
236235
autoscalingTLSAPIInternalField,
237236
autoscalingTLSAPIPublicField,
238-
autoscalingTLSField,
239237
topologyField,
240238
}
241239
)
@@ -538,7 +536,70 @@ func (r *AutoscalingReconciler) reconcileNormal(
538536
return ctrl.Result{}, err
539537
}
540538

539+
//
540+
// TLS input validation
541+
//
542+
// Validate the CA cert secret if provided
543+
if instance.Spec.Aodh.TLS.CaBundleSecretName != "" {
544+
hash, err := tls.ValidateCACertSecret(
545+
ctx,
546+
helper.GetClient(),
547+
types.NamespacedName{
548+
Name: instance.Spec.Aodh.TLS.CaBundleSecretName,
549+
Namespace: instance.Namespace,
550+
},
551+
)
552+
if err != nil {
553+
if k8s_errors.IsNotFound(err) {
554+
// Since the CA cert secret should have been manually created by the user and provided in the spec,
555+
// we treat this as a warning because it means that the service will not be able to start.
556+
instance.Status.Conditions.Set(condition.FalseCondition(
557+
condition.TLSInputReadyCondition,
558+
condition.ErrorReason,
559+
condition.SeverityWarning,
560+
condition.TLSInputReadyWaitingMessage, instance.Spec.Aodh.TLS.CaBundleSecretName))
561+
return ctrl.Result{}, nil
562+
}
563+
instance.Status.Conditions.Set(condition.FalseCondition(
564+
condition.TLSInputReadyCondition,
565+
condition.ErrorReason,
566+
condition.SeverityWarning,
567+
condition.TLSInputErrorMessage,
568+
err.Error()))
569+
return ctrl.Result{}, err
570+
}
571+
572+
if hash != "" {
573+
configMapVars[tls.CABundleKey] = env.SetValue(hash)
574+
}
575+
// Validate API service certs secrets
576+
certsHash, err := instance.Spec.Aodh.TLS.API.ValidateCertSecrets(ctx, helper, instance.Namespace)
577+
if err != nil {
578+
if k8s_errors.IsNotFound(err) {
579+
instance.Status.Conditions.Set(condition.FalseCondition(
580+
condition.TLSInputReadyCondition,
581+
condition.RequestedReason,
582+
condition.SeverityInfo,
583+
condition.TLSInputReadyWaitingMessage, err.Error()))
584+
return ctrl.Result{}, nil
585+
}
586+
instance.Status.Conditions.Set(condition.FalseCondition(
587+
condition.TLSInputReadyCondition,
588+
condition.ErrorReason,
589+
condition.SeverityWarning,
590+
condition.TLSInputErrorMessage,
591+
err.Error()))
592+
return ctrl.Result{}, err
593+
}
594+
595+
configMapVars[tls.TLSHashName] = env.SetValue(certsHash)
596+
}
597+
598+
// all cert input checks out so report InputReady
599+
instance.Status.Conditions.MarkTrue(condition.TLSInputReadyCondition, condition.InputReadyMessage)
600+
541601
inputHash, hashChanged, err := r.createHashOfInputHashes(ctx, instance, configMapVars)
602+
542603
if err != nil {
543604
instance.Status.Conditions.Set(condition.FalseCondition(
544605
condition.ServiceConfigReadyCondition,
@@ -886,6 +947,19 @@ func (r *AutoscalingReconciler) SetupWithManager(ctx context.Context, mgr ctrl.M
886947
}
887948
return nil
888949
}
950+
951+
// index autoscalingPasswordSecretField
952+
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &telemetryv1.Autoscaling{}, autoscalingPasswordSecretField, func(rawObj client.Object) []string {
953+
// Extract the secret name from the spec, if one is provided
954+
cr := rawObj.(*telemetryv1.Autoscaling)
955+
if cr.Spec.Aodh.Secret == "" {
956+
return nil
957+
}
958+
return []string{cr.Spec.Aodh.Secret}
959+
}); err != nil {
960+
return err
961+
}
962+
889963
// index autoscalingCaBundleSecretNameField
890964
if err := mgr.GetFieldIndexer().IndexField(context.Background(), &telemetryv1.Autoscaling{}, autoscalingCaBundleSecretNameField, func(rawObj client.Object) []string {
891965
// Extract the secret name from the spec, if one is provided
@@ -981,6 +1055,7 @@ func (r *AutoscalingReconciler) findObjectsForSrc(ctx context.Context, src clien
9811055
}
9821056
err := r.List(ctx, crList, listOps)
9831057
if err != nil {
1058+
Log.Error(err, fmt.Sprintf("listing %s for field: %s - %s", crList.GroupVersionKind().Kind, field, src.GetNamespace()))
9841059
return []reconcile.Request{}
9851060
}
9861061

0 commit comments

Comments
 (0)