我一直在努力寻找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吗?
答案 0 :(得分:2)
This可能正是您想要的。您只需要一个简单的+ 1
name = "${var.vm_name_prefix}${count.index + 1}"
答案 1 :(得分:2)
尽管SteveGoob的answer解决了一个事实,即Terraform(像所有好的编程语言一样)使用0索引,而人类却是1的忠实拥护者,用0开头索引静态前缀是没有意义的。>
如果您有9台计算机,则名称将为something0001
至something0009
。但是在第十台计算机上,您将得到something00010
。请注意,您仍然有相同数量的前导零。
相反,您可以使用Terraform允许printf样式格式的事实:
name = "${var.vm_name_prefix}${format("%0000d", count.index + 1)}"
这意味着如果您有9台计算机,则名称将为something0001
至something0009
。但是在第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]}"
}