Skip to content

Commit

Permalink
enable availability_zones for subnets
Browse files Browse the repository at this point in the history
  • Loading branch information
badra001 committed Apr 10, 2023
1 parent fbea430 commit c7ade5d
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 72 deletions.
36 changes: 18 additions & 18 deletions common/variables.common.subnets.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
variable "public_subnets" {
description = "List of objects with public subnet information to be created"
type = list(object({
base_cidr = string
label = string
bits = number
offset = optional(number, 0)
private = bool
tags = map(string)
enabled = optional(bool, true)
availability_zone = optional(string)
base_cidr = string
label = string
bits = number
offset = optional(number, 0)
private = bool
tags = map(string)
enabled = optional(bool, true)
availability_zone = optional(string)
availability_zones = optional(list(string))
# subnets = list(string)
# labels = list(string)
# availability_zones = list(string)
}))
default = []
}
Expand All @@ -21,17 +21,17 @@ variable "public_subnets" {
variable "private_subnets" {
description = "List of objects with private subnet information to be created"
type = list(object({
base_cidr = string
label = string
bits = number
offset = optional(number, 0)
private = bool
tags = map(string)
enabled = optional(bool, true)
availability_zone = optional(string)
base_cidr = string
label = string
bits = number
offset = optional(number, 0)
private = bool
tags = map(string)
enabled = optional(bool, true)
availability_zone = optional(string)
availability_zones = optional(list(string))
# subnets = list(string)
# labels = list(string)
# availability_zones = list(string)
}))
default = []
}
11 changes: 7 additions & 4 deletions examples/full-setup-tf-upgrade/apps/tf-run.data
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
VERSION 1.0.3
VERSION 1.0.4
REMOTE-STATE
COMMAND tf-directory-setup.py -l none -f
COMMAND setup-new-directory.sh
COMMAND tf-init -upgrade
COMMAND rm provider.infoblox.*
COMMAND ln -sf ../variables.vpc.auto.tfvars .
COMMAND ln -sf ../variables.vpc.tf .

LINK variables.vpc.auto.tfvars
# LINK variables.vpc.tf .
COMMAND rm provider.infoblox.*
# LINKTOP provider_configs.d/provider.infoblox.auto.tfvars
# LINKTOP provider_configs.d/provider.infoblox.tf
# LINKTOP provider_configs.d/provider.infoblox.variables.tf

ALL
COMMAND tf-directory-setup.py -l s3
36 changes: 6 additions & 30 deletions examples/full-setup-tf-upgrade/apps/versions.tf
Original file line number Diff line number Diff line change
@@ -1,37 +1,13 @@
#terraform {
# experiments = [module_variable_optional_attrs]
#}

terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.55.0"
version = ">= 3.0"
}
ldap = {
source = "trevex/ldap"
version = ">= 0.5.4"
}
## ldap = {
## source = "trevex/ldap"
## version = ">= 0.5.4"
## }
## external = {
## source = "hashicorp/external"
## version = ">= 1.0"
## }
## null = {
## source = "hashicorp/null"
## version = ">= 1.0"
## }
## random = {
## source = "hashicorp/random"
## version = ">= 1.0"
## }
## template = {
## source = "hashicorp/template"
## version = ">= 1.0"
## }
## infoblox = {
## source = "infobloxopen/infoblox"
## version = ">= 2.1.0"
## }
}
required_version = ">= 0.13"
}
4 changes: 2 additions & 2 deletions subnets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ No modules.
| <a name="input_account_id"></a> [account\_id](#input\_account\_id) | AWS Account ID (default: will pull from current user) | `string` | `""` | no |
| <a name="input_availability_zones"></a> [availability\_zones](#input\_availability\_zones) | AWS Availability Zones to use (by default will use all available) | `list(string)` | `[]` | no |
| <a name="input_override_prefixes"></a> [override\_prefixes](#input\_override\_prefixes) | Override built-in prefixes by component. This should be used primarily for common infrastructure things | `map(string)` | `{}` | no |
| <a name="input_private_subnets"></a> [private\_subnets](#input\_private\_subnets) | List of objects with private subnet information to be created | <pre>list(object({<br> base_cidr = string<br> label = string<br> bits = number<br> offset = optional(number, 0)<br> private = bool<br> tags = map(string)<br> enabled = optional(bool, true)<br> availability_zone = optional(string)<br> # subnets = list(string)<br> # labels = list(string)<br> # availability_zones = list(string)<br> }))</pre> | `[]` | no |
| <a name="input_public_subnets"></a> [public\_subnets](#input\_public\_subnets) | List of objects with public subnet information to be created | <pre>list(object({<br> base_cidr = string<br> label = string<br> bits = number<br> offset = optional(number, 0)<br> private = bool<br> tags = map(string)<br> enabled = optional(bool, true)<br> availability_zone = optional(string)<br> # subnets = list(string)<br> # labels = list(string)<br> # availability_zones = list(string)<br> }))</pre> | `[]` | no |
| <a name="input_private_subnets"></a> [private\_subnets](#input\_private\_subnets) | List of objects with private subnet information to be created | <pre>list(object({<br> base_cidr = string<br> label = string<br> bits = number<br> offset = optional(number, 0)<br> private = bool<br> tags = map(string)<br> enabled = optional(bool, true)<br> availability_zone = optional(string)<br> availability_zones = optional(list(string))<br> # subnets = list(string)<br> # labels = list(string)<br> }))</pre> | `[]` | no |
| <a name="input_public_subnets"></a> [public\_subnets](#input\_public\_subnets) | List of objects with public subnet information to be created | <pre>list(object({<br> base_cidr = string<br> label = string<br> bits = number<br> offset = optional(number, 0)<br> private = bool<br> tags = map(string)<br> enabled = optional(bool, true)<br> availability_zone = optional(string)<br> availability_zones = optional(list(string))<br> # subnets = list(string)<br> # labels = list(string)<br> }))</pre> | `[]` | no |
| <a name="input_tags"></a> [tags](#input\_tags) | AWS Tags to apply to appropriate resources (S3, KMS). Do not include safeguard tags here, use the data\_safeguard field for such things. | `map(string)` | `{}` | no |
| <a name="input_vpc_environment"></a> [vpc\_environment](#input\_vpc\_environment) | VPC environment purpose (infrastructure, common, shared, dev, stage, ite, prod) | `string` | `null` | no |
| <a name="input_vpc_full_name"></a> [vpc\_full\_name](#input\_vpc\_full\_name) | VPC full name component (vpc{index}-{vpc\_name}) | `string` | `null` | no |
Expand Down
52 changes: 34 additions & 18 deletions subnets/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -78,21 +78,29 @@ locals {
# public subnets
#---
locals {
public_subnets = { for v in var.public_subnets : v.label =>
_public_subnets = { for v in var.public_subnets : v.label =>
{
base_cidr = v.base_cidr
label = v.label
bits = v.bits
private = v.private
subnets = [for i in local.az_count_list : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
labels = [for az in local.availability_zones : format("%s-%s", v.label, az)]
availability_zones = local.availability_zones
base_cidr = v.base_cidr
label = v.label
bits = v.bits
private = v.private
# subnets = [for i in local.az_count_list : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
# labels = [for az in local.availability_zones : format("%v-%v", v.label, az)]
availability_zones = length(lookup(v, "availability_zones", [])) != 0 ? lookup(v, "availability_zones") : local.availability_zones
tags = lookup(v, "tags", {})
} if v.enabled
}
public_subnets = { for k, v in local._public_subnets : k => merge(v,
{
subnets = [for i in range(length(v.availability_zones)) : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
labels = [for az in v.availability_zones : format("%v-%v", v.label, az)]
az_count_list = range(length(v.availability_zones))
})
}
public_map = flatten([for k, v in local.public_subnets :
# [for i in local.az_count_list : tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i], "tags" = v.tags })]])
[for i in local.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
# [for i in local.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
[for i in v.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
}


Expand All @@ -115,23 +123,31 @@ resource "aws_subnet" "public" {
# private subnets
#---
locals {
private_subnets = { for v in var.private_subnets : v.label =>
_private_subnets = { for v in var.private_subnets : v.label =>
{
base_cidr = v.base_cidr
label = v.label
bits = v.bits
private = v.private
subnets = [for i in local.az_count_list : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
labels = [for az in local.availability_zones : format("%s-%s", v.label, az)]
availability_zones = local.availability_zones
base_cidr = v.base_cidr
label = v.label
bits = v.bits
private = v.private
# subnets = [for i in local.az_count_list : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
# labels = [for az in local.availability_zones : format("%v-%v", v.label, az)]
availability_zones = length(lookup(v, "availability_zones", [])) != 0 ? lookup(v, "availability_zones") : local.availability_zones
tags = lookup(v, "tags", {})
} if v.enabled
}
private_subnets = { for k, v in local._private_subnets : k => merge(v,
{
subnets = [for i in range(length(v.availability_zones)) : cidrsubnet(v.base_cidr, v.bits, v.offset + i)]
labels = [for az in v.availability_zones : format("%v-%v", v.label, az)]
az_count_list = range(length(v.availability_zones))
})
}
private_map = flatten([for k, v in local.private_subnets :
# [for i in local.az_count_list : tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i], "tags" = v.tags })]])
# [for i in local.az_count_list : merge(v.tags, tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }))]])
# [for i in local.az_count_list : tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i], "tags" = v.tags })]])
[for i in local.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
# [for i in local.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
[for i in v.az_count_list : merge(tomap({ "subnet" = v.subnets[i], "label" = v.labels[i], "availability_zone" = v.availability_zones[i] }), { "tags" = v.tags })]])
}

resource "aws_subnet" "private" {
Expand Down

0 comments on commit c7ade5d

Please sign in to comment.