Skip to content

Commit 943debc

Browse files
authored
feat: Added wrappers for all modules (#40)
1 parent 2ba7f1f commit 943debc

File tree

32 files changed

+637
-0
lines changed

32 files changed

+637
-0
lines changed

examples/log-group-with-log-stream/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ No providers.
3131
| Name | Source | Version |
3232
|------|--------|---------|
3333
| <a name="module_log_group"></a> [log\_group](#module\_log\_group) | ../../modules/log-group | n/a |
34+
| <a name="module_log_group_wrapped"></a> [log\_group\_wrapped](#module\_log\_group\_wrapped) | ../../wrappers/log-group | n/a |
3435
| <a name="module_log_stream"></a> [log\_stream](#module\_log\_stream) | ../../modules/log-stream | n/a |
36+
| <a name="module_log_stream_wrapped"></a> [log\_stream\_wrapped](#module\_log\_stream\_wrapped) | ../../wrappers/log-stream | n/a |
3537

3638
## Resources
3739

examples/log-group-with-log-stream/main.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,39 @@ module "log_stream" {
1515
name = "my-log-stream"
1616
log_group_name = module.log_group.cloudwatch_log_group_name
1717
}
18+
19+
# Wrappers (e.g. useful when using with Terragrunt)
20+
module "log_group_wrapped" {
21+
source = "../../wrappers/log-group"
22+
23+
items = {
24+
"one" = {
25+
name_prefix = "my-log-group-wrapper1-"
26+
retention_in_days = 7
27+
}
28+
"two" = {
29+
name_prefix = "my-log-group-wrapper2-"
30+
retention_in_days = 14
31+
}
32+
}
33+
34+
}
35+
36+
module "log_stream_wrapped" {
37+
source = "../../wrappers/log-stream"
38+
39+
items = {
40+
"one1" = {
41+
name = "my-log-stream1-1"
42+
log_group_name = module.log_group_wrapped.wrapper["one"].cloudwatch_log_group_name
43+
}
44+
"one2" = {
45+
name = "my-log-stream1-2"
46+
log_group_name = module.log_group_wrapped.wrapper["one"].cloudwatch_log_group_name
47+
}
48+
"two" = {
49+
name = "my-log-stream2"
50+
log_group_name = module.log_group_wrapped.wrapper["two"].cloudwatch_log_group_name
51+
}
52+
}
53+
}

wrappers/cis-alarms/README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Wrapper for module: `modules/cis-alarms`
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 = "git::git@github.com:terraform-aws-modules/terraform-aws-cloudwatch.git?ref=master//wrappers/cis-alarms"
16+
}
17+
18+
inputs = {
19+
items = {
20+
my-item = {
21+
# omitted... can be any argument supported by the module
22+
}
23+
my-second-item = {
24+
# omitted... can be any argument supported by the module
25+
}
26+
# omitted...
27+
}
28+
}
29+
```
30+
31+
## Usage with Terraform
32+
33+
```hcl
34+
module "wrapper" {
35+
source = "terraform-aws-modules/cloudwatch/aws//wrappers/cis-alarms"
36+
37+
items = {
38+
my-item = {
39+
# omitted... can be any argument supported by the module
40+
}
41+
my-second-item = {
42+
# omitted... can be any argument supported by the module
43+
}
44+
# omitted...
45+
}
46+
}
47+
```
48+
49+
## Example: Manage multiple S3 buckets in one Terragrunt layer
50+
51+
`eu-west-1/s3-buckets/terragrunt.hcl`:
52+
53+
```hcl
54+
terraform {
55+
source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git?ref=master//wrappers"
56+
}
57+
58+
inputs = {
59+
items = {
60+
bucket1 = {
61+
bucket = "my-random-bucket-1"
62+
force_destroy = true
63+
}
64+
bucket2 = {
65+
bucket = "my-random-bucket-2"
66+
force_destroy = true
67+
}
68+
}
69+
}
70+
```

wrappers/cis-alarms/main.tf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module "wrapper" {
2+
source = "../../modules/cis-alarms"
3+
4+
for_each = var.items
5+
6+
create = try(each.value.create, true)
7+
use_random_name_prefix = try(each.value.use_random_name_prefix, false)
8+
name_prefix = try(each.value.name_prefix, "")
9+
disabled_controls = try(each.value.disabled_controls, [])
10+
namespace = try(each.value.namespace, "CISBenchmark")
11+
log_group_name = try(each.value.log_group_name, "")
12+
alarm_actions = try(each.value.alarm_actions, [])
13+
actions_enabled = try(each.value.actions_enabled, true)
14+
tags = try(each.value.tags, {})
15+
}

wrappers/cis-alarms/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "wrapper" {
2+
description = "Map of outputs of a wrapper."
3+
value = module.wrapper
4+
}

wrappers/cis-alarms/variables.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
variable "items" {
2+
description = "Maps of items to create a wrapper from. Values are passed through to the module."
3+
type = any
4+
default = {}
5+
}

wrappers/cis-alarms/versions.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 0.13.1"
3+
}

wrappers/log-group/README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Wrapper for module: `modules/log-group`
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 = "git::git@github.com:terraform-aws-modules/terraform-aws-cloudwatch.git?ref=master//wrappers/log-group"
16+
}
17+
18+
inputs = {
19+
items = {
20+
my-item = {
21+
# omitted... can be any argument supported by the module
22+
}
23+
my-second-item = {
24+
# omitted... can be any argument supported by the module
25+
}
26+
# omitted...
27+
}
28+
}
29+
```
30+
31+
## Usage with Terraform
32+
33+
```hcl
34+
module "wrapper" {
35+
source = "terraform-aws-modules/cloudwatch/aws//wrappers/log-group"
36+
37+
items = {
38+
my-item = {
39+
# omitted... can be any argument supported by the module
40+
}
41+
my-second-item = {
42+
# omitted... can be any argument supported by the module
43+
}
44+
# omitted...
45+
}
46+
}
47+
```
48+
49+
## Example: Manage multiple S3 buckets in one Terragrunt layer
50+
51+
`eu-west-1/s3-buckets/terragrunt.hcl`:
52+
53+
```hcl
54+
terraform {
55+
source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git?ref=master//wrappers"
56+
}
57+
58+
inputs = {
59+
items = {
60+
bucket1 = {
61+
bucket = "my-random-bucket-1"
62+
force_destroy = true
63+
}
64+
bucket2 = {
65+
bucket = "my-random-bucket-2"
66+
force_destroy = true
67+
}
68+
}
69+
}
70+
```

wrappers/log-group/main.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module "wrapper" {
2+
source = "../../modules/log-group"
3+
4+
for_each = var.items
5+
6+
create = try(each.value.create, true)
7+
name = try(each.value.name, null)
8+
name_prefix = try(each.value.name_prefix, null)
9+
retention_in_days = try(each.value.retention_in_days, null)
10+
kms_key_id = try(each.value.kms_key_id, null)
11+
tags = try(each.value.tags, {})
12+
}

wrappers/log-group/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "wrapper" {
2+
description = "Map of outputs of a wrapper."
3+
value = module.wrapper
4+
}

0 commit comments

Comments
 (0)