我正在尝试使用Terraform将同一资源组中的两个虚拟机部署到我们的Azure平台。成功创建第一个Terraform后,然后在我更改了第二个VM名称和Azure标记后,想要销毁第一个,从而创建第二个。
我一直在遵循Terraform指南:https://www.terraform.io/docs/providers/azurerm/r/virtual_machine.html
resource "azurerm_virtual_machine" "main" {
location = "${var.location}"
name = "${var.vm_name}"
network_interface_ids = ["${azurerm_network_interface.main.id}"]
resource_group_name = "${var.resourcegroup_vm}"
vm_size = "${var.vm_size}"
tags {
application = "${var.tag}"
}
我希望Terraform在更改其变量名和标记后仅创建第二个VM。由于名称和标签更改,不想破坏第一个。
答案 0 :(得分:0)
Terraform基于HCL(Hashicorp配置语言),它是以*.tf
文件的格式编写的。它是一种声明性语言(与命令式相反),这意味着您可以描述所需的状态您要使用的基础架构,Terraform会找出需要进行哪些更改才能达到目的。
如果先创建一个实例,然后更改其名称,这是在告诉Terraform您不再希望您的实例使用旧名称,而是使用新名称。
要部署多个实例,可以使用the count attribute。然后,您可以使用插值在计数器中获取名称和标签,类似于以下内容:
resource "azurerm_virtual_machine" "main" {
location = "${var.location}"
name = "${var.vm_name}-${count.index + 1}"
network_interface_ids = ["${azurerm_network_interface.main.id}"]
resource_group_name = "${var.resourcegroup_vm}"
vm_size = "${var.vm_size}"
tags {
application = "${var.tag}-${count.index + 1}"
}
count = 2
}
注意-${count.index + 1}
和name
标签上附加的application
。