From 6326c09c9ef8fea0396bc2589f26231f9ade2594 Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Tue, 16 Apr 2024 22:12:59 +0100 Subject: [PATCH 1/5] Allow a v prefix for Terraform Version numbers --- image/src/terraform/module.py | 2 +- image/src/terraform/versions.py | 2 +- .../test_required_version.py | 42 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/terraform_version/test_required_version.py diff --git a/image/src/terraform/module.py b/image/src/terraform/module.py index 1a51756c..d3988ce8 100644 --- a/image/src/terraform/module.py +++ b/image/src/terraform/module.py @@ -126,7 +126,7 @@ def get_version_constraints(module: TerraformModule) -> Optional[list[Constraint try: return [Constraint(c) for c in str(block['required_version']).split(',')] except Exception: - debug('required_version constraint is malformed') + debug(f'required_version constraint is malformed: {str(block["required_version"])}') return None diff --git a/image/src/terraform/versions.py b/image/src/terraform/versions.py index cfbad7f4..1fd61649 100644 --- a/image/src/terraform/versions.py +++ b/image/src/terraform/versions.py @@ -80,7 +80,7 @@ def __init__(self, constraint: str): else: raise ValueError(f'Invalid version constraint {constraint}') - if match := re.match(r'(?P\d+)(?:\.(?P\d+))?(?:\.(?P\d+))?(?:-(?P.*))?', constraint): + if match := re.match(r'v?(?P\d+)(?:\.(?P\d+))?(?:\.(?P\d+))?(?:-(?P.*))?', constraint): self.major = int(match.group('major')) self.minor = int(match.group('minor')) if match.group('minor') else None self.patch = int(match.group('patch')) if match.group('patch') else None diff --git a/tests/terraform_version/test_required_version.py b/tests/terraform_version/test_required_version.py new file mode 100644 index 00000000..c71ddefb --- /dev/null +++ b/tests/terraform_version/test_required_version.py @@ -0,0 +1,42 @@ +import hcl2 + +from terraform.versions import Version +from terraform_version.required_version import get_required_version + + +def test_required_version(): + expected_backend = hcl2.loads(''' + terraform { + required_version = "1.0.0" + } + ''') + + assert get_required_version(expected_backend, [Version('1.0.0')]) == Version('1.0.0') + +def test_required_version_v_prefix(): + expected_backend = hcl2.loads(''' + terraform { + required_version = "v1.0.0" + } + ''') + + assert get_required_version(expected_backend, [Version('1.0.0')]) == Version('1.0.0') + +def test_required_version_greater_than(): + expected_backend = hcl2.loads(''' + terraform { + required_version = ">= 1.8.0" + } + ''') + + assert get_required_version(expected_backend, [Version('1.7.0'), Version('1.8.0'), Version('1.8.1')]) == Version('1.8.1') + + +def test_required_version_greater_than_v_prefix(): + expected_backend = hcl2.loads(''' + terraform { + required_version = ">= v1.8.0" + } + ''') + + assert get_required_version(expected_backend, [Version('1.7.0'), Version('1.8.0'), Version('1.8.1')]) == Version('1.8.1') From 8971621020004352ec6255a6086b2aa6c01e0fc8 Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Tue, 16 Apr 2024 22:18:11 +0100 Subject: [PATCH 2/5] Add 1.5.0 backend constraints --- .../terraform_version/backend_constraints.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/image/src/terraform_version/backend_constraints.json b/image/src/terraform_version/backend_constraints.json index d30c10ce..09700a1b 100644 --- a/image/src/terraform_version/backend_constraints.json +++ b/image/src/terraform_version/backend_constraints.json @@ -1004,6 +1004,23 @@ "skip_table_creation": [ ">=0.14.0" ] + }, + "environment_variables": { + "PG_CONN_STR": [ + ">=1.5.0" + ], + "PG_SCHEMA_NAME": [ + ">=1.5.0" + ], + "PG_SKIP_SCHEMA_CREATION": [ + ">=1.5.0" + ], + "PG_SKIP_TABLE_CREATION": [ + ">=1.5.0" + ], + "PG_SKIP_INDEX_CREATION": [ + ">=1.5.0" + ] } }, "s3": { From 3735a7a4925f84a8bd85613b575113215ff254da Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Tue, 16 Apr 2024 22:36:51 +0100 Subject: [PATCH 3/5] Update backend constraints --- .../backend_constraints.json | 94 ++++++++++++++++++- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/image/src/terraform_version/backend_constraints.json b/image/src/terraform_version/backend_constraints.json index 09700a1b..0744a345 100644 --- a/image/src/terraform_version/backend_constraints.json +++ b/image/src/terraform_version/backend_constraints.json @@ -446,6 +446,12 @@ ], "accelerate": [ ">=1.3.0" + ], + "endpoint": [ + ">=1.5.0" + ], + "domain": [ + ">=1.5.0" ] }, "environment_variables": { @@ -1117,10 +1123,6 @@ "skip_region_validation": [ ">=0.11.2" ], - "skip_requesting_account_id": [ - ">=0.10.8", - "<=0.12.31" - ], "sse_customer_key": [ ">=0.12.8" ], @@ -1132,6 +1134,63 @@ ], "workspace_key_prefix": [ ">=0.10.0" + ], + "assume_role": [ + ">=1.6.0" + ], + "endpoints": [ + ">=1.6.0" + ], + "shared_credentials_files": [ + ">=1.6.0" + ], + "use_path_style": [ + ">=1.6.0" + ], + "assume_role_with_web_identity": [ + ">=1.6.0" + ], + "shared_config_files": [ + ">=1.6.0" + ], + "custom_ca_bundle": [ + ">=1.6.0" + ], + "ec2_metadata_service_endpoint": [ + ">=1.6.0" + ], + "ec2_metadata_service_endpoint_mode": [ + ">=1.6.0" + ], + "http_proxy": [ + ">=1.6.0" + ], + "insecure": [ + ">=1.6.0" + ], + "use_fips_endpoint": [ + ">=1.6.0" + ], + "use_dualstack_endpoint": [ + ">=1.6.0" + ], + "sts_region": [ + ">=1.6.0" + ], + "retry_mode": [ + ">=1.6.0" + ], + "allowed_account_ids": [ + ">=1.6.0" + ], + "forbidden_account_ids": [ + ">=1.6.0" + ], + "skip_requesting_account_id": [ + ">=1.6.1" + ], + "skip_s3_checksum_validation": [ + ">=1.6.3" ] }, "environment_variables": { @@ -1167,6 +1226,33 @@ ], "AWS_DYNAMODB_ENDPOINT": [ ">=0.11.14" + ], + "AWS_ENDPOINT_URL_DYNAMODB": [ + ">=1.6.0" + ], + "AWS_ENDPOINT_URL_IAM": [ + ">=1.6.0" + ], + "AWS_ENDPOINT_URL_S3": [ + ">=1.6.0" + ], + "AWS_ENDPOINT_URL_STS": [ + ">=1.6.0" + ], + "AWS_CONFIG_FILE": [ + ">=1.6.0" + ], + "AWS_SHARED_CREDENTIALS_FILE": [ + ">=1.6.0" + ], + "AWS_CA_BUNDLE": [ + ">=1.6.0" + ], + "AWS_EC2_METADATA_SERVICE_ENDPOINT": [ + ">=1.6.0" + ], + "AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE": [ + ">=1.6.0" ] } }, From eecd5cabc5b32058e5d3069b331117de255147d1 Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Tue, 28 May 2024 19:19:06 +0100 Subject: [PATCH 4/5] Add a test for required_version with a v prefix --- .github/workflows/test-version.yaml | 23 +++++++++++++++++++ tests/workflows/test-version/v-prefix/main.tf | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 tests/workflows/test-version/v-prefix/main.tf diff --git a/.github/workflows/test-version.yaml b/.github/workflows/test-version.yaml index 2b8ed9fd..a855d368 100644 --- a/.github/workflows/test-version.yaml +++ b/.github/workflows/test-version.yaml @@ -50,6 +50,29 @@ jobs: exit 1 fi + required_version_v_prefix: + runs-on: ubuntu-latest + name: required_version with a v prefix + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Test terraform-version + uses: ./terraform-version + id: terraform-version + with: + path: tests/workflows/test-version/v-prefix + + - name: Print the version + run: echo "The terraform version was ${{ steps.terraform-version.outputs.terraform }}" + + - name: Check the version + run: | + if [[ "${{ steps.terraform-version.outputs.terraform }}" != "0.12.26" ]]; then + echo "::error:: Terraform version not set from required_version range" + exit 1 + fi + tfswitch: runs-on: ubuntu-latest name: tfswitch diff --git a/tests/workflows/test-version/v-prefix/main.tf b/tests/workflows/test-version/v-prefix/main.tf new file mode 100644 index 00000000..9d3b1b34 --- /dev/null +++ b/tests/workflows/test-version/v-prefix/main.tf @@ -0,0 +1,3 @@ +terraform { + required_version = "<= v0.12.26" +} \ No newline at end of file From 6e823d5f86ff2267b8c663a8f551c887f16cf5ba Mon Sep 17 00:00:00 2001 From: Daniel Flook Date: Tue, 28 May 2024 20:09:33 +0100 Subject: [PATCH 5/5] Update latest version test --- .github/workflows/test-version.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-version.yaml b/.github/workflows/test-version.yaml index a855d368..b8bd33bc 100644 --- a/.github/workflows/test-version.yaml +++ b/.github/workflows/test-version.yaml @@ -526,7 +526,7 @@ jobs: - name: Check the version run: | - if [[ "${{ steps.terraform-version.outputs.terraform }}" != *"1.7"* ]]; then + if [[ "${{ steps.terraform-version.outputs.terraform }}" != *"1.8"* ]]; then echo "::error:: Latest version was not used" exit 1 fi