首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform vm_name_prefix自动增量修改

问Terraform vm_name_prefix自动增量修改
EN

Stack Overflow用户
提问于 2019-04-04 15:07:41
回答 3查看 1.8K关注 0票数 1

我一直在努力在谷歌上找到任何有用的东西,所以我在这里

我们目前正在部署2个新的虚拟机。

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

在Terraform tfvars中,我们有这两个属性:

代码语言:javascript
复制
vm_count = "2"
vm_name_prefix = "something000"

现在,在运行试运行之后,Terraform将命名虚拟机

代码语言:javascript
复制
name:    something0000
name:    something0001

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

代码语言:javascript
复制
name:    something0001
name:    something0002

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

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

代码语言:javascript
复制
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的情况下覆盖这个定义吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-04 16:50:33

This可能就是您要找的东西。您所需要的只是一个简单的+ 1

代码语言:javascript
复制
name = "${var.vm_name_prefix}${count.index + 1}"
票数 3
EN

Stack Overflow用户

发布于 2019-04-04 19:53:24

虽然SteveGoob的answer解决了这样一个问题,即Terraform (像所有优秀的编程语言一样)使用0索引,而人类是1的铁杆粉丝,使用前导0来索引静态前缀是毫无意义的。

如果你有9台机器,你的名字会从something0001一直到something0009。但是在第10台机器上,你最终会得到something00010。请注意,您仍然有相同数量的前导零。

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

代码语言:javascript
复制
name = "${var.vm_name_prefix}${format("%0000d", count.index + 1)}"

这意味着如果您有9台计算机,您将拥有从something0001到something0009的名称。但是在第10台机器上,您最终将使用something0010,而在第9999台机器上,它将是something9999。

票数 3
EN

Stack Overflow用户

发布于 2019-04-04 15:37:20

尽管您共享的TF代码似乎不是HCL,但我认为您的问题的解决方案是拥有一个起始值为1的外部变量,并在每个迭代步骤中递增它。

代码语言:javascript
复制
name_index = [1, 2, 3, 4]

resource "example" "name" {
  count = 4
  name = "${var.name_index[count.index]}"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55509786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档