Terraform:基于 .tfvars 中的变量有条件地创建资源
Terraform: Conditional creation of a resource based on a variable in .tfvars
我在 .tf
文件中定义了对多个应用程序通用的资源。我通过 .tfvars
文件填充了许多字段。我需要省略一些完全基于 .tfvars
中的变量的资源。
例如,如果我有这样的资源:
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
但后来我在我的 .tfvars
文件中声明了类似 cloudflare = false
的东西 我希望能够做这样的事情:
if var.cloudflare {
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
}
我查看了动态块,但看起来您只能使用它们来编辑资源中的字段和块。我需要能够忽略整个资源。
使用在 .tfvars
中声明的变量添加具有三元条件的 count
参数,如下所示:
resource "cloudflare_record" "record" {
count = var.cloudflare ? 1 : 0
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
在此示例中,var.cloudflare
是在 .tfvars
文件中声明的布尔值。如果为真,将创建 1 record
个计数。如果为假,将创建计数 0 record
。
在count
申请资源后成为一个组,所以稍后在引用中使用0-index
组:
cloudflare_record.record[0].some_field
我看到的一个问题是,如果您尝试创建的资源已经在使用 for_each,那么您不能在该资源中同时使用 count 和 for_each。如果我找到更好的东西,我仍在努力寻找这个问题的答案。
我在 .tf
文件中定义了对多个应用程序通用的资源。我通过 .tfvars
文件填充了许多字段。我需要省略一些完全基于 .tfvars
中的变量的资源。
例如,如果我有这样的资源:
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
但后来我在我的 .tfvars
文件中声明了类似 cloudflare = false
的东西 我希望能够做这样的事情:
if var.cloudflare {
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
}
我查看了动态块,但看起来您只能使用它们来编辑资源中的字段和块。我需要能够忽略整个资源。
使用在 .tfvars
中声明的变量添加具有三元条件的 count
参数,如下所示:
resource "cloudflare_record" "record" {
count = var.cloudflare ? 1 : 0
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
在此示例中,var.cloudflare
是在 .tfvars
文件中声明的布尔值。如果为真,将创建 1 record
个计数。如果为假,将创建计数 0 record
。
在count
申请资源后成为一个组,所以稍后在引用中使用0-index
组:
cloudflare_record.record[0].some_field
我看到的一个问题是,如果您尝试创建的资源已经在使用 for_each,那么您不能在该资源中同时使用 count 和 for_each。如果我找到更好的东西,我仍在努力寻找这个问题的答案。