This adds validating admission hooks to enforce the requirements on AlertRules and RecordingRules that are currently enforced through the provisioning service and storage mechanisms in preparation of a consistent validation in both legacy storage and unified storage. It also adds a mutating admission hook to the app to ensure that folder annotations and folder labels are kept in sync so we can perform label-selector lists.
28 lines
675 B
Go
28 lines
675 B
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type DurationLike interface {
|
|
ToDuration() (time.Duration, error)
|
|
}
|
|
|
|
func ValidateInterval(baseInterval time.Duration, d DurationLike) error {
|
|
interval, err := d.ToDuration()
|
|
if err != nil {
|
|
return fmt.Errorf("invalid trigger interval: %w", err)
|
|
}
|
|
// Ensure interval is positive and an integer multiple of BaseEvaluationInterval (if provided)
|
|
if interval <= 0 {
|
|
return fmt.Errorf("trigger interval must be greater than 0")
|
|
}
|
|
if baseInterval > 0 {
|
|
if (interval % baseInterval) != 0 {
|
|
return fmt.Errorf("trigger interval must be a multiple of base evaluation interval (%s)", baseInterval.String())
|
|
}
|
|
}
|
|
return nil
|
|
}
|