Terraform: условное создание ресурса на основе переменной в .tfvars - PullRequest
2 голосов
/ 14 февраля 2020

У меня есть ресурсы, определенные в .tf файлах, которые являются c для нескольких приложений. Я заполняю многие поля с помощью файла .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
}

Но тогда я объявляю что-то вроде cloudflare = false в своем файле .tfvars, я хотел бы иметь возможность сделать что-то вроде this:

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
 }
}

Я посмотрел на динамические c блоки, но похоже, что вы можете использовать их только для редактирования полей и блоков внутри ресурса. Мне нужно иметь возможность игнорировать весь ресурс.

1 Ответ

2 голосов
/ 14 февраля 2020

Это на самом деле очень просто. Добавьте параметр count с троичным условным выражением, используя переменную, объявленную в .tfvars, например:

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. Если значение равно false, будет создан счет 0 record.

...