Skip to content

Commit d3fb4e7

Browse files
Chris Dobbyncloudpossebot
andauthored
Add cidr block output per AZ (cloudposse#53)
* Add cidr block output per AZ * Auto Format * Update with output and add tests - Add the output `az_subnet_cidr_blocks` - Add tests to verify the output for the complete example * Auto Format Co-authored-by: cloudpossebot <11232728+cloudpossebot@users.noreply.github.com>
1 parent dac8804 commit d3fb4e7

6 files changed

Lines changed: 42 additions & 7 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ Available targets:
342342
| <a name="output_az_ngw_ids"></a> [az\_ngw\_ids](#output\_az\_ngw\_ids) | Map of AZ names to NAT Gateway IDs (only for public subnets) |
343343
| <a name="output_az_route_table_ids"></a> [az\_route\_table\_ids](#output\_az\_route\_table\_ids) | Map of AZ names to Route Table IDs |
344344
| <a name="output_az_subnet_arns"></a> [az\_subnet\_arns](#output\_az\_subnet\_arns) | Map of AZ names to subnet ARNs |
345+
| <a name="output_az_subnet_cidr_blocks"></a> [az\_subnet\_cidr\_blocks](#output\_az\_subnet\_cidr\_blocks) | Map of AZ names to subnet CIDR blocks |
345346
| <a name="output_az_subnet_ids"></a> [az\_subnet\_ids](#output\_az\_subnet\_ids) | Map of AZ names to subnet IDs |
346347
| <a name="output_az_subnet_map"></a> [az\_subnet\_map](#output\_az\_subnet\_map) | Map of AZ names to map of information about subnets |
347348
<!-- markdownlint-restore -->
@@ -355,6 +356,7 @@ Like this project? Please give it a ★ on [our GitHub](https://github.com/cloud
355356
Are you using this project or any of our other projects? Consider [leaving a testimonial][testimonial]. =)
356357

357358

359+
358360
## Related Projects
359361

360362
Check out these related projects.
@@ -364,8 +366,6 @@ Check out these related projects.
364366
- [terraform-aws-vpc](https://github.com/cloudposse/terraform-aws-vpc) - Terraform Module that defines a VPC with public/private subnets across multiple AZs with Internet Gateways
365367
- [terraform-aws-cloudwatch-flow-logs](https://github.com/cloudposse/terraform-aws-cloudwatch-flow-logs) - Terraform module for enabling flow logs for vpc and subnets.
366368

367-
368-
369369
## Help
370370

371371
**Got a question?** We got answers.

docs/terraform.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
| <a name="output_az_ngw_ids"></a> [az\_ngw\_ids](#output\_az\_ngw\_ids) | Map of AZ names to NAT Gateway IDs (only for public subnets) |
8181
| <a name="output_az_route_table_ids"></a> [az\_route\_table\_ids](#output\_az\_route\_table\_ids) | Map of AZ names to Route Table IDs |
8282
| <a name="output_az_subnet_arns"></a> [az\_subnet\_arns](#output\_az\_subnet\_arns) | Map of AZ names to subnet ARNs |
83+
| <a name="output_az_subnet_cidr_blocks"></a> [az\_subnet\_cidr\_blocks](#output\_az\_subnet\_cidr\_blocks) | Map of AZ names to subnet CIDR blocks |
8384
| <a name="output_az_subnet_ids"></a> [az\_subnet\_ids](#output\_az\_subnet\_ids) | Map of AZ names to subnet IDs |
8485
| <a name="output_az_subnet_map"></a> [az\_subnet\_map](#output\_az\_subnet\_map) | Map of AZ names to map of information about subnets |
8586
<!-- markdownlint-restore -->

examples/complete/outputs.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,10 @@ output "public_az_route_table_ids" {
3434
value = module.public_subnets.az_route_table_ids
3535
}
3636

37+
output "private_az_subnet_cidr_blocks" {
38+
value = module.private_subnets.az_subnet_cidr_blocks
39+
}
40+
41+
output "public_az_subnet_cidr_blocks" {
42+
value = module.public_subnets.az_subnet_cidr_blocks
43+
}

main.tf

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ locals {
66
availability_zones = local.enabled ? var.availability_zones : []
77

88
output_map = { for az in(local.enabled ? var.availability_zones : []) : az => {
9-
subnet_id = local.public_enabled ? aws_subnet.public[az].id : aws_subnet.private[az].id
10-
subnet_arn = local.public_enabled ? aws_subnet.public[az].arn : aws_subnet.private[az].arn
11-
route_table_id = local.public_enabled ? aws_route_table.public[az].id : aws_route_table.private[az].id
12-
ngw_id = local.public_enabled && var.nat_gateway_enabled ? aws_nat_gateway.public[az].id : null
9+
subnet_id = local.public_enabled ? aws_subnet.public[az].id : aws_subnet.private[az].id
10+
subnet_arn = local.public_enabled ? aws_subnet.public[az].arn : aws_subnet.private[az].arn
11+
subnet_cidr_block = local.public_enabled ? aws_subnet.public[az].cidr_block : aws_subnet.private[az].cidr_block
12+
route_table_id = local.public_enabled ? aws_route_table.public[az].id : aws_route_table.private[az].id
13+
ngw_id = local.public_enabled && var.nat_gateway_enabled ? aws_nat_gateway.public[az].id : null
1314
}
1415
}
1516
}

outputs.tf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ output "az_subnet_arns" {
88
description = "Map of AZ names to subnet ARNs"
99
}
1010

11+
output "az_subnet_cidr_blocks" {
12+
value = { for az, m in local.output_map : az => m.subnet_cidr_block }
13+
description = "Map of AZ names to subnet CIDR blocks"
14+
}
15+
1116
output "az_route_table_ids" {
1217
value = { for az, m in local.output_map : az => m.route_table_id }
1318
description = " Map of AZ names to Route Table IDs"
@@ -22,4 +27,4 @@ output "az_ngw_ids" {
2227
output "az_subnet_map" {
2328
value = local.output_map
2429
description = "Map of AZ names to map of information about subnets"
25-
}
30+
}

test/src/examples_complete_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ func TestExamplesComplete(t *testing.T) {
6565
"us-east-2b" = "subnet-05861d30d45e7b675"
6666
"us-east-2c" = "subnet-036d747a2b46857ae"
6767
}
68+
private_az_subnet_cidr_blocks = {
69+
"us-east-2a" = "172.16.128.0/21"
70+
"us-east-2b" = "172.16.136.0/21"
71+
"us-east-2c" = "172.16.144.0/21"
72+
}
6873
public_az_ngw_ids = {
6974
"us-east-2a" = "nat-0f5057f09b8cd8ddc"
7075
"us-east-2b" = "nat-0971b2505ea6d03f1"
@@ -80,6 +85,11 @@ func TestExamplesComplete(t *testing.T) {
8085
"us-east-2b" = "subnet-0b432a6748ca40638"
8186
"us-east-2c" = "subnet-00a9a6636ca722474"
8287
}
88+
public_az_subnet_cidr_blocks = {
89+
"us-east-2a" = "172.16.0.0/21"
90+
"us-east-2b" = "172.16.8.0/21"
91+
"us-east-2c" = "172.16.16.0/21"
92+
}
8393
*/
8494

8595
// Run `terraform output` to get the value of an output variable
@@ -110,6 +120,17 @@ func TestExamplesComplete(t *testing.T) {
110120
assertValueStartsWith(t, publicRouteTableIds, "^rtb-.*")
111121
assert.Equal(t, expectedAZs, getKeys(publicSubnetIds))
112122
assertValueStartsWith(t, publicSubnetIds, "^subnet-.*")
123+
124+
expectedPublicCidrBlocks := []string{"172.16.0.0/21", "172.16.8.0/21", "172.16.16.0/21"}
125+
expectedPrivateCidrBlocks := []string{"172.16.128.0/21", "172.16.136.0/21", "172.16.144.0/21"}
126+
// Run `terraform output` to get the value of an output variable
127+
publicSubnetCidrBlocks := terraform.OutputMap(t, terraformOptions, "public_az_subnet_cidr_blocks")
128+
privateSubnetCidrBlocks := terraform.OutputMap(t, terraformOptions, "private_az_subnet_cidr_blocks")
129+
// Verify output
130+
assert.Equal(t, expectedAZs, getKeys(publicSubnetCidrBlocks))
131+
assert.Equal(t, expectedPublicCidrBlocks, getValues(publicSubnetCidrBlocks))
132+
assert.Equal(t, expectedAZs, getKeys(privateSubnetCidrBlocks))
133+
assert.Equal(t, expectedPrivateCidrBlocks, getValues(privateSubnetCidrBlocks))
113134
}
114135

115136
func TestExamplesCompleteDisabledModule(t *testing.T) {

0 commit comments

Comments
 (0)