-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.tf
132 lines (104 loc) · 4.01 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
##############################################################################
# IBM Cloud Provider
##############################################################################
provider ibm {
# Uncomment if running locally
# ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
ibmcloud_timeout = 60
}
##############################################################################
##############################################################################
# Resource Group where VPC will be created
##############################################################################
data ibm_resource_group resource_group {
name = var.resource_group
}
##############################################################################
##############################################################################
# Create a VPC
##############################################################################
resource ibm_is_vpc vpc {
name = "${var.prefix}-vpc"
resource_group = data.ibm_resource_group.resource_group.id
classic_access = var.classic_access
}
##############################################################################
##############################################################################
# Update default security group
##############################################################################
locals {
# Convert to object
security_group_rule_object = {
for rule in var.security_group_rules:
rule.name => rule
}
}
resource ibm_is_security_group_rule default_vpc_rule {
for_each = local.security_group_rule_object
group = ibm_is_vpc.vpc.default_security_group
direction = each.value.direction
remote = each.value.remote
dynamic tcp {
for_each = each.value.tcp == null ? [] : [each.value]
content {
port_min = each.value.tcp.port_min
port_max = each.value.tcp.port_max
}
}
dynamic udp {
for_each = each.value.udp == null ? [] : [each.value]
content {
port_min = each.value.udp.port_min
port_max = each.value.udp.port_max
}
}
dynamic icmp {
for_each = each.value.icmp == null ? [] : [each.value]
content {
type = each.value.icmp.type
code = each.value.icmp.code
}
}
}
##############################################################################
##############################################################################
# Public Gateways (Optional)
##############################################################################
locals {
# create object that only contains gateways that will be created
gateway_object = {
for zone in keys(var.use_public_gateways):
zone => "${var.region}-${index(keys(var.use_public_gateways), zone) + 1}" if var.use_public_gateways[zone]
}
}
resource ibm_is_public_gateway gateway {
for_each = local.gateway_object
name = "${var.prefix}-public-gateway-${each.key}"
vpc = ibm_is_vpc.vpc.id
resource_group = data.ibm_resource_group.resource_group.id
zone = each.value
}
##############################################################################
##############################################################################
# Multizone subnets
##############################################################################
locals {
# Object to reference gateways
public_gateways = {
for zone in ["zone-1", "zone-2", "zone-3"]:
# If gateway is created, set to id, otherwise set to empty string
zone => contains(keys(local.gateway_object), zone) ? ibm_is_public_gateway.gateway[zone].id : ""
}
}
module subnets {
source = "./subnet"
region = var.region
prefix = var.prefix
acl_id = ibm_is_network_acl.multizone_acl.id
subnets = var.subnets
vpc_id = ibm_is_vpc.vpc.id
resource_group_id = data.ibm_resource_group.resource_group.id
public_gateways = local.public_gateways
}
##############################################################################