Overview
Infrahub enforces strict schema validation to ensure data integrity and consistency. This guide explains the validation rules, constraints, and how to handle validation errors.Validation Levels
Schema validation occurs at multiple levels:Schema Definition Validation
Validates the YAML schema structure itself:
- Required fields are present
- Data types are correct
- References to other schemas exist
- No circular dependencies
Data Integrity Validation
Validates data against the schema:
- Required attributes have values
- Values match the attribute kind
- Unique constraints are enforced
- Relationships point to valid nodes
Uniqueness Constraints
Single Field Uniqueness
Enforce uniqueness on a single attribute:Composite Uniqueness
Enforce uniqueness across multiple fields:Composite uniqueness is useful for child objects that must be unique within their parent context.
Uniqueness Validation Example
- Site A: Rack “R1”
- Site B: Rack “R1”
- Site A: Rack “R1” (twice)
Attribute Validation
Required vs Optional Attributes
Text Attribute Validation
regex: Pattern the value must matchmin_length: Minimum character lengthmax_length: Maximum character length
Number Attribute Validation
min_value: Minimum numeric valuemax_value: Maximum numeric value
Enum Validation
Dropdown Validation
Relationship Validation
Cardinality Constraints
Relationship Kind Validation
Different relationship kinds have different validation rules:Common Parent Validation
Ensure related objects share a common parent:Human-Friendly ID Validation
Human-friendly IDs create readable identifiers:- Fields in
human_friendly_idshould ensure uniqueness - Use
__valuesuffix for attributes - Can traverse relationships (e.g.,
device__name__value) - Typically matches
uniqueness_constraints
Hierarchical Validation
For tree-structured data:- Parent node must exist for child creation
- Parent-child relationships must match schema definition
- Cannot create circular hierarchies
Inheritance Validation
When usinginherit_from:
- Referenced generic/node must exist
- Can inherit from multiple sources
- Child can override inherited properties
- Cannot create circular inheritance
Schema Change Validation
Adding Mandatory Attributes
Removing Attributes
Removing attributes is allowed but:- Existing data is preserved in the database
- Attribute becomes inaccessible via API
- Consider deprecation workflow for production
Changing Attribute Types
Changingkind may fail if incompatible:
Validation Error Messages
Unique constraint violation
Unique constraint violation
Error:
Uniqueness constraint violation for Device.nameCause: Attempting to create/update an object with a value that violates uniquenessSolution: Use a different value or update the existing objectRequired attribute missing
Required attribute missing
Error:
Required attribute 'name' is missingCause: Creating an object without providing a mandatory attributeSolution: Provide a value for all non-optional attributesInvalid relationship cardinality
Invalid relationship cardinality
Error:
Cannot assign multiple values to cardinality:one relationshipCause: Trying to assign multiple objects to a one-to-one relationshipSolution: Assign only a single objectDropdown requires choices
Dropdown requires choices
Error:
The property 'choices' is required for kind=DropdownCause: Dropdown attribute defined without choicesSolution: Add choices array to the attribute definitionInvalid enum value
Invalid enum value
Error:
Value 'invalid' not in enum ['option1', 'option2']Cause: Providing a value not in the enum listSolution: Use one of the defined enum valuesTesting Schema Validation
Validate schemas before deployment:Best Practices
Define Constraints Early
Set up uniqueness and validation rules from the start to prevent data issues
Use Meaningful Defaults
Provide sensible default values for optional attributes
Test Schema Changes
Always test schema modifications in a branch before applying to main
Document Constraints
Document why specific validation rules exist for future maintainers
Next Steps
Create Schema
Learn how to define schemas with proper validation
Relationships
Understand relationship constraints and validation
Import Schema
Load and test your validated schemas
Working with Branches
Test schema changes safely in branches