[英]Terraform: How to supply attributes of resources which where created using one resource block?
[英]How to DRY repeating block lists in Terraform
我有以下配置,我想避免重復registrant_contact
、 admin_contact
和tech_contact
。 我怎樣才能使這個配置更短? 我有多個域,相同的阻止列表在配置文件中一次又一次地重復:
locals {
contact = {
address_line_1 = "Berlin"
city = "Berlin"
contact_type = "PERSON"
country_code = "DE"
email = var.aws_billing_mails[0]
first_name = "Foo"
last_name = "Bar"
zip_code = "12345"
phone_number = "+49.123456789"
}
}
resource "aws_route53domains_registered_domain" "my_domain" {
domain_name = "mydomain.com"
auto_renew = true
transfer_lock = true
registrant_privacy = true
admin_privacy = true
tech_privacy = true
registrant_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
admin_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
tech_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
}
resource "aws_route53domains_registered_domain" "my_other_domain" {
domain_name = "myotherdomain.com"
auto_renew = true
transfer_lock = true
registrant_privacy = true
admin_privacy = true
tech_privacy = true
registrant_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
admin_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
tech_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
}
您對塊無能為力,但可以減少資源數量。 因此,在for_each
的幫助下,您可以只擁有一個,而不是擁有兩個aws_route53domains_registered_domain
。 例如:
locals {
contact = {
"mydomain.com" = {
address_line_1 = "Berlin"
city = "Berlin"
contact_type = "PERSON"
country_code = "DE"
email = var.aws_billing_mails[0]
first_name = "Foo"
last_name = "Bar"
zip_code = "12345"
phone_number = "+49.123456789"
},
"myotherdomain.com" = {
address_line_1 = "Berlin"
city = "Berlin"
contact_type = "PERSON"
country_code = "DE"
email = var.aws_billing_mails[0]
first_name = "Foo"
last_name = "Bar"
zip_code = "12345"
phone_number = "+49.123456789"
}
}
然后
resource "aws_route53domains_registered_domain" "domain" {
for_each = local.contact
domain_name = each.key
auto_renew = true
transfer_lock = true
registrant_privacy = true
admin_privacy = true
tech_privacy = true
registrant_contact {
address_line_1 = each.value.address_line_1
city = each.value.city
contact_type = each.value.contact_type
country_code = each.value.country_code
email = each.value.email
first_name = each.value.first_name
last_name = each.value.last_name
zip_code = each.value.zip_code
phone_number = each.value.phone_number
}
admin_contact {
address_line_1 = each.value.address_line_1
city = each.value.city
contact_type = each.value.contact_type
country_code = each.value.country_code
email = each.value.email
first_name = each.value.first_name
last_name = each.value.last_name
zip_code = each.value.zip_code
phone_number = each.value.phone_number
}
tech_contact {
address_line_1 = each.value.address_line_1
city = each.value.city
contact_type = each.value.contact_type
country_code = each.value.country_code
email = each.value.email
first_name = each.value.first_name
last_name = each.value.last_name
zip_code = each.value.zip_code
phone_number = each.value.phone_number
}
}
更新如果您總是使用相同的聯系人,則:
locals {
domains = ["mydomain.com", "myotherdomain.com"]
contact = {
address_line_1 = "Berlin"
city = "Berlin"
contact_type = "PERSON"
country_code = "DE"
email = var.aws_billing_mails[0]
first_name = "Foo"
last_name = "Bar"
zip_code = "12345"
phone_number = "+49.123456789"
}
}
然后
resource "aws_route53domains_registered_domain" "my_domain" {
for_each = toset(local.domains)
domain_name = each.key
auto_renew = true
transfer_lock = true
registrant_privacy = true
admin_privacy = true
tech_privacy = true
registrant_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
admin_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
tech_contact {
address_line_1 = local.contact.address_line_1
city = local.contact.city
contact_type = local.contact.contact_type
country_code = local.contact.country_code
email = local.contact.email
first_name = local.contact.first_name
last_name = local.contact.last_name
zip_code = local.contact.zip_code
phone_number = local.contact.phone_number
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.