Skip to content

Configuration Profiles

Profiles allow you to define multiple configurations for different environments or use cases.

Overview

Profiles enable you to:

  • Define different rule sets for development vs CI
  • Create team-specific configurations
  • Switch between strict and relaxed checking

Defining Profiles

Add profiles to your .terratidy.yaml:

version: 1

# Default configuration
engines:
  fmt:
    enabled: true
  style:
    enabled: true
  lint:
    enabled: true
  policy:
    enabled: false

# Profile definitions
profiles:
  ci:
    description: "Full checks for CI pipelines"
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: true
      policy:
        enabled: true

  development:
    description: "Fast feedback for local development"
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: false
      policy:
        enabled: false

  strict:
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
        rules:
          style.block-label-case:
            severity: error
      lint:
        enabled: true
      policy:
        enabled: true

Using Profiles

Command Line

# Use a specific profile
terratidy check --profile ci

# Override severity threshold
terratidy check --profile ci --severity-threshold error

CLI Flag

terratidy check --profile ci

VS Code

Configure in settings:

{
  "terratidy.profile": "development"
}

Profile Inheritance

Implicit Inheritance (from base config)

All profiles implicitly inherit from the base configuration. When you apply a profile, its settings override the base:

version: 1

# Base configuration
engines:
  fmt:
    enabled: true
  style:
    enabled: true

profiles:
  # Overrides base config: adds lint, keeps fmt and style from base
  ci:
    engines:
      lint:
        enabled: true

Explicit Inheritance (from another profile)

Use the inherits field to inherit from another profile:

version: 1

profiles:
  base:
    description: "Base profile with standard checks"
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: true

  # Inherits all settings from 'base', overrides policy
  strict:
    description: "Strict profile for production"
    inherits: base
    engines:
      policy:
        enabled: true
      style:
        rules:
          style.block-label-case:
            severity: error

Child profile settings take precedence over parent profile settings.

Common Profile Patterns

Development Profile

Fast feedback with minimal checks:

profiles:
  development:
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: false
      policy:
        enabled: false

CI Profile

Comprehensive checks for pull requests:

profiles:
  ci:
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: true
      policy:
        enabled: true

Pre-commit Profile

Quick checks for commit hooks:

profiles:
  pre-commit:
    engines:
      fmt:
        enabled: true
      style:
        enabled: true
      lint:
        enabled: false
      policy:
        enabled: false

Security Profile

Security-focused checks only:

profiles:
  security:
    engines:
      fmt:
        enabled: false
      style:
        enabled: false
      lint:
        enabled: true
      policy:
        enabled: true
        policy_dirs:
          - ./policies/security
        rules:
          policy.security-group-unrestricted:
            enabled: true
            severity: error

Team Profiles

Share profiles across your organization:

# .terratidy.yaml in your module
version: 1

imports:
  - .terratidy/*.yaml

profiles:
  team-a:
    inherits: ci
    engines:
      policy:
        policy_dirs:
          - ./policies/team-a

Viewing Profile Configuration

# Show resolved configuration for a profile
terratidy config show --profile ci