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

这可能比您提出的解决方案的"冗长"更多,但这听起来像是0.12中模块的完美用例。

您可以创建一个模块,在文件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}"
  ]
}

最新更新