Skip to content

Commit cc4d9c6

Browse files
committed
feat: make origin a typed variable
1 parent 2c4ae23 commit cc4d9c6

File tree

2 files changed

+58
-25
lines changed

2 files changed

+58
-25
lines changed

main.tf

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -81,59 +81,61 @@ resource "aws_cloudfront_distribution" "this" {
8181
for_each = var.origin
8282

8383
content {
84-
domain_name = origin.value.domain_name
85-
origin_id = lookup(origin.value, "origin_id", origin.key)
86-
origin_path = lookup(origin.value, "origin_path", "")
87-
connection_attempts = lookup(origin.value, "connection_attempts", null)
88-
connection_timeout = lookup(origin.value, "connection_timeout", null)
89-
origin_access_control_id = lookup(origin.value, "origin_access_control_id", lookup(lookup(aws_cloudfront_origin_access_control.this, lookup(origin.value, "origin_access_control", ""), {}), "id", null))
90-
91-
dynamic "s3_origin_config" {
92-
for_each = length(keys(lookup(origin.value, "s3_origin_config", {}))) == 0 ? [] : [lookup(origin.value, "s3_origin_config", {})]
93-
94-
content {
95-
origin_access_identity = lookup(s3_origin_config.value, "cloudfront_access_identity_path", lookup(lookup(aws_cloudfront_origin_access_identity.this, lookup(s3_origin_config.value, "origin_access_identity", ""), {}), "cloudfront_access_identity_path", null))
96-
}
97-
}
84+
connection_attempts = origin.value.connection_attempts
85+
connection_timeout = origin.value.connection_timeout
9886

9987
dynamic "custom_origin_config" {
100-
for_each = length(lookup(origin.value, "custom_origin_config", "")) == 0 ? [] : [lookup(origin.value, "custom_origin_config", "")]
88+
for_each = origin.value.custom_origin_config != null ? [origin.value.custom_origin_config] : []
10189

10290
content {
10391
http_port = custom_origin_config.value.http_port
10492
https_port = custom_origin_config.value.https_port
10593
origin_protocol_policy = custom_origin_config.value.origin_protocol_policy
10694
origin_ssl_protocols = custom_origin_config.value.origin_ssl_protocols
107-
origin_keepalive_timeout = lookup(custom_origin_config.value, "origin_keepalive_timeout", null)
108-
origin_read_timeout = lookup(custom_origin_config.value, "origin_read_timeout", null)
95+
origin_keepalive_timeout = custom_origin_config.value.origin_keepalive_timeout
96+
origin_read_timeout = custom_origin_config.value.origin_read_timeout
10997
}
11098
}
11199

100+
domain_name = origin.value.domain_name
101+
112102
dynamic "custom_header" {
113-
for_each = lookup(origin.value, "custom_header", [])
103+
for_each = origin.value.custom_header
114104

115105
content {
116106
name = custom_header.value.name
117107
value = custom_header.value.value
118108
}
119109
}
120110

111+
origin_access_control_id = origin.value.origin_access_control_id
112+
origin_id = coalesce(origin.value.origin_id, origin.key)
113+
origin_path = origin.value.origin_path
114+
121115
dynamic "origin_shield" {
122-
for_each = length(keys(lookup(origin.value, "origin_shield", {}))) == 0 ? [] : [lookup(origin.value, "origin_shield", {})]
116+
for_each = origin.value.origin_shield != null ? [origin.value.origin_shield] : []
123117

124118
content {
125119
enabled = origin_shield.value.enabled
126120
origin_shield_region = origin_shield.value.origin_shield_region
127121
}
128122
}
129123

124+
dynamic "s3_origin_config" {
125+
for_each = origin.value.s3_origin_config != null ? [origin.value.s3_origin_config] : []
126+
127+
content {
128+
origin_access_identity = s3_origin_config.value.origin_access_identity
129+
}
130+
}
131+
130132
dynamic "vpc_origin_config" {
131-
for_each = length(keys(lookup(origin.value, "vpc_origin_config", {}))) == 0 ? [] : [lookup(origin.value, "vpc_origin_config", {})]
133+
for_each = origin.value.vpc_origin_config != null ? [origin.value.vpc_origin_config] : []
132134

133135
content {
134-
vpc_origin_id = lookup(vpc_origin_config.value, "vpc_origin_id", lookup(lookup(aws_cloudfront_vpc_origin.this, lookup(vpc_origin_config.value, "vpc_origin", ""), {}), "id", null))
135-
origin_keepalive_timeout = lookup(vpc_origin_config.value, "origin_keepalive_timeout", null)
136-
origin_read_timeout = lookup(vpc_origin_config.value, "origin_read_timeout", null)
136+
vpc_origin_id = coalesce(vpc_origin_config.value.vpc_origin_id, aws_cloudfront_vpc_origin.this[origin.key].id)
137+
origin_keepalive_timeout = vpc_origin_config.value.origin_keepalive_timeout
138+
origin_read_timeout = vpc_origin_config.value.origin_read_timeout
137139
}
138140
}
139141
}

variables.tf

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,39 @@ variable "tags" {
122122

123123
variable "origin" {
124124
description = "One or more origins for this distribution (multiples allowed)."
125-
type = any
126-
default = null
125+
type = map(object({
126+
connection_attempts = optional(number)
127+
connection_timeout = optional(number)
128+
custom_origin_config = optional(object({
129+
http_port = number
130+
https_port = number
131+
origin_protocol_policy = string
132+
origin_ssl_protocols = list(string)
133+
origin_keepalive_timeout = optional(number)
134+
origin_read_timeout = optional(number)
135+
}))
136+
domain_name = string
137+
custom_header = optional(list(object({
138+
name = string
139+
value = string
140+
})))
141+
origin_access_control_id = optional(string)
142+
origin_id = optional(string) # If not provided, map key is used.
143+
origin_path = optional(string)
144+
origin_shield = optional(object({
145+
enabled = bool
146+
origin_shield_region = optional(string)
147+
}))
148+
s3_origin_config = optional(object({
149+
origin_access_identity = string
150+
}))
151+
vpc_origin_config = optional(object({
152+
origin_keepalive_timeout = optional(number)
153+
origin_read_timeout = optional(number)
154+
vpc_origin_id = optional(string) # If not provided, uses aws_cloudfront_vpc_origin.this
155+
}))
156+
}))
157+
default = null
127158
}
128159

129160
variable "origin_group" {

0 commit comments

Comments
 (0)