forked from cytopia/terraform-aws-route53-zone
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.tf
132 lines (102 loc) · 4.13 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
# -------------------------------------------------------------------------------------------------
# Delegation sets
# -------------------------------------------------------------------------------------------------
resource "aws_route53_delegation_set" "delegation_sets" {
for_each = { for val in var.delegation_sets : val => val }
reference_name = each.value
}
# -------------------------------------------------------------------------------------------------
# Public root zones
# -------------------------------------------------------------------------------------------------
resource "aws_route53_zone" "public_root_zones" {
for_each = local.public_root_zones
name = each.value.name
comment = var.comment
delegation_set_id = each.value.deleg_id
tags = merge(
{ "Name" = each.value.name },
{ "DelegationSetId" = each.value.deleg_id },
{ "DelegationSetName" = each.value.deleg_name },
each.value.tags,
var.tags
)
depends_on = [aws_route53_delegation_set.delegation_sets]
}
# -------------------------------------------------------------------------------------------------
# Public secondary zones
# -------------------------------------------------------------------------------------------------
resource "aws_route53_zone" "public_delegated_secondary_zones" {
for_each = local.public_delegated_secondary_zones
name = each.value.name
comment = var.comment
delegation_set_id = each.value.deleg_id
tags = merge(
{ "Name" = each.value.name },
{ "Parent" = each.value.parent },
{ "DelegationSetId" = each.value.deleg_id },
{ "DelegationSetName" = each.value.deleg_name },
each.value.tags,
var.tags
)
depends_on = [aws_route53_zone.public_root_zones]
}
# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_zone#public-subdomain-zone
resource "aws_route53_record" "public_delegated_secondary_ns_records" {
for_each = local.public_delegated_secondary_ns_records
zone_id = aws_route53_zone.public_root_zones[each.value.parent]["id"]
name = each.value.name
type = "NS"
ttl = each.value.ns_ttl
records = formatlist("%s.", each.value.ns_list)
depends_on = [aws_route53_zone.public_delegated_secondary_zones]
}
# -------------------------------------------------------------------------------------------------
# Public tertiary zones
# -------------------------------------------------------------------------------------------------
resource "aws_route53_zone" "public_delegated_tertiary_zones" {
for_each = local.public_delegated_tertiary_zones
name = each.value.name
comment = var.comment
delegation_set_id = each.value.deleg_id
tags = merge(
{ "Name" = each.value.name },
{ "Parent" = each.value.parent },
{ "DelegationSetId" = each.value.deleg_id },
{ "DelegationSetName" = each.value.deleg_name },
each.value.tags,
var.tags
)
depends_on = [aws_route53_zone.public_delegated_secondary_zones]
}
# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_zone#public-subdomain-zone
resource "aws_route53_record" "public_delegated_tertiary_ns_records" {
for_each = local.public_delegated_tertiary_ns_records
zone_id = aws_route53_zone.public_delegated_secondary_zones[each.value.parent]["id"]
name = each.value.name
type = "NS"
ttl = each.value.ns_ttl
records = formatlist("%s.", each.value.ns_list)
depends_on = [aws_route53_zone.public_delegated_tertiary_zones]
}
# -------------------------------------------------------------------------------------------------
# Private root zones
# -------------------------------------------------------------------------------------------------
data "aws_region" "current" {}
resource "aws_route53_zone" "private_root_zones" {
for_each = local.private_root_zones
name = each.value.name
comment = var.comment
dynamic "vpc" {
for_each = { for vpc in each.value.vpc_ids : vpc.id => vpc }
content {
vpc_id = vpc.value.id
vpc_region = vpc.value.region
}
}
tags = merge(
{ "Name" = each.value.name },
each.value.tags,
var.tags
)
depends_on = [data.aws_region.current]
}