我以前创建了一个类型cloudflare记录,并希望在添加另一个时保持它。所以我定义了一个标志来跳过它
resource "cloudflare_record" "cloudflare-a-record" {
count = var.flag != false ? 1 : 0
zone_id = var.zone_id
name = var.sub_domain
type = "A"
value = aws_eip.my_eip.public_ip
ttl = 1
proxied = false
}
resource "cloudflare_record" "vault-cloudflare-cname-record" {
count = var.flag == false ? 1 : 0
zone_id = var.zone_id
name = cloudflare_record.cloudflare-a-record.hostname
type = "CNAME"
value = aws_eip.my_eip.public_dns
ttl = 1
proxied = false
}
但是Terraform删除了这个资源,并发出了以下消息:
cloudflare_record。Vault-cloudflare-a-record[0]将被销毁(因为index[0]超出了count的范围)
是否有其他方法可以忽略此资源?还是代码错了?
在这种情况下,您不能对两个不同的资源使用相同的标志,因为A和CNAME资源的变量值将保持相同。我认为当前代码有两种可能的选择,因为您使用不同的条件(在A中使用==
,在CNAME中使用!=
):
var.flag == false ? 1 : 0 # A record
var.flag != false ? 1 : 0 # CNAME record
这意味着如果flag = false
将创建A记录(因为计数将是1
),而CNAME记录将不被创建(因为计数将是0
)。现在,如果flag
的值更改为true
,那么A记录将被删除(因为true == false
将返回false
), CNAME记录将被创建(因为true != false
将是true
)。这意味着同一个flag
不应该用于两个不同的资源。您可以对这两个资源使用相同的条件,这意味着将同时创建/删除这两个资源(不确定这是否是您想要的)。更好的方法是定义两个变量,一个用于A,一个用于CNAME record:
variable "create_a_record" {
type = bool
}
variable "create_cname_record" {
type = bool
}
然后,在代码中将使用count
元参数的行更改为:
resource "cloudflare_record" "cloudflare-a-record" {
count = var.create_a_record ? 1 : 0
zone_id = var.zone_id
name = var.sub_domain
type = "A"
value = aws_eip.my_eip.public_ip
ttl = 1
proxied = false
}
resource "cloudflare_record" "vault-cloudflare-cname-record" {
count = var.create_cname_record ? 1 : 0
zone_id = var.zone_id
name = cloudflare_record.cloudflare-a-record.hostname
type = "CNAME"
value = aws_eip.my_eip.public_dns
ttl = 1
proxied = false
}
这样你就可以控制你是想同时创建还是只创建一个。还要注意以下几点:
count = var.create_a_record ? 1 : 0
count = var.create_cname_record ? 1 : 0
当变量类型为bool
(true
或false
)时,在条件中使用它们时,您不必检查它们是否与另一个布尔值相等,因为最左边的值无论如何都会是true
或false
。例如,如果您设置了create_a_record = true
,那么将使上面的表达式:
count = true ? 1 : 0
,计算结果为count = 1
。你也可以为变量设置默认值,例如,如果你想确保A记录总是在那里,你可以这样做:
variable "create_a_record" {
type = bool
default = true
}
[1] https://www.terraform.io/language/expressions/conditionals