diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 2537f2f..6f64b5a 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -15,8 +15,8 @@
# Cloud Posse must review any changes to standard context definition,
# but some changes can be rubber-stamped.
-**/*.tf @cloudposse/engineering @cloudposse/approvers
-README.yaml @cloudposse/engineering @cloudposse/approvers
+**/*.tf @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers
+README.yaml @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers
README.md @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers
docs/*.md @cloudposse/engineering @cloudposse/contributors @cloudposse/approvers
diff --git a/.github/auto-release.yml b/.github/auto-release.yml
index c78a4d8..39a7f1e 100644
--- a/.github/auto-release.yml
+++ b/.github/auto-release.yml
@@ -46,7 +46,7 @@ template: |
replacers:
# Remove irrelevant information from Renovate bot
-- search: '/---\s+^#.*Renovate configuration(?:.|\n)*?This PR has been generated .*/gm'
+- search: '/(?<=---\s+)+^#.*(Renovate configuration|Configuration)(?:.|\n)*?This PR has been generated .*/gm'
replace: ''
# Remove Renovate bot banner image
- search: '/\[!\[[^\]]*Renovate\][^\]]*\](\([^)]*\))?\s*\n+/gm'
diff --git a/.github/workflows/auto-format.yml b/.github/workflows/auto-format.yml
index 9e9379d..375d0fd 100644
--- a/.github/workflows/auto-format.yml
+++ b/.github/workflows/auto-format.yml
@@ -29,6 +29,8 @@ jobs:
- name: Auto Format
if: github.event.pull_request.state == 'open'
shell: bash
+ env:
+ GITHUB_TOKEN: "${{ secrets.PUBLIC_REPO_ACCESS_TOKEN }}"
run: make BUILD_HARNESS_PATH=/build-harness PACKAGES_PREFER_HOST=true -f /build-harness/templates/Makefile.build-harness pr/auto-format/host
# Commit changes (if any) to the PR branch
diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml
index 3f48017..1d06d9b 100644
--- a/.github/workflows/auto-release.yml
+++ b/.github/workflows/auto-release.yml
@@ -3,17 +3,25 @@ name: auto-release
on:
push:
branches:
- - master
+ - main
+ - master
+ - production
jobs:
publish:
runs-on: ubuntu-latest
steps:
- # Drafts your next Release notes as Pull Requests are merged into "master"
- - uses: release-drafter/release-drafter@v5
- with:
- publish: true
- prerelease: false
- config-name: auto-release.yml
- env:
- GITHUB_TOKEN: ${{ secrets.PUBLIC_REPO_ACCESS_TOKEN }}
+ # Get PR from merged commit to master
+ - uses: actions-ecosystem/action-get-merged-pull-request@v1
+ id: get-merged-pull-request
+ with:
+ github_token: ${{ secrets.PUBLIC_REPO_ACCESS_TOKEN }}
+ # Drafts your next Release notes as Pull Requests are merged into "main"
+ - uses: release-drafter/release-drafter@v5
+ if: "!contains(steps.get-merged-pull-request.outputs.labels, 'no-release')"
+ with:
+ publish: true
+ prerelease: false
+ config-name: auto-release.yml
+ env:
+ GITHUB_TOKEN: ${{ secrets.PUBLIC_REPO_ACCESS_TOKEN }}
diff --git a/.github/workflows/validate-codeowners.yml b/.github/workflows/validate-codeowners.yml
index 386eb28..c5193b6 100644
--- a/.github/workflows/validate-codeowners.yml
+++ b/.github/workflows/validate-codeowners.yml
@@ -1,5 +1,7 @@
name: Validate Codeowners
on:
+ workflow_dispatch:
+
pull_request:
jobs:
diff --git a/README.md b/README.md
index 14e7671..d5e4a4f 100644
--- a/README.md
+++ b/README.md
@@ -94,6 +94,24 @@ The table below correctly indicates which inputs are required.
+Note: Terraform requires that all the elements of the `rules` list be exactly
+the same type. This means you must supply all the same keys and, for each key,
+all the values for that key must be the same type. Any optional key, such as
+`ipv6_cidr_blocks`, can be omitted from all the rules without problem. However,
+if some rules have a key and other rules would omit the key if that were allowed
+(e.g one rule has `cidr_blocks` and another rule has `self = true`, and neither
+rule can include both `cidr_blocks` and `self`), instead of omitting the key,
+include the key with value of `null`, unless the value is a list type, in which case
+set the value to `[]` (an empty list).
+
+Although `description` is optional, if you do not include a description,
+the rule will be deleted and recreated if the index of the rule in the `rules`
+list changes, which usually happens as a result of adding or removing a rule. Rules
+that include a description will only be modified if the rule itself changes.
+Also, if 2 rules specify the same `type`, `protocol`, `from_port`, and `to_port`,
+they must not also have the same `description` (although if one or both rules
+have no description supplied, that will work).
+
```hcl
module "label" {
source = "cloudposse/label/null"
@@ -124,6 +142,7 @@ module "sg" {
source = "cloudposse/security-group/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
+
rules = [
{
type = "ingress"
@@ -131,13 +150,27 @@ module "sg" {
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
+ self = null
+ description = "Allow SSH from anywhere"
+ },
+ {
+ type = "ingress"
+ from_port = 80
+ to_port = 80
+ protocol = "tcp"
+ cidr_blocks = []
+ self = true
+ description = "Allow HTTP from inside the security group"
},
+
{
type = "egress"
from_port = 0
to_port = 65535
protocol = "all"
cidr_blocks = ["0.0.0.0/0"]
+ self = null
+ description = "Allow egress to anywhere"
}
]
@@ -151,7 +184,7 @@ module "sg" {
## Examples
Here is an example of using this module:
-- [`examples/complete`](https://github.com/cloudposse/terraform-aws-security-group/) - complete example of using this module
+- [`examples/complete`](https://github.com/cloudposse/terraform-aws-security-group/examples/complete) - complete example of using this module
@@ -172,7 +205,7 @@ Available targets:
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 0.14.0 |
+| [terraform](#requirement\_terraform) | >= 0.13.0 |
| [aws](#requirement\_aws) | >= 2.0 |
## Providers
@@ -239,6 +272,7 @@ Like this project? Please give it a ★ on [our GitHub](https://github.com/cloud
Are you using this project or any of our other projects? Consider [leaving a testimonial][testimonial]. =)
+
## Related Projects
Check out these related projects.
@@ -246,8 +280,6 @@ Check out these related projects.
- [terraform-null-label](https://github.com/cloudposse/terraform-null-label) - Terraform module designed to generate consistent names and tags for resources. Use terraform-null-label to implement a strict naming convention.
-
-
## References
For additional context, refer to some of these links.
diff --git a/README.yaml b/README.yaml
index adc3486..c97f2ae 100644
--- a/README.yaml
+++ b/README.yaml
@@ -61,6 +61,24 @@ description: |-
# How to use this module. Should be an easy example to copy and paste.
usage: |-
+ Note: Terraform requires that all the elements of the `rules` list be exactly
+ the same type. This means you must supply all the same keys and, for each key,
+ all the values for that key must be the same type. Any optional key, such as
+ `ipv6_cidr_blocks`, can be omitted from all the rules without problem. However,
+ if some rules have a key and other rules would omit the key if that were allowed
+ (e.g one rule has `cidr_blocks` and another rule has `self = true`, and neither
+ rule can include both `cidr_blocks` and `self`), instead of omitting the key,
+ include the key with value of `null`, unless the value is a list type, in which case
+ set the value to `[]` (an empty list).
+
+ Although `description` is optional, if you do not include a description,
+ the rule will be deleted and recreated if the index of the rule in the `rules`
+ list changes, which usually happens as a result of adding or removing a rule. Rules
+ that include a description will only be modified if the rule itself changes.
+ Also, if 2 rules specify the same `type`, `protocol`, `from_port`, and `to_port`,
+ they must not also have the same `description` (although if one or both rules
+ have no description supplied, that will work).
+
```hcl
module "label" {
source = "cloudposse/label/null"
@@ -91,6 +109,7 @@ usage: |-
source = "cloudposse/security-group/aws"
# Cloud Posse recommends pinning every module to a specific version
# version = "x.x.x"
+
rules = [
{
type = "ingress"
@@ -98,13 +117,27 @@ usage: |-
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
+ self = null
+ description = "Allow SSH from anywhere"
},
+ {
+ type = "ingress"
+ from_port = 80
+ to_port = 80
+ protocol = "tcp"
+ cidr_blocks = []
+ self = true
+ description = "Allow HTTP from inside the security group"
+ },
+
{
type = "egress"
from_port = 0
to_port = 65535
protocol = "all"
cidr_blocks = ["0.0.0.0/0"]
+ self = null
+ description = "Allow egress to anywhere"
}
]
@@ -115,7 +148,7 @@ usage: |-
# Example usage
examples: |-
Here is an example of using this module:
- - [`examples/complete`](https://github.com/cloudposse/terraform-aws-security-group/) - complete example of using this module
+ - [`examples/complete`](https://github.com/cloudposse/terraform-aws-security-group/examples/complete) - complete example of using this module
# How to get started quickly
#quickstart: |-
@@ -131,4 +164,4 @@ contributors:
- name: "Erik Osterman"
github: "osterman"
- name: "Vladimir"
- github: "SweetOps"
\ No newline at end of file
+ github: "SweetOps"
diff --git a/docs/terraform.md b/docs/terraform.md
index 030229e..0faa366 100644
--- a/docs/terraform.md
+++ b/docs/terraform.md
@@ -3,7 +3,7 @@
| Name | Version |
|------|---------|
-| [terraform](#requirement\_terraform) | >= 0.14.0 |
+| [terraform](#requirement\_terraform) | >= 0.13.0 |
| [aws](#requirement\_aws) | >= 2.0 |
## Providers
diff --git a/examples/complete/main.tf b/examples/complete/main.tf
index 7181fea..90aa4b7 100644
--- a/examples/complete/main.tf
+++ b/examples/complete/main.tf
@@ -24,8 +24,21 @@ module "new_security_group" {
to_port = 22
protocol = "tcp"
cidr_blocks = []
+ ipv6_cidr_blocks = null
source_security_group_id = aws_security_group.external.id
- description = "Allow SSH access form the external SG"
+ description = "Allow SSH access from the external SG"
+ self = false
+ },
+ {
+ type = "ingress"
+ from_port = 22
+ to_port = 22
+ protocol = "tcp"
+ cidr_blocks = []
+ ipv6_cidr_blocks = null
+ source_security_group_id = null
+ description = "Allow SSH access from our own SG"
+ self = true
},
{
type = "ingress"
@@ -33,8 +46,10 @@ module "new_security_group" {
to_port = 443
protocol = "all"
cidr_blocks = ["0.0.0.0/0"]
+ ipv6_cidr_blocks = null
source_security_group_id = null
description = null
+ self = null
},
{
type = "egress"
@@ -42,8 +57,10 @@ module "new_security_group" {
to_port = 65535
protocol = "all"
cidr_blocks = ["0.0.0.0/0"]
+ ipv6_cidr_blocks = null
source_security_group_id = null
description = "Allow all outbound traffic"
+ self = null
}
]
diff --git a/examples/complete/versions.tf b/examples/complete/versions.tf
index 678142c..5b2c49b 100644
--- a/examples/complete/versions.tf
+++ b/examples/complete/versions.tf
@@ -1,5 +1,5 @@
terraform {
- required_version = ">= 0.14.0"
+ required_version = ">= 0.13.0"
required_providers {
aws = {
diff --git a/main.tf b/main.tf
index b47a254..30d9a02 100644
--- a/main.tf
+++ b/main.tf
@@ -8,70 +8,13 @@ locals {
name = local.is_external ? join("", data.aws_security_group.external.*.name) : join("", aws_security_group.default.*.name)
rules = module.this.enabled && var.rules != null ? {
for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
+ format("%v-%v-%v-%v-%s",
rule.type,
rule.protocol,
rule.from_port,
rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => {
- type = rule.type
- protocol = rule.protocol
- from_port = rule.from_port
- to_port = rule.to_port
- description = try(rule.description, format("Managed by Terraform #%d", indx))
- }
- } : {}
- source_security_group_id = module.this.enabled && var.rules != null ? {
- for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
- rule.type,
- rule.protocol,
- rule.from_port,
- rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => try(rule.source_security_group_id, null)
- } : {}
-
- cidr_blocks = module.this.enabled && var.rules != null ? {
- for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
- rule.type,
- rule.protocol,
- rule.from_port,
- rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => try(rule.cidr_blocks, null) != null ? (length(rule.cidr_blocks) > 0 ? rule.cidr_blocks : null) : null
- } : {}
- ipv6_cidr_blocks = module.this.enabled && var.rules != null ? {
- for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
- rule.type,
- rule.protocol,
- rule.from_port,
- rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => try(rule.ipv6_cidr_blocks, null) != null ? (length(rule.ipv6_cidr_blocks) > 0 ? rule.ipv6_cidr_blocks : null) : null
- } : {}
- prefix_list_ids = module.this.enabled && var.rules != null ? {
- for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
- rule.type,
- rule.protocol,
- rule.from_port,
- rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => try(rule.prefix_list_ids, null) != null ? (length(rule.prefix_list_ids) > 0 ? rule.prefix_list_ids : null) : null
- } : {}
- self = module.this.enabled && var.rules != null ? {
- for indx, rule in flatten(var.rules) :
- format("%s-%s-%s-%s-%s",
- rule.type,
- rule.protocol,
- rule.from_port,
- rule.to_port,
- lookup(rule, "description", null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
- ) => try(rule.self, null)
+ try(rule["description"], null) == null ? md5(format("Managed by Terraform #%d", indx)) : md5(rule.description)
+ ) => rule
} : {}
}
@@ -98,15 +41,17 @@ resource "aws_security_group" "default" {
resource "aws_security_group_rule" "default" {
for_each = local.rules
- security_group_id = local.id
- type = each.value.type
- from_port = each.value.from_port
- to_port = each.value.to_port
- protocol = each.value.protocol
- description = each.value.description
- cidr_blocks = lookup(local.cidr_blocks, each.key, null)
- ipv6_cidr_blocks = lookup(local.ipv6_cidr_blocks, each.key, null)
- prefix_list_ids = lookup(local.prefix_list_ids, each.key, null)
- source_security_group_id = lookup(local.source_security_group_id, each.key, null)
- self = lookup(local.self, each.key, null)
+ security_group_id = local.id
+ type = each.value.type
+ from_port = each.value.from_port
+ to_port = each.value.to_port
+ protocol = each.value.protocol
+ description = lookup(each.value, "description", "Managed by Terraform")
+ # Convert any of a missing key, a value of null, or a value of empty list to null
+ cidr_blocks = try(length(lookup(each.value, "cidr_blocks", [])), 0) > 0 ? each.value["cidr_blocks"] : null
+ ipv6_cidr_blocks = try(length(lookup(each.value, "ipv6_cidr_blocks", [])), 0) > 0 ? each.value["ipv6_cidr_blocks"] : null
+ prefix_list_ids = try(length(lookup(each.value, "prefix_list_ids", [])), 0) > 0 ? each.value["prefix_list_ids"] : null
+ self = coalesce(lookup(each.value, "self", null), false) ? true : null
+
+ source_security_group_id = lookup(each.value, "source_security_group_id", null)
}
diff --git a/test/src/examples_complete_test.go b/test/src/examples_complete_test.go
index b70ece2..b92023d 100644
--- a/test/src/examples_complete_test.go
+++ b/test/src/examples_complete_test.go
@@ -12,7 +12,8 @@ import (
// Test the Terraform module in examples/complete using Terratest.
func TestExamplesComplete(t *testing.T) {
- t.Parallel()
+ // Cannot run in parallel with InitAndApply (parallel inits clobber each other) or default statefile name
+ //t.Parallel()
rand.Seed(time.Now().UnixNano())
randID := strconv.Itoa(rand.Intn(100000))
diff --git a/test/src/go.sum b/test/src/go.sum
index 5026177..2947f4b 100644
--- a/test/src/go.sum
+++ b/test/src/go.sum
@@ -58,11 +58,14 @@ github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8=
github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM=
+github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0=
github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk=
+github.com/apparentlymart/go-textseg/v12 v12.0.0 h1:bNEQyAGak9tojivJNkoqWErVCQbjdL7GzRt3F8NvfJ0=
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
@@ -212,18 +215,23 @@ github.com/gruntwork-io/terratest v0.28.15 h1:in1DRBq8/RjxMyb6Amr1SRrczOK/hGnPi+
github.com/gruntwork-io/terratest v0.28.15/go.mod h1:PkVylPuUNmItkfOTwSiFreYA4FkanK8AluBuNeGxQOw=
github.com/gruntwork-io/terratest v0.32.8 h1:ccIRFH+e6zhSB5difg7baJec4FeOZNXpeIFlZZlKW2M=
github.com/gruntwork-io/terratest v0.32.8/go.mod h1:FckR+7ks472IJfSKUPfPvnJfSxV1LKGWGMJ9m/LHegE=
+github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hashicorp/hcl/v2 v2.8.2 h1:wmFle3D1vu0okesm8BTLVDyJ6/OL9DCLUwn0b2OptiY=
github.com/hashicorp/hcl/v2 v2.8.2/go.mod h1:bQTN5mpo+jewjJgh8jr0JUguIi7qPHUF6yIfAEN3jqY=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o=
github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
@@ -267,6 +275,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7 h1:DpOJ2HYzCv8LZP15IdmG+YdwD2luVPHITV96TkirNBM=
github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -357,6 +366,7 @@ github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6Ac
github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/zclconf/go-cty v1.2.0 h1:sPHsy7ADcIZQP3vILvTjrh74ZA175TFP5vqiNK1UmlI=
github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
@@ -476,6 +486,7 @@ golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fq
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
diff --git a/versions.tf b/versions.tf
index 678142c..5b2c49b 100644
--- a/versions.tf
+++ b/versions.tf
@@ -1,5 +1,5 @@
terraform {
- required_version = ">= 0.14.0"
+ required_version = ">= 0.13.0"
required_providers {
aws = {