refactor locals (#382)
This commit is contained in:
parent
6315410642
commit
fcc8741cd2
|
@ -171,7 +171,7 @@ module "vpc" {
|
|||
```
|
||||
|
||||
### Subnet Factory
|
||||
The `net-vpc` module includes a subnet factory (see [Resource Factories](../../factories/)) for the massive creation of subnets leveraging one configuration file per subnet.
|
||||
The `net-vpc` module includes a subnet factory (see [Resource Factories](../../factories/)) for the massive creation of subnets leveraging one configuration file per subnet.
|
||||
|
||||
|
||||
```hcl
|
||||
|
@ -186,17 +186,20 @@ module "vpc" {
|
|||
|
||||
```yaml
|
||||
# ./config/subnets/subnet-name.yaml
|
||||
region: europe-west1 # Region where the subnet will be creted
|
||||
description: Sample description # Description
|
||||
ip_cidr_range: 10.0.0.0/24 # Primary IP range for the subnet
|
||||
private_ip_google_access: false # Opt- Enables PGA. Defaults to true
|
||||
iam_users: ["foobar@example.com"] # Opt- Users to grant compute/networkUser to
|
||||
iam_groups: ["lorem@example.com"] # Opt- Groups to grant compute/networkUser to
|
||||
iam_service_accounts: ["foobar@project-id.iam.gserviceaccount.com"]
|
||||
# Opt- SAs to grant compute/networkUser to
|
||||
secondary_ip_ranges: # Opt- List of secondary IP ranges
|
||||
- secondary-range-a: 192.168.0.0/24
|
||||
# Secondary ranges in name: cidr format
|
||||
region: europe-west1
|
||||
description: Sample description
|
||||
ip_cidr_range: 10.0.0.0/24
|
||||
# optional attributes
|
||||
private_ip_google_access: false # defaults to true
|
||||
iam_users: ["foobar@example.com"] # grant compute/networkUser to users
|
||||
iam_groups: ["lorem@example.com"] # grant compute/networkUser to groups
|
||||
iam_service_accounts: ["fbz@prj.iam.gserviceaccount.com"]
|
||||
secondary_ip_ranges: # map of secondary ip ranges
|
||||
- secondary-range-a: 192.168.0.0/24
|
||||
flow_logs: # enable, set to empty map to use defaults
|
||||
- aggregation_interval: "INTERVAL_5_SEC"
|
||||
- flow_sampling: 0.5
|
||||
- metadata: "INCLUDE_ALL_METADATA"
|
||||
```
|
||||
|
||||
<!-- BEGIN TFDOC -->
|
||||
|
|
|
@ -15,86 +15,17 @@
|
|||
*/
|
||||
|
||||
locals {
|
||||
log_configs = var.log_configs == null ? {} : var.log_configs
|
||||
peer_network = (
|
||||
var.peering_config == null
|
||||
? null
|
||||
: element(reverse(split("/", var.peering_config.peer_vpc_self_link)), 0)
|
||||
)
|
||||
routes = var.routes == null ? {} : var.routes
|
||||
routes_gateway = {
|
||||
for name, data in local.routes :
|
||||
name => data if data.next_hop_type == "gateway"
|
||||
}
|
||||
routes_ilb = {
|
||||
for name, data in local.routes :
|
||||
name => data if data.next_hop_type == "ilb"
|
||||
}
|
||||
routes_instance = {
|
||||
for name, data in local.routes :
|
||||
name => data if data.next_hop_type == "instance"
|
||||
}
|
||||
routes_ip = {
|
||||
for name, data in local.routes :
|
||||
name => data if data.next_hop_type == "ip"
|
||||
}
|
||||
routes_vpn_tunnel = {
|
||||
for name, data in local.routes :
|
||||
name => data if data.next_hop_type == "vpn_tunnel"
|
||||
}
|
||||
subnet_log_configs = {
|
||||
for name, attrs in { for s in local.subnets : format("%s/%s", s.region, s.name) => s } : name => (
|
||||
lookup(var.subnet_flow_logs, name, false)
|
||||
? [{
|
||||
for key, value in var.log_config_defaults : key => lookup(
|
||||
lookup(local.log_configs, name, {}), key, value
|
||||
)
|
||||
}]
|
||||
: []
|
||||
)
|
||||
}
|
||||
subnets = merge({
|
||||
for subnet in var.subnets :
|
||||
"${subnet.region}/${subnet.name}" => subnet
|
||||
}, local.subnet_data)
|
||||
|
||||
subnets_l7ilb = {
|
||||
for subnet in var.subnets_l7ilb :
|
||||
"${subnet.region}/${subnet.name}" => subnet
|
||||
}
|
||||
network = (
|
||||
var.vpc_create
|
||||
? try(google_compute_network.network.0, null)
|
||||
: try(data.google_compute_network.network.0, null)
|
||||
)
|
||||
|
||||
_subnet_data = var.data_folder == null ? {} : {
|
||||
_factory_data = var.data_folder == null ? {} : {
|
||||
for f in fileset(var.data_folder, "**/*.yaml") :
|
||||
trimsuffix(basename(f), ".yaml") => yamldecode(file("${var.data_folder}/${f}"))
|
||||
}
|
||||
|
||||
subnet_data = {
|
||||
for k, v in local._subnet_data : "${v.region}/${k}" => {
|
||||
ip_cidr_range = v.ip_cidr_range
|
||||
name = k
|
||||
region = v.region
|
||||
secondary_ip_range = try(v.secondary_ip_range, [])
|
||||
}
|
||||
_factory_descriptions = {
|
||||
for k, v in local._factory_data :
|
||||
"${v.region}/${k}" => try(v.description, null)
|
||||
}
|
||||
subnet_data_descriptions = {
|
||||
for k, v in local._subnet_data : "${v.region}/${k}" => try(v.description, null)
|
||||
}
|
||||
subnet_descriptions = merge(var.subnet_descriptions, local.subnet_data_descriptions)
|
||||
|
||||
subnet_data_private_access = {
|
||||
for k, v in local._subnet_data : "${v.region}/${k}" => try(v.private_ip_google_access, true)
|
||||
}
|
||||
subnet_private_access = merge(var.subnet_private_access, local.subnet_data_private_access)
|
||||
|
||||
iam_members = var.iam == null ? {} : var.iam
|
||||
subnet_data_iam_members = [
|
||||
for k, v in local._subnet_data : {
|
||||
subnet = "${v.region}/${k}"
|
||||
_factory_iam_members = [
|
||||
for k, v in local._factory_subnets : {
|
||||
subnet = k
|
||||
role = "roles/compute.networkUser"
|
||||
members = concat(
|
||||
formatlist("group:%s", try(v.iam_groups, [])),
|
||||
|
@ -103,16 +34,77 @@ locals {
|
|||
)
|
||||
}
|
||||
]
|
||||
subnet_iam_members = concat(local.subnet_data_iam_members, flatten([
|
||||
for subnet, roles in local.iam_members : [
|
||||
_factory_flow_logs = {
|
||||
for k, v in local._factory_data : "${v.region}/${k}" => merge(
|
||||
var.log_config_defaults, try(v.flow_logs, {})
|
||||
) if try(v.flow_logs, false)
|
||||
}
|
||||
_factory_private_access = {
|
||||
for k, v in local._factory_data : "${v.region}/${k}" => try(
|
||||
v.private_ip_google_access, true
|
||||
)
|
||||
}
|
||||
_factory_subnets = {
|
||||
for k, v in local._factory_data : "${v.region}/${k}" => {
|
||||
ip_cidr_range = v.ip_cidr_range
|
||||
name = k
|
||||
region = v.region
|
||||
secondary_ip_range = try(v.secondary_ip_range, [])
|
||||
}
|
||||
}
|
||||
_iam = var.iam == null ? {} : var.iam
|
||||
_routes = var.routes == null ? {} : var.routes
|
||||
_subnet_flow_logs = {
|
||||
for k, v in var.subnet_flow_logs : k => merge(
|
||||
var.log_config_defaults, try(var.log_configs[k], {})
|
||||
)
|
||||
}
|
||||
_subnet_iam_members = flatten([
|
||||
for subnet, roles in local._iam : [
|
||||
for role, members in roles : {
|
||||
subnet = subnet
|
||||
role = role
|
||||
members = members
|
||||
role = role
|
||||
subnet = subnet
|
||||
}
|
||||
]
|
||||
]))
|
||||
|
||||
])
|
||||
network = (
|
||||
var.vpc_create
|
||||
? try(google_compute_network.network.0, null)
|
||||
: try(data.google_compute_network.network.0, null)
|
||||
)
|
||||
peer_network = (
|
||||
var.peering_config == null
|
||||
? null
|
||||
: element(reverse(split("/", var.peering_config.peer_vpc_self_link)), 0)
|
||||
)
|
||||
routes = {
|
||||
gateway = { for k, v in local._routes : k => v if v.next_hop_type == "gateway" }
|
||||
ilb = { for k, v in local._routes : k => v if v.next_hop_type == "ilb" }
|
||||
instance = { for k, v in local._routes : k => v if v.next_hop_type == "instance" }
|
||||
ip = { for k, v in local._routes : k => v if v.next_hop_type == "ip" }
|
||||
vpn_tunnel = { for k, v in local._routes : k => v if v.next_hop_type == "vpn_tunnel" }
|
||||
}
|
||||
subnet_descriptions = merge(
|
||||
local._factory_descriptions, var.subnet_descriptions
|
||||
)
|
||||
subnet_iam_members = concat(
|
||||
local._factory_iam_members, local._subnet_iam_members
|
||||
)
|
||||
subnet_flow_logs = merge(
|
||||
local._factory_flow_logs, local._subnet_flow_logs
|
||||
)
|
||||
subnet_private_access = merge(
|
||||
local._factory_private_access, var.subnet_private_access
|
||||
)
|
||||
subnets = merge(
|
||||
{ for subnet in var.subnets : "${subnet.region}/${subnet.name}" => subnet },
|
||||
local._factory_subnets
|
||||
)
|
||||
subnets_l7ilb = {
|
||||
for subnet in var.subnets_l7ilb :
|
||||
"${subnet.region}/${subnet.name}" => subnet
|
||||
}
|
||||
}
|
||||
|
||||
data "google_compute_network" "network" {
|
||||
|
@ -182,15 +174,17 @@ resource "google_compute_subnetwork" "subnetwork" {
|
|||
{ range_name = name, ip_cidr_range = range }
|
||||
]
|
||||
description = lookup(
|
||||
local.subnet_descriptions,
|
||||
"${each.value.region}/${each.value.name}",
|
||||
"Terraform-managed."
|
||||
local.subnet_descriptions, each.key, "Terraform-managed."
|
||||
)
|
||||
private_ip_google_access = lookup(
|
||||
local.subnet_private_access, "${each.value.region}/${each.value.name}", true
|
||||
local.subnet_private_access, each.key, true
|
||||
)
|
||||
dynamic "log_config" {
|
||||
for_each = local.subnet_log_configs["${each.value.region}/${each.value.name}"]
|
||||
for_each = toset(
|
||||
try(local.subnet_flow_logs[each.key], {}) != {}
|
||||
? [local.subnet_flow_logs[each.key]]
|
||||
: []
|
||||
)
|
||||
iterator = config
|
||||
content {
|
||||
aggregation_interval = config.value.aggregation_interval
|
||||
|
@ -232,7 +226,7 @@ resource "google_compute_subnetwork_iam_binding" "binding" {
|
|||
}
|
||||
|
||||
resource "google_compute_route" "gateway" {
|
||||
for_each = local.routes_gateway
|
||||
for_each = local.routes.gateway
|
||||
project = var.project_id
|
||||
network = local.network.name
|
||||
name = "${var.name}-${each.key}"
|
||||
|
@ -244,7 +238,7 @@ resource "google_compute_route" "gateway" {
|
|||
}
|
||||
|
||||
resource "google_compute_route" "ilb" {
|
||||
for_each = local.routes_ilb
|
||||
for_each = local.routes.ilb
|
||||
project = var.project_id
|
||||
network = local.network.name
|
||||
name = "${var.name}-${each.key}"
|
||||
|
@ -256,7 +250,7 @@ resource "google_compute_route" "ilb" {
|
|||
}
|
||||
|
||||
resource "google_compute_route" "instance" {
|
||||
for_each = local.routes_instance
|
||||
for_each = local.routes.instance
|
||||
project = var.project_id
|
||||
network = local.network.name
|
||||
name = "${var.name}-${each.key}"
|
||||
|
@ -270,7 +264,7 @@ resource "google_compute_route" "instance" {
|
|||
}
|
||||
|
||||
resource "google_compute_route" "ip" {
|
||||
for_each = local.routes_ip
|
||||
for_each = local.routes.ip
|
||||
project = var.project_id
|
||||
network = local.network.name
|
||||
name = "${var.name}-${each.key}"
|
||||
|
@ -282,7 +276,7 @@ resource "google_compute_route" "ip" {
|
|||
}
|
||||
|
||||
resource "google_compute_route" "vpn_tunnel" {
|
||||
for_each = local.routes_vpn_tunnel
|
||||
for_each = local.routes.vpn_tunnel
|
||||
project = var.project_id
|
||||
network = local.network.name
|
||||
name = "${var.name}-${each.key}"
|
||||
|
|
Loading…
Reference in New Issue