请原谅这是一个愚蠢的问题。我是一个terraform noob,并试图确定满足企业资源命名要求的最佳方法。
我们的云治理团队为您所拥有的所有资源确定了一个命名方案[region] [resource_type] [app_name] [instance 0001-999] [env]因此,例如,对于vm,我们可能会有以下内容:
uw1vmmyapp001dev
uw1vmmyapp002dev
etc.
当我只是使用{count.index}从头开始部署时,这一切都很好。但是,现在我正在尝试确定如何部署其他资源并从之前部署的资源(未部署的资源)开始terraform)。是否有用于收集现有库存,解析当前值并从最高实例编号开始递增的terraform标准? (我使用的是randoms,但是我们的云治理团队很快就压扁了。)
我的措辞真的很糟糕。希望这有点道理吗?
哦,我正在使用azurerm_virtual_machine
答案 0 :(得分:1)
如果没有任何分隔字符,那将会非常困难......它只是一个字符串。如果存在分隔字符,您可以使用split
来分解字符串并找出数字部分。无论如何,似乎没有相当于azurerm_virtual_machine
的数据源来获取命名信息。
鉴于您需要手动查找名称或ID以导入有关当前资源的信息,您可以找到编号最高的VM,然后使用以下内容添加其他VM并增加数字:
${var.region}${var.resource_type}${var.appname}${format("%03d", count.index + var.last_num)}${var.env}
要测试它的外观,您可以查看以下示例:
variable "last_num" {
default = 98
}
variable "region" {
default = "uw"
}
variable "resource_type" {
default = "vm"
}
variable "appname" {
default = "myapp"
}
variable "env" {
default = "dev"
}
resource "local_file" "foo" {
count = 3
filename = "foo.text"
content = "${var.region}${var.resource_type}${var.appname}${format("%03d", count.index + 1 + var.last_num)}${var.env}"
}
这给出了如下命名输出:
+ local_file.foo[0]
id: <computed>
content: "uwvmmyapp099dev"
filename: "foo.text"
+ local_file.foo[1]
id: <computed>
content: "uwvmmyapp100dev"
filename: "foo.text"
+ local_file.foo[2]
id: <computed>
content: "uwvmmyapp101dev"
filename: "foo.text"