@@ -2,62 +2,62 @@ locals {
2
2
all_domains = concat ([var . domain_name . domain ], [
3
3
for v in var . subject_alternative_names : v . domain
4
4
])
5
+
5
6
all_zones = concat ([var . domain_name . zone ], [
6
7
for v in var . subject_alternative_names : v . zone
7
8
])
8
- distinct_zones = distinct (local. all_zones )
9
- zone_name_to_id_map = zipmap (local. distinct_zones , data. aws_route53_zone . self [* ]. zone_id )
10
- domain_to_zone_map = zipmap (local. all_domains , local. all_zones )
11
9
12
- cert_san = reverse (sort ([
10
+ domain_zone_mapping = zipmap (local. all_domains , local. all_zones )
11
+
12
+ cert_sans = sort ([
13
13
for v in var . subject_alternative_names : v . domain
14
- ]))
15
- cert_validation_domains = [
16
- for v in aws_acm_certificate . self . domain_validation_options : tomap (v)
17
- ]
14
+ ])
15
+
16
+ default_tags = {
17
+ ManagedBy = " terraform"
18
+ }
18
19
}
19
20
20
21
data "aws_route53_zone" "self" {
21
- count = length (local. distinct_zones )
22
+ provider = aws. route53
23
+ for_each = toset (local. all_zones )
22
24
23
- name = local . distinct_zones [ count . index ]
25
+ name = each . value
24
26
private_zone = false
25
27
}
26
28
27
29
resource "aws_acm_certificate" "self" {
30
+ provider = aws. acm
31
+
28
32
domain_name = var. domain_name . domain
29
- subject_alternative_names = local. cert_san
33
+ subject_alternative_names = local. cert_sans
30
34
validation_method = " DNS"
31
35
32
- tags = var. tags
33
-
34
- lifecycle {
35
- create_before_destroy = true
36
- # Workaround for SAN doesn't maintain order
37
- # See https://github.com/terraform-providers/terraform-provider-aws/issues/8531
38
- ignore_changes = [subject_alternative_names ]
39
- }
36
+ tags = merge (local. default_tags , var. tags )
40
37
}
41
38
42
39
resource "aws_route53_record" "validation" {
43
- count = var. validation_set_records ? length (distinct (local. all_domains )) : 0
44
-
45
- zone_id = lookup (local. zone_name_to_id_map , lookup (local. domain_to_zone_map , local. cert_validation_domains [count . index ][" domain_name" ]))
46
- name = local. cert_validation_domains [count . index ][" resource_record_name" ]
47
- type = local. cert_validation_domains [count . index ][" resource_record_type" ]
48
- ttl = 60
49
-
40
+ provider = aws. route53
41
+ for_each = var. validation_set_records ? {
42
+ for dvo in aws_acm_certificate . self . domain_validation_options : dvo . domain_name => {
43
+ name = dvo.resource_record_name
44
+ record = dvo.resource_record_value
45
+ type = dvo.resource_record_type
46
+ }
47
+ } : {}
48
+
49
+ zone_id = data. aws_route53_zone . self [local . domain_zone_mapping [each . key ]]. zone_id
50
+ name = each. value . name
51
+ type = each. value . type
52
+ records = [each . value . record ]
53
+ ttl = 60
50
54
allow_overwrite = var. validation_allow_overwrite_records
51
-
52
- records = [
53
- local . cert_validation_domains [count . index ][" resource_record_value" ]
54
- ]
55
55
}
56
56
57
57
resource "aws_acm_certificate_validation" "self" {
58
- count = var. validate_certificate ? 1 : 0
59
-
60
- certificate_arn = aws_acm_certificate. self . arn
58
+ provider = aws. acm
59
+ count = var. validate_certificate ? 1 : 0
61
60
62
- validation_record_fqdns = local. cert_validation_domains [* ][" resource_record_name" ]
61
+ certificate_arn = aws_acm_certificate. self . arn
62
+ validation_record_fqdns = [for record in aws_route53_record . validation : record . fqdn ]
63
63
}
0 commit comments