geronimo.validation

Geronimo Configuration Validation Module.

The validation module ensures that the project configuration (geronimo.yaml) is valid and compliant with deployment requirements before any infrastructure is provisioned.

It checks for:

  • Resource sizing (valid Fargate CPU/Memory combinations)
  • Scaling policies (min/max instances)
  • Naming conventions (project and environment names)
  • Structural integrity of the deployment config

Key components:

  • ValidationEngine: Runs the suite of registered validation rules.
  • ValidationRule: Base class for implementing specific checks.
 1"""Geronimo Configuration Validation Module.
 2
 3The validation module ensures that the project configuration (`geronimo.yaml`) is valid
 4and compliant with deployment requirements before any infrastructure is provisioned.
 5
 6It checks for:
 7- Resource sizing (valid Fargate CPU/Memory combinations)
 8- Scaling policies (min/max instances)
 9- Naming conventions (project and environment names)
10- Structural integrity of the deployment config
11
12Key components:
13- ValidationEngine: Runs the suite of registered validation rules.
14- ValidationRule: Base class for implementing specific checks.
15"""
16
17from geronimo.validation.engine import ValidationEngine, ValidationResult
18from geronimo.validation.rules import ValidationRule
19
20__all__ = [
21    "ValidationEngine",
22    "ValidationResult",
23    "ValidationRule",
24]
25
26__docformat__ = "google"
class ValidationEngine:
24class ValidationEngine:
25    """Runs validation rules against configurations.
26
27    The engine maintains a registry of rules that is checked
28    when validate() is called.
29    """
30
31    _rules: list[ValidationRule]
32    """List of registered validation rules."""
33
34    def __init__(self) -> None:
35        """Initialize the validation engine with default rules."""
36        self._rules: list[ValidationRule] = []
37
38        # Register default rules
39        for rule_class in DEFAULT_RULES:
40            self._rules.append(rule_class())
41
42    def register_rule(self, rule: ValidationRule) -> None:
43        """Register a custom validation rule.
44
45        Args:
46            rule: The rule instance to register.
47        """
48        self._rules.append(rule)
49
50    def validate(self, config: GeronimoConfig) -> ValidationResult:
51        """Validate a configuration against all registered rules.
52
53        Args:
54            config: The configuration to validate.
55
56        Returns:
57            ValidationResult with pass/fail status and any errors.
58        """
59        results: list[RuleResult] = []
60        errors: list[str] = []
61        warnings: list[str] = []
62
63        for rule in self._rules:
64            result = rule.validate(config)
65            results.append(result)
66
67            if not result.passed:
68                errors.append(f"[{result.rule_name}] {result.message}")
69
70        return ValidationResult(
71            is_valid=len(errors) == 0,
72            rules_checked=len(self._rules),
73            errors=errors,
74            warnings=warnings,
75            results=results,
76        )
77
78    @property
79    def rules(self) -> list[ValidationRule]:
80        """Get list of registered rules."""
81        return self._rules.copy()

Runs validation rules against configurations.

The engine maintains a registry of rules that is checked when validate() is called.

ValidationEngine()
34    def __init__(self) -> None:
35        """Initialize the validation engine with default rules."""
36        self._rules: list[ValidationRule] = []
37
38        # Register default rules
39        for rule_class in DEFAULT_RULES:
40            self._rules.append(rule_class())

Initialize the validation engine with default rules.

def register_rule(self, rule: ValidationRule) -> None:
42    def register_rule(self, rule: ValidationRule) -> None:
43        """Register a custom validation rule.
44
45        Args:
46            rule: The rule instance to register.
47        """
48        self._rules.append(rule)

Register a custom validation rule.

Arguments:
  • rule: The rule instance to register.
def validate( self, config: geronimo.config.schema.GeronimoConfig) -> ValidationResult:
50    def validate(self, config: GeronimoConfig) -> ValidationResult:
51        """Validate a configuration against all registered rules.
52
53        Args:
54            config: The configuration to validate.
55
56        Returns:
57            ValidationResult with pass/fail status and any errors.
58        """
59        results: list[RuleResult] = []
60        errors: list[str] = []
61        warnings: list[str] = []
62
63        for rule in self._rules:
64            result = rule.validate(config)
65            results.append(result)
66
67            if not result.passed:
68                errors.append(f"[{result.rule_name}] {result.message}")
69
70        return ValidationResult(
71            is_valid=len(errors) == 0,
72            rules_checked=len(self._rules),
73            errors=errors,
74            warnings=warnings,
75            results=results,
76        )

Validate a configuration against all registered rules.

Arguments:
  • config: The configuration to validate.
Returns:

ValidationResult with pass/fail status and any errors.

rules: list[ValidationRule]
78    @property
79    def rules(self) -> list[ValidationRule]:
80        """Get list of registered rules."""
81        return self._rules.copy()

Get list of registered rules.

@dataclass
class ValidationResult:
13@dataclass
14class ValidationResult:
15    """Result of validating a configuration."""
16
17    is_valid: bool
18    rules_checked: int
19    errors: list[str] = field(default_factory=list)
20    warnings: list[str] = field(default_factory=list)
21    results: list[RuleResult] = field(default_factory=list)

Result of validating a configuration.

ValidationResult( is_valid: bool, rules_checked: int, errors: list[str] = <factory>, warnings: list[str] = <factory>, results: list[geronimo.validation.rules.RuleResult] = <factory>)
is_valid: bool
rules_checked: int
errors: list[str]
warnings: list[str]
results: list[geronimo.validation.rules.RuleResult]
class ValidationRule(abc.ABC):
24class ValidationRule(ABC):
25    """Abstract base class for validation rules."""
26
27    # Human-readable name for the rule
28    name: str = "Base Rule"
29
30    # Description of what the rule checks
31    description: str = ""
32
33    @abstractmethod
34    def validate(self, config: "GeronimoConfig") -> RuleResult:
35        """Validate the configuration against this rule.
36
37        Args:
38            config: The configuration to validate.
39
40        Returns:
41            RuleResult indicating pass/fail and any messages.
42        """
43        pass

Abstract base class for validation rules.

name: str = 'Base Rule'
description: str = ''
@abstractmethod
def validate( self, config: geronimo.config.schema.GeronimoConfig) -> geronimo.validation.rules.RuleResult:
33    @abstractmethod
34    def validate(self, config: "GeronimoConfig") -> RuleResult:
35        """Validate the configuration against this rule.
36
37        Args:
38            config: The configuration to validate.
39
40        Returns:
41            RuleResult indicating pass/fail and any messages.
42        """
43        pass

Validate the configuration against this rule.

Arguments:
  • config: The configuration to validate.
Returns:

RuleResult indicating pass/fail and any messages.