Skip to content

Input Schema Validation ​

When building complex infrastructure topologies, you want to ensure that the input variables (input.json or input.yaml) passed into Watt TF strictly adhere to your expected data formats.

Watt TF allows you to validate your inputs against a custom JSON Schema before any transformations are executed. This prevents malformed data or missing attributes from breaking your blueprint execution halfway through.

The --schema Flag ​

You can enforce input validation by passing a local path or a remote URL of a JSON Schema file to the wtf build command via the --schema flag.

bash
wtf build \
  --blueprint blueprint.yaml \
  --input inputs.prod.yaml \
  --schema schemas/inputs-schema.json \
  --output main.tf.json

If the data inside inputs.prod.yaml violates the structural rules defined in inputs-schema.json, the execution halts instantly and prints a detailed validation report.

Example ​

Input Schema ​

json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Watt TF Input Schema",
  "type": "object",
  "properties": {
    "environment": {
      "type": "string",
      "enum": ["dev", "staging", "prod"]
    },
    "project_name": {
      "type": "string",
      "minLength": 3
    },
    "enable_monitoring": {
      "type": "boolean"
    }
  },
  "required": ["environment", "project_name"]
}

Invalid input ​

yaml
environment: "local"      # Error: Not in the allowed enum (dev, staging, prod)
project_name: "tf"        # Error: Fails minLength of 3 characters
# enable_monitoring missing but optional, but environment/project_name fail constraints

Expected Output ​

text
❌     input validation failed
Error: Schema validation errors:
  1. environment: environment must be one of the following: "dev", "staging", "prod"
  2. project_name: String length must be greater than or equal to 3