Terraform 地形资源继承

Terraform 地形资源继承,terraform,Terraform,是否有方法声明要从中继承的抽象资源 例如: resource "digitalocean_droplet" "worker_abstract" { abstract = true // ??? name = "swarm-worker-${count.index}" tags = [ "${digitalocean_tag.swarm_worker.id}" ] // other config stuff provisioner "remote-exec"

是否有方法声明要从中继承的抽象资源

例如:

resource "digitalocean_droplet" "worker_abstract" {
  abstract = true // ???

  name = "swarm-worker-${count.index}"
  tags = [
    "${digitalocean_tag.swarm_worker.id}"
  ]

  // other config stuff

  provisioner "remote-exec" {
    //...
  }
}
然后将声明的资源与重写的变量一起使用:

resource "worker_abstract" "worker_foo" {
  count = 2
  name = "swarm-worker-foo-${count.index}"
  tags = [
    "${digitalocean_tag.swarm_worker.id}",
    "${digitalocean_tag.foo.id}"
  ]
}

resource "worker_abstract" "worker_bar" {
  count = 5
  name = "swarm-worker-bar-${count.index}"
  tags = [
    "${digitalocean_tag.swarm_worker.id}"
    "${digitalocean_tag.bar.id}"
  ]
}

这可能比您提出的解决方案更“冗长”,但这听起来像是一个完美的解决方案用例

您可以创建一个模块,比如在文件
worker/main.tf

variable "instances" {
  type = number
}

variable "name" {
  type = string
}

variable "tags" {
  type    = list(string)
  default = []
}

resource "digitalocean_droplet" "worker" {
  count = var.instances

  name = "swarm-worker-${var.name}-${count.index}"
  tags = var.tags

  // other config stuff

  provisioner "remote-exec" {
    //...
  }
}
然后,您可以使用与您的示例几乎完全相同的模块(例如,从上面的
worker
目录)


目前看来这是不可能的,但这里有一个开放的功能请求:
module "worker_foo" {
  source = "./worker"

  instances = 2
  name = "foo"
  tags = [
    "${digitalocean_tag.swarm_worker.id}",
    "${digitalocean_tag.foo.id}"
  ]
}

module "worker_bar" {
  source = "./worker"

  instances = 5
  name = "bar"
  tags = [
    "${digitalocean_tag.swarm_worker.id}"
    "${digitalocean_tag.bar.id}"
  ]
}