Terraform:基于.tfvars中的变量有条件地创建资源

Terraform:基于.tfvars中的变量有条件地创建资源,terraform,terraform-provider-cloudflare,Terraform,Terraform Provider Cloudflare,我在.tf文件中定义了一些通用于多个应用程序的资源。我通过.tfvars文件填充了许多字段。我需要完全基于.tfvars中的变量省略一些资源 例如,如果我有如下资源: resource "cloudflare_record" "record" { zone_id = "${data.cloudflare_zones.domain.zones[0].id}" name = "${var.subdomain}" value = "${var.origin_server}"

我在
.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
 }
}
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
}

我已经研究了动态块,但看起来您只能使用它们来编辑资源中的字段和块。我需要能够忽略整个资源。

这实际上非常简单。使用
.tfvars
中声明的变量添加一个带有三元条件的
count
参数,如下所示:

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
 }
}
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的记录。如果为false,则将创建计数为0的
记录

计数
应用后,资源成为一个组,因此在后面的参考中使用组的
0-index

cloudflare_record.record[0].some_field

什么版本的Terraform?我现在安装了Terraform v0.12.10,但如果需要,我可以切换到另一个版本。是否有一种方法可以允许在不使用索引的情况下引用此资源?e、 g.
cloudflare\u record.record[0]。name
?如果使用计数功能,则需要索引。如果不想硬编码0,可以使用count.index。请参阅:若由于count字段,资源并没有得到create,那个么下面的行将失败
cloudflare\u记录。记录[0]。一些\u字段
。如何输出此值