diff --git a/common/variables.common.subnets.tf b/common/variables.common.subnets.tf index 64e3f5c..aa78c3d 100644 --- a/common/variables.common.subnets.tf +++ b/common/variables.common.subnets.tf @@ -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 = [] } @@ -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 = [] } diff --git a/examples/full-setup-tf-upgrade/apps/tf-run.data b/examples/full-setup-tf-upgrade/apps/tf-run.data index 8e4d78e..9a46c7d 100644 --- a/examples/full-setup-tf-upgrade/apps/tf-run.data +++ b/examples/full-setup-tf-upgrade/apps/tf-run.data @@ -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 diff --git a/examples/full-setup-tf-upgrade/apps/versions.tf b/examples/full-setup-tf-upgrade/apps/versions.tf index 54c9599..1fe34ba 100644 --- a/examples/full-setup-tf-upgrade/apps/versions.tf +++ b/examples/full-setup-tf-upgrade/apps/versions.tf @@ -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" } diff --git a/subnets/README.md b/subnets/README.md index a94888d..8e8b339 100644 --- a/subnets/README.md +++ b/subnets/README.md @@ -98,8 +98,8 @@ No modules. | [account\_id](#input\_account\_id) | AWS Account ID (default: will pull from current user) | `string` | `""` | no | | [availability\_zones](#input\_availability\_zones) | AWS Availability Zones to use (by default will use all available) | `list(string)` | `[]` | no | | [override\_prefixes](#input\_override\_prefixes) | Override built-in prefixes by component. This should be used primarily for common infrastructure things | `map(string)` | `{}` | no | -| [private\_subnets](#input\_private\_subnets) | List of objects with private subnet information to be created |
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)
# subnets = list(string)
# labels = list(string)
# availability_zones = list(string)
}))
| `[]` | no | -| [public\_subnets](#input\_public\_subnets) | List of objects with public subnet information to be created |
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)
# subnets = list(string)
# labels = list(string)
# availability_zones = list(string)
}))
| `[]` | no | +| [private\_subnets](#input\_private\_subnets) | List of objects with private subnet information to be created |
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)
availability_zones = optional(list(string))
# subnets = list(string)
# labels = list(string)
}))
| `[]` | no | +| [public\_subnets](#input\_public\_subnets) | List of objects with public subnet information to be created |
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)
availability_zones = optional(list(string))
# subnets = list(string)
# labels = list(string)
}))
| `[]` | no | | [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 | | [vpc\_environment](#input\_vpc\_environment) | VPC environment purpose (infrastructure, common, shared, dev, stage, ite, prod) | `string` | `null` | no | | [vpc\_full\_name](#input\_vpc\_full\_name) | VPC full name component (vpc{index}-{vpc\_name}) | `string` | `null` | no | diff --git a/subnets/main.tf b/subnets/main.tf index 0d34cd7..143053b 100644 --- a/subnets/main.tf +++ b/subnets/main.tf @@ -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 })]]) } @@ -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" {