# Terraform Utility Module Specifications Terraform Utility Module Specifications for the Azure Verified Modules (AVM) program Contribution / Support No specifications available for this criteria Category-Contribution/SupportClass-UtilityLanguage-Terraform Telemetry No specifications available for this criteria Category-TelemetryClass-UtilityLanguage-Terraform Naming / Composition The content below is listed based on the following tags  Category-Naming/CompositionClass-UtilityLanguage-Terraform # ID Title Severity Persona Lifecycle 1 TFFR3 Providers - Permitted Versions MUST OwnerContributor BAU ➕ See Specifications for this category Category-Naming/Composition Class-Pattern Class-Resource Class-Utility Language-Terraform Lifecycle-BAU Persona-Contributor Persona-Owner Severity-MUST Type-Functional Validation-TF/CI/Enforced See origin...ID: TFFR3 - Category: Providers - Permitted Versions Authors MUST only use the following Azure providers, and versions, in their modules: provider min version max version azapi >= 2.0 < 3.0 azurerm >= 4.0 < 5.0 Note Authors MAY select either Azurerm, Azapi, or both providers in their module. Authors MUST use the required_providers block in their module to enforce the provider versions. The following is an example. In it we use the pessimistic version constraint operator ~>. That is to say that ~> 4.0 is equivalent to >= 4.0, < 5.0. terraform { required_providers { # Include one or both providers, as needed azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } azapi = { source = "Azure/azapi" version = "~> 2.0" } } } Code Style No specifications available for this criteria Category-CodeStyleClass-UtilityLanguage-Terraform Inputs / Outputs No specifications available for this criteria Category-Inputs/OutputsClass-UtilityLanguage-Terraform Testing No specifications available for this criteria Category-TestingClass-UtilityLanguage-Terraform Documentation No specifications available for this criteria Category-DocumentationClass-UtilityLanguage-Terraform Release / Publishing The content below is listed based on the following tags  Category-Release/PublishingClass-UtilityLanguage-Terraform # ID Title Severity Persona Lifecycle 1 SNFR17 Semantic Versioning MUST OwnerContributor BAU ➕ See Specifications for this category Category-Release/Publishing Class-Pattern Class-Resource Class-Utility Language-Bicep Language-Terraform Lifecycle-BAU Persona-Contributor Persona-Owner Severity-MUST Type-NonFunctional Validation-TBD See origin...ID: SNFR17 - Category: Release - Semantic Versioning Important You cannot specify the patch version for Bicep modules in the public Bicep Registry, as this is automatically incremented by 1 each time a module is published. You can only set the Major and Minor versions. See the Bicep Contribution Guide for more information. Modules MUST use semantic versioning (aka semver) for their versions and releases in accordance with: Semantic Versioning 2.0.0 For example all modules should be released using a semantic version that matches this pattern: X.Y.Z X == Major Version Y == Minor Version Z == Patch Version Module versioning before first Major version release 1.0.0 Initially modules MUST be released as version 0.1.0 and incremented via Minor and Patch versions only until the AVM Core Team are confident the AVM specifications are mature enough and appropriate CI test coverage is in place, plus the module owner is happy the module has been “road tested” and is now stable enough for its first Major release of version 1.0.0. Note Releasing as version 0.1.0 initially and only incrementing Minor and Patch versions allows the module owner to make breaking changes more easily and frequently as it’s still not an official Major/Stable release. 👍 Until first Major version 1.0.0 is released, given a version number X.Y.Z: X Major version MUST NOT be bumped. Y Minor version MUST be bumped when introducing breaking changes (which would normally bump Major after 1.0.0 release) or feature updates (same as it will be after 1.0.0 release). Z Patch version MUST be bumped when introducing non-breaking, backward compatible bug fixes (same as it will be after 1.0.0 release). --- Source: https://raw.githubusercontent.com/Azure/Azure-Verified-Modules/refs/heads/main/docs/content/specs-defs/specs/terraform/utility.md Last Modified: 0001-01-01