Terraform vm_name_prefix自动增量修改

时间:2019-04-04 07:07:41

标签: terraform

我一直在努力寻找Google上有用的东西,所以我在这里。

我们目前正在部署2个新VM。

我们正在使用https://github.com/vancluever/terraform-vsphere-virtual-machine

在Terraform tfvar中,我们具有以下两个属性:

vm_count = "2"
vm_name_prefix = "something000"

现在在空运行Terraform后将为虚拟机命名

name:    something0000
name:    something0001

但是我们希望VM的名称以“ 1”开头并从那里开始计数。

name:    something0001
name:    something0002

有没有办法从Terraform中获得这种行为?

我似乎已经找到定义此行为的代码: (vsphere_virutal_machine_linux.tf)

resource "vsphere_virtual_machine" "virtual_machine_linux" {
  count            = "${var.template_os_family == "linux" ? var.vm_count : 0}"
  name             = "${var.vm_name_prefix}${count.index}"
  resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
  datastore_id     = "${data.vsphere_datastore.ds.id}"

  num_cpus = "${var.num_cpus}"
  memory   = "${var.memory}"
  guest_id = "${data.vsphere_virtual_machine.template.guest_id}"

  wait_for_guest_net_timeout = "${var.wait_for_guest_net_timeout}"

  network_interface {
    network_id = "${data.vsphere_network.network.id}"
}

我们可以覆盖此定义,而不必下载和修改git repo吗?

3 个答案:

答案 0 :(得分:2)

This可能正是您想要的。您只需要一个简单的+ 1

name = "${var.vm_name_prefix}${count.index + 1}"

答案 1 :(得分:2)

尽管SteveGoobanswer解决了一个事实,即Terraform(像所有好的编程语言一样)使用0索引,而人类却是1的忠实拥护者,用0开头索引静态前缀是没有意义的。

如果您有9台计算机,则名称将为something0001something0009。但是在第十台计算机上,您将得到something00010。请注意,您仍然有相同数量的前导零。

相反,您可以使用Terraform允许printf样式格式的事实:

name = "${var.vm_name_prefix}${format("%0000d", count.index + 1)}"

这意味着如果您有9台计算机,则名称将为something0001something0009。但是在第10台计算机上,您将得到something0010,在第9999台计算机上,它将是something9999

答案 2 :(得分:0)

即使您共享的TF代码似乎不是HCL,我也认为解决您的问题的方法是拥有一个起始值为1的外部变量,并在每个迭代步骤中将其递增。

name_index = [1, 2, 3, 4]

resource "example" "name" {
  count = 4
  name = "${var.name_index[count.index]}"
}