Skip to main content

no-upper-bound

Codeno-upper-bound
Severitywarning
CategoryBest Practice

What it means​

A version constraint specifies a lower bound (e.g., >= 1.0) but no upper bound. This allows any future version, including major releases with breaking changes.

Why it matters​

Semantic versioning reserves major version bumps for breaking changes. A constraint like >= 1.0 will happily accept version 2.0.0, 3.0.0, and beyond -- each of which may change or remove APIs your configuration depends on. This can cause terraform plan failures or, worse, silent behavior changes in your infrastructure.

Example​

This HCL triggers the finding:

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.0"
}
}
}

MonPhare output:

WARNING [no-upper-bound] 'aws' has no upper bound on version
--> versions.tf:4
Suggestion: Add an upper bound, e.g., '>= 1.0, < 2.0'

How to fix​

Option 1: Use the pessimistic operator (~>).

The ~> operator automatically sets an upper bound. ~> 4.0 allows >= 4.0.0 and < 5.0.0.

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}

Option 2: Add an explicit upper bound.

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 5.0, < 6.0"
}
}
}

Both approaches prevent automatic upgrades across major version boundaries.