Terraform Weekly - Issue #7

Great news this week. Hashicorp is taking over ownership of the VS Code extension for Terraform. This will be a huge quality of life improvement for those who work with Terraform every day.

Since its inception, the VS Code support for Terraform has been a community-driven project and has lacked the ability to keep up with the significant changes, especially in v0.12.

HashiCorp adopted the project and announced some serious investment, including a new language server. There is a new github repo as well.

Here's the thing: I believe firmly that when you break something you need to fix it. Terraform version 0.12 was a great leap forward, but it broke a lot of supporting tools. It is good to see the company stepping up to take responsibility for the full developer experience.

Related to the above, HashiCorp has built its own Terraform language server.

If you are not familiar, IDEs are standardizing on a protocol for implementing programming language features called the Language Server Protocol. This allows one implementation of language features (parsing, linting, etc.) to support multiple code editors.

Here's the thing: As someone who has recently switched to the LSP-based Go extension for VS Code, this is SO. MUCH. BETTER. Go has a fast toolchain already, but this took it from fast to instantaneous.

If we can get to the same level for Terraform code, it will improve developer productivity significantly.

I haven't had a chance to use it, but for those who like BDD-style testing it seems like a well-built tool for using that pattern with Terraform.

I found this presentation to be a good overview of both terraform-compliance and the underlying tech like the Relish language for writing these tests.

Notable Releases

This release is notable because it is the core language, but unless you are wanting to use the new Africa AWS region for your S3 backend, or have encountered one of two bugs, there is not much here.

Changelog:

NOTES:

  • backend/s3: Region validation now automatically supports the new af-south-1 (Africa (Cape Town)) region. For AWS operations to work in the new region, the region must be explicitly enabled as outlined in the AWS Documentation. When the region is not enabled, the Terraform S3 Backend will return errors during credential validation (e.g. error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid). (#24744)

ENHANCEMENTS:

  • backend/s3: Support automatic region validation for af-south-1 (#24744)

  • backend/remote: Add support for force push to remote backend (#24884)

BUG FIXES:

  • core: Destroy provisioners should not evaluate for_each expressions (#24163) core: Fix races in GetVariableValue (#24599)

Data source support for customer-owned IP poils (coip_pool) and some networking resources. Lots of improvements across the board.

Changelog:

FEATURES:

  • New Data Source: aws_ec2_coip_pool (#12852)

  • New Data Source: aws_ec2_coip_pools (#12852)

  • New Data Source: aws_ec2_local_gateway (#12764)

  • New Data Source: aws_ec2_local_gateways (#12764)

  • New Data Source: aws_ec2_local_gateway_route_table (#13002)

  • New Data Source: aws_ec2_local_gateway_route_tables (#13002)

  • New Resource: aws_ec2_transit_gateway_peering_attachment_accepter (#11185)

ENHANCEMENTS:

  • data-source/aws_ebs_volume: Add multi_attach_enabled attribute (#13108)

  • data-source/aws_efs_file_system: Add size_in_bytes attribute (#13125)

  • data-source/aws_eip: Add customer_owned_ip and customer_owned_ipv4_pool attributes (#12862)

  • data-source/aws_launch_template: add partition_number attribute (#11655)

  • resource/aws_api_gateway_deployment: Add triggers argument (#13054)

  • resource/aws_apigatewayv2_deployment: Add triggers argument (#13055)

  • resource/aws_ebs_volume: Add multi_attach_enabled attribute (#13108)

  • resource/aws_eip: Add customer_owned_ip attribute and customer_owned_ipv4_pool argument (#12862)

  • resource/aws_glue_connection: Support KAFKA for connection_type argument (#13141)

  • resource/aws_launch_template: add partition_number attribute (#11655)

  • resource/aws_launch_template: add plan time validation to volume_type, spot_instance_type, ipv6_addresses, ipv4_addresses, private_ip_address` (#11655)

  • resource/aws_workspaces_directory: Add output attributes for workspace_security_group_id, iam_role_id, registration_code, directory_name, directory_type, customer_user_name, alias, ip_group_ids and dns_ip_addresses (#13089)

BUG FIXES:

  • resource/aws_workspaces_directory: Fixes error when removing tags (#13089)

A fairly new provider from Hashicorp. Now you can make your code slower by adding sleeps.

FEATURES

  • New Resource: time_sleep (#12)

As mention above, terraform-compliance is used for BDD-style testing with Terraform code.

Changelog:

  • Major code refactoring on the steps for the readability.

  • Handled related radish-bdd exceptions and giving out terraform-compliance related error information.

  • BREAKING CHANGE : Changed When it has step sentence where it now works as a true filtering function, unlike When it contains

  • When it contains step still works same with a Warning. This step will be deprecated (and converted to When it has ) in future versions.

  • New step: When it must not have something. (#202)

  • New step: Then it must not have something. (#202)

All bug fixes in this one. We (this provider is from my team) greatly improved the robustness of the queries we issue to snowflake.