- count and for_each for modules: Similar to the arguments of the same name in resource and data blocks, these create multiple instances of a module from a single module block.
- depends_on for modules: Modules can now use the depends_on argument to ensure that all module resource changes will be applied after any changes to the depends_on targets have been applied.
- Automatic installation of third-party providers: Terraform now supports a decentralized namespace for providers, allowing for automatic installation of community providers from third-party namespaces in the public registry and from private registries.
- Custom validation rules for input variables: A new validation block type inside variable blocks allows module authors to define validation rules at the public interface into a module, so that errors in the calling configuration can be reported in the caller's context rather than inside the implementation details of the module.
- New Kubernetes remote state storage backend: This backend stores state snapshots as Kubernetes secrets.
- Breaking Changes
- As part of introducing a new heirarchical namespace for providers, Terraform now requires an explicit source specification for any provider that is not in the "hashicorp" namespace in the main public registry. For more information, including information on the automatic upgrade process, refer to the v0.13 upgrade guide.
- terraform import: the previously-deprecated -provider option is now removed. To specify a non-default provider configuration for import, add the provider meta-argument to the target resource block.
- config: Inside provisioner blocks that have when = destroy set, and inside any connection blocks that are used by such provisioner blocks, it is no longer valid to refer to any objects other than self, count, or each. (This was previously deprecated in a v0.12 minor release.) If you are using null_resource to define provisioners not attached to a real resource, include any values your provisioners need in the triggers map and change the provisioner configuration to refer to those values via self.triggers.
- configs: At most one terraform required_providers block is permitted per module. If you previously had multiple required_providers blocks in the same module, consolidate their requirements together into a single block.
- backend/oss: The TableStore schema now requires a primary key named LockID of type String.
- backend/s3: The previously-deprecated lock_table, skip_get_ec2_platforms, and skip_requesting_account_id arguments are now removed.
- backend/s3: The credential source preference order now considers EC2 instance profile credentials as lower priority than shared configuration, web identity, and ECS role credentials.
- backend/s3: The AWS_METADATA_TIMEOUT environment variable is no longer used. The timeout is now fixed at one second with two retries.
For a complete list go to: https://github.com/hashicorp/terraform/blob/v0.13.5/CHANGELOG.md