Skip to content

Commit 403ca24

Browse files
rysi3kTomasz Rychlewiczantonbabenko
authored
feat!: Added support for origin_access_control_id, bumped AWS provider version (#79)
Co-authored-by: Tomasz Rychlewicz <[email protected]> Co-authored-by: Anton Babenko <[email protected]>
1 parent d296b7c commit 403ca24

13 files changed

+199
-27
lines changed

.github/workflows/pre-commit.yml

+5-3
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ jobs:
4343
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
4444
# Run only validate pre-commit check on min version supported
4545
if: ${{ matrix.directory != '.' }}
46-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.3.0
46+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
4747
with:
4848
terraform-version: ${{ steps.minMax.outputs.minVersion }}
4949
args: 'terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*'
5050

5151
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
5252
# Run only validate pre-commit check on min version supported
5353
if: ${{ matrix.directory == '.' }}
54-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.3.0
54+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
5555
with:
5656
terraform-version: ${{ steps.minMax.outputs.minVersion }}
5757
args: 'terraform_validate --color=always --show-diff-on-failure --files $(ls *.tf)'
@@ -72,7 +72,9 @@ jobs:
7272
uses: clowdhaus/[email protected]
7373

7474
- name: Pre-commit Terraform ${{ steps.minMax.outputs.maxVersion }}
75-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.3.0
75+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0
7676
with:
7777
terraform-version: ${{ steps.minMax.outputs.maxVersion }}
7878
terraform-docs-version: ${{ env.TERRAFORM_DOCS_VERSION }}
79+
install-hcledit: true
80+
hcledit-version: 0.2.6

.pre-commit-config.yaml

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.62.3
3+
rev: v1.75.0
44
hooks:
55
- id: terraform_fmt
6+
- id: terraform_wrapper_module_for_each
67
- id: terraform_validate
78
- id: terraform_docs
89
args:
@@ -23,7 +24,7 @@ repos:
2324
- '--args=--only=terraform_standard_module_structure'
2425
- '--args=--only=terraform_workspace_remote'
2526
- repo: https://github.com/pre-commit/pre-commit-hooks
26-
rev: v4.1.0
27+
rev: v4.3.0
2728
hooks:
2829
- id: check-merge-conflict
2930
- id: end-of-file-fixer

README.md

+9-3
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ module "cdn" {
8787
| Name | Version |
8888
|------|---------|
8989
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 |
90-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.64 |
90+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.29 |
9191

9292
## Providers
9393

9494
| Name | Version |
9595
|------|---------|
96-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.64 |
96+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.29 |
9797

9898
## Modules
9999

@@ -159,7 +159,13 @@ No modules.
159159

160160
## Authors
161161

162-
Module is maintained by [Anton Babenko](https://github.com/antonbabenko) with help from [these awesome contributors](https://github.com/terraform-aws-modules/terraform-aws-cloudfront/graphs/contributors).
162+
Module is maintained by [Anton Babenko](https://github.com/antonbabenko) with help from these awesome contributors:
163+
164+
<!-- markdownlint-disable no-inline-html -->
165+
<a href="https://github.com/terraform-aws-modules/terraform-aws-cloudfront/graphs/contributors">
166+
<img src="https://contrib.rocks/image?repo=terraform-aws-modules/terraform-aws-cloudfront" />
167+
</a>
168+
<!-- markdownlint-enable no-inline-html -->
163169

164170
## License
165171

examples/complete/README.md

+9-7
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,30 @@ Note that this example may create resources which cost money. Run `terraform des
2727
| Name | Version |
2828
|------|---------|
2929
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13.1 |
30-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.64 |
30+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.29 |
31+
| <a name="requirement_external"></a> [external](#requirement\_external) | >= 1.0 |
32+
| <a name="requirement_local"></a> [local](#requirement\_local) | >= 1.0 |
3133
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 2.0 |
3234
| <a name="requirement_random"></a> [random](#requirement\_random) | >= 2.0 |
3335

3436
## Providers
3537

3638
| Name | Version |
3739
|------|---------|
38-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 3.64 |
40+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.29 |
3941
| <a name="provider_null"></a> [null](#provider\_null) | >= 2.0 |
4042
| <a name="provider_random"></a> [random](#provider\_random) | >= 2.0 |
4143

4244
## Modules
4345

4446
| Name | Source | Version |
4547
|------|--------|---------|
46-
| <a name="module_acm"></a> [acm](#module\_acm) | terraform-aws-modules/acm/aws | ~> 3.0 |
48+
| <a name="module_acm"></a> [acm](#module\_acm) | terraform-aws-modules/acm/aws | ~> 4.0 |
4749
| <a name="module_cloudfront"></a> [cloudfront](#module\_cloudfront) | ../../ | n/a |
48-
| <a name="module_lambda_function"></a> [lambda\_function](#module\_lambda\_function) | terraform-aws-modules/lambda/aws | ~> 2.0 |
49-
| <a name="module_log_bucket"></a> [log\_bucket](#module\_log\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 2.0 |
50-
| <a name="module_records"></a> [records](#module\_records) | terraform-aws-modules/route53/aws//modules/records | 2.0.0 |
51-
| <a name="module_s3_one"></a> [s3\_one](#module\_s3\_one) | terraform-aws-modules/s3-bucket/aws | ~> 2.0 |
50+
| <a name="module_lambda_function"></a> [lambda\_function](#module\_lambda\_function) | terraform-aws-modules/lambda/aws | ~> 4.0 |
51+
| <a name="module_log_bucket"></a> [log\_bucket](#module\_log\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |
52+
| <a name="module_records"></a> [records](#module\_records) | terraform-aws-modules/route53/aws//modules/records | ~> 2.0 |
53+
| <a name="module_s3_one"></a> [s3\_one](#module\_s3\_one) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |
5254

5355
## Resources
5456

examples/complete/main.tf

+5-5
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ data "aws_route53_zone" "this" {
157157

158158
module "acm" {
159159
source = "terraform-aws-modules/acm/aws"
160-
version = "~> 3.0"
160+
version = "~> 4.0"
161161

162162
domain_name = local.domain_name
163163
zone_id = data.aws_route53_zone.this.id
@@ -172,15 +172,15 @@ data "aws_canonical_user_id" "current" {}
172172

173173
module "s3_one" {
174174
source = "terraform-aws-modules/s3-bucket/aws"
175-
version = "~> 2.0"
175+
version = "~> 3.0"
176176

177177
bucket = "s3-one-${random_pet.this.id}"
178178
force_destroy = true
179179
}
180180

181181
module "log_bucket" {
182182
source = "terraform-aws-modules/s3-bucket/aws"
183-
version = "~> 2.0"
183+
version = "~> 3.0"
184184

185185
bucket = "logs-${random_pet.this.id}"
186186
acl = null
@@ -219,7 +219,7 @@ resource "null_resource" "download_package" {
219219

220220
module "lambda_function" {
221221
source = "terraform-aws-modules/lambda/aws"
222-
version = "~> 2.0"
222+
version = "~> 4.0"
223223

224224
function_name = "${random_pet.this.id}-lambda"
225225
description = "My awesome lambda function"
@@ -248,7 +248,7 @@ module "lambda_function" {
248248

249249
module "records" {
250250
source = "terraform-aws-modules/route53/aws//modules/records"
251-
version = "2.0.0" # @todo: revert to "~> 2.0" once 2.1.0 is fixed properly
251+
version = "~> 2.0"
252252

253253
zone_id = data.aws_route53_zone.this.zone_id
254254

examples/complete/versions.tf

+9-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 3.64"
7+
version = ">= 4.29"
88
}
99
random = {
1010
source = "hashicorp/random"
@@ -14,5 +14,13 @@ terraform {
1414
source = "hashicorp/null"
1515
version = ">= 2.0"
1616
}
17+
external = {
18+
source = "hashicorp/external"
19+
version = ">= 1.0"
20+
}
21+
local = {
22+
source = "hashicorp/local"
23+
version = ">= 1.0"
24+
}
1725
}
1826
}

main.tf

+6-5
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ resource "aws_cloudfront_distribution" "this" {
4141
for_each = var.origin
4242

4343
content {
44-
domain_name = origin.value.domain_name
45-
origin_id = lookup(origin.value, "origin_id", origin.key)
46-
origin_path = lookup(origin.value, "origin_path", "")
47-
connection_attempts = lookup(origin.value, "connection_attempts", null)
48-
connection_timeout = lookup(origin.value, "connection_timeout", null)
44+
domain_name = origin.value.domain_name
45+
origin_id = lookup(origin.value, "origin_id", origin.key)
46+
origin_path = lookup(origin.value, "origin_path", "")
47+
connection_attempts = lookup(origin.value, "connection_attempts", null)
48+
connection_timeout = lookup(origin.value, "connection_timeout", null)
49+
origin_access_control_id = lookup(origin.value, "origin_access_control_id", null)
4950

5051
dynamic "s3_origin_config" {
5152
for_each = length(keys(lookup(origin.value, "s3_origin_config", {}))) == 0 ? [] : [lookup(origin.value, "s3_origin_config", {})]

versions.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 3.64"
7+
version = ">= 4.29"
88
}
99
}
1010
}

wrappers/README.md

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# Wrapper for the root module
2+
3+
The configuration in this directory contains an implementation of a single module wrapper pattern, which allows managing several copies of a module in places where using the native Terraform 0.13+ `for_each` feature is not feasible (e.g., with Terragrunt).
4+
5+
You may want to use a single Terragrunt configuration file to manage multiple resources without duplicating `terragrunt.hcl` files for each copy of the same module.
6+
7+
This wrapper does not implement any extra functionality.
8+
9+
## Usage with Terragrunt
10+
11+
`terragrunt.hcl`:
12+
13+
```hcl
14+
terraform {
15+
source = "tfr:///terraform-aws-modules/cloudfront/aws//wrappers"
16+
# Alternative source:
17+
# source = "git::[email protected]:terraform-aws-modules/terraform-aws-cloudfront.git//wrappers?ref=master"
18+
}
19+
20+
inputs = {
21+
defaults = { # Default values
22+
create = true
23+
tags = {
24+
Terraform = "true"
25+
Environment = "dev"
26+
}
27+
}
28+
29+
items = {
30+
my-item = {
31+
# omitted... can be any argument supported by the module
32+
}
33+
my-second-item = {
34+
# omitted... can be any argument supported by the module
35+
}
36+
# omitted...
37+
}
38+
}
39+
```
40+
41+
## Usage with Terraform
42+
43+
```hcl
44+
module "wrapper" {
45+
source = "terraform-aws-modules/cloudfront/aws//wrappers"
46+
47+
defaults = { # Default values
48+
create = true
49+
tags = {
50+
Terraform = "true"
51+
Environment = "dev"
52+
}
53+
}
54+
55+
items = {
56+
my-item = {
57+
# omitted... can be any argument supported by the module
58+
}
59+
my-second-item = {
60+
# omitted... can be any argument supported by the module
61+
}
62+
# omitted...
63+
}
64+
}
65+
```
66+
67+
## Example: Manage multiple S3 buckets in one Terragrunt layer
68+
69+
`eu-west-1/s3-buckets/terragrunt.hcl`:
70+
71+
```hcl
72+
terraform {
73+
source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers"
74+
# Alternative source:
75+
# source = "git::[email protected]:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers?ref=master"
76+
}
77+
78+
inputs = {
79+
defaults = {
80+
force_destroy = true
81+
82+
attach_elb_log_delivery_policy = true
83+
attach_lb_log_delivery_policy = true
84+
attach_deny_insecure_transport_policy = true
85+
attach_require_latest_tls_policy = true
86+
}
87+
88+
items = {
89+
bucket1 = {
90+
bucket = "my-random-bucket-1"
91+
}
92+
bucket2 = {
93+
bucket = "my-random-bucket-2"
94+
tags = {
95+
Secure = "probably"
96+
}
97+
}
98+
}
99+
}
100+
```

wrappers/main.tf

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module "wrapper" {
2+
source = "../"
3+
4+
for_each = var.items
5+
6+
create_distribution = try(each.value.create_distribution, var.defaults.create_distribution, true)
7+
create_origin_access_identity = try(each.value.create_origin_access_identity, var.defaults.create_origin_access_identity, false)
8+
origin_access_identities = try(each.value.origin_access_identities, var.defaults.origin_access_identities, {})
9+
aliases = try(each.value.aliases, var.defaults.aliases, null)
10+
comment = try(each.value.comment, var.defaults.comment, null)
11+
default_root_object = try(each.value.default_root_object, var.defaults.default_root_object, null)
12+
enabled = try(each.value.enabled, var.defaults.enabled, true)
13+
http_version = try(each.value.http_version, var.defaults.http_version, "http2")
14+
is_ipv6_enabled = try(each.value.is_ipv6_enabled, var.defaults.is_ipv6_enabled, null)
15+
price_class = try(each.value.price_class, var.defaults.price_class, null)
16+
retain_on_delete = try(each.value.retain_on_delete, var.defaults.retain_on_delete, false)
17+
wait_for_deployment = try(each.value.wait_for_deployment, var.defaults.wait_for_deployment, true)
18+
web_acl_id = try(each.value.web_acl_id, var.defaults.web_acl_id, null)
19+
tags = try(each.value.tags, var.defaults.tags, null)
20+
origin = try(each.value.origin, var.defaults.origin, null)
21+
origin_group = try(each.value.origin_group, var.defaults.origin_group, {})
22+
viewer_certificate = try(each.value.viewer_certificate, var.defaults.viewer_certificate, {
23+
cloudfront_default_certificate = true
24+
minimum_protocol_version = "TLSv1"
25+
})
26+
geo_restriction = try(each.value.geo_restriction, var.defaults.geo_restriction, {})
27+
logging_config = try(each.value.logging_config, var.defaults.logging_config, {})
28+
custom_error_response = try(each.value.custom_error_response, var.defaults.custom_error_response, {})
29+
default_cache_behavior = try(each.value.default_cache_behavior, var.defaults.default_cache_behavior, null)
30+
ordered_cache_behavior = try(each.value.ordered_cache_behavior, var.defaults.ordered_cache_behavior, [])
31+
create_monitoring_subscription = try(each.value.create_monitoring_subscription, var.defaults.create_monitoring_subscription, false)
32+
realtime_metrics_subscription_status = try(each.value.realtime_metrics_subscription_status, var.defaults.realtime_metrics_subscription_status, "Enabled")
33+
}

wrappers/outputs.tf

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
output "wrapper" {
2+
description = "Map of outputs of a wrapper."
3+
value = module.wrapper
4+
# sensitive = false # No sensitive module output found
5+
}

wrappers/variables.tf

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
variable "defaults" {
2+
description = "Map of default values which will be used for each item."
3+
type = any
4+
default = {}
5+
}
6+
7+
variable "items" {
8+
description = "Maps of items to create a wrapper from. Values are passed through to the module."
9+
type = any
10+
default = {}
11+
}

wrappers/versions.tf

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 0.13.1"
3+
}

0 commit comments

Comments
 (0)