Skip to content

Commit be44080

Browse files
authored
feat: add conftest policy for provider version pinning in modules (#203)
1 parent cae60ba commit be44080

File tree

6 files changed

+47
-1
lines changed

6 files changed

+47
-1
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,6 @@ modules/**/.terraform.lock.hcl
4949

5050
# ignore infracost resources
5151
.infracost/
52+
53+
# test fixtures
54+
conftest-policies/testdata/

.pre-commit-config.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ repos:
66
- id: terraform_fmt
77
- id: terraform_docs
88
- id: terraform_validate
9-
exclude: '^[^/]+$|^modules/certificate/'
9+
exclude: '^[^/]+$|^modules/certificate/|^conftest-policies/testdata/'
1010
- id: terraform_tflint
1111
args:
1212
- "--args=--config=__GIT_WORKING_DIR__/.tflint.hcl"
1313
- "--args=--disable-rule=terraform_standard_module_structure"
1414
- "--args=--disable-rule=terraform_unused_required_providers"
15+
exclude: '^conftest-policies/testdata/'
1516
- id: terraform_checkov
1617
args:
1718
- --args=--quiet
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import rego.v1
4+
5+
deny_unpinned_provider_version contains msg if {
6+
some path
7+
some block in input.resource.terraform[path]
8+
some name, provider in block.required_providers
9+
version_constraint := object.get(provider, "version", "")
10+
version_constraint != ""
11+
startswith(version_constraint, ">=")
12+
not contains(version_constraint, "~>")
13+
not contains(version_constraint, "<")
14+
msg := sprintf(
15+
"%s/versions.tf: provider '%s' has loose version constraint '%s' - pin to specific version or use '~>' for minor version pinning",
16+
[path, name, version_constraint],
17+
)
18+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
required_providers {
3+
aws = {
4+
source = "hashicorp/aws"
5+
version = ">= 4.66.0"
6+
}
7+
}
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
required_providers {
3+
aws = {
4+
source = "hashicorp/aws"
5+
version = "= 4.66.0"
6+
}
7+
}
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
terraform {
2+
required_providers {
3+
aws = {
4+
source = "hashicorp/aws"
5+
version = "~> 4.66.0"
6+
}
7+
}
8+
}

0 commit comments

Comments
 (0)