仅通过Terraform添加ARM Azure VM

时间:2016-06-13 01:56:29

标签: azure terraform

是否可以仅使用Terraform添加新VM?到目前为止,所有示例/示例以及我使用Terraform的所有内容都让我同时添加VNet,子网,网络接口,VM,存储等等,在创建其他时引用脚本中包含的资源资源。例如,Terraform网络接口,然后在创建VM时引用它。

如果您已经拥有VNet,Subnet等,并且只想添加一个新的网络接口,那该怎么办?每次我尝试这样做并且只是引用我认为是正确的id时,计划阶段工作但是然后应用失败,并且在PUT调用时出现“autorest:DoErrorUnlessStatusCode 400”错误。

除非资源最初是使用Terraform创建的,否则不可能这样做?

2 个答案:

答案 0 :(得分:0)

是的,你可以。您可以从具有输出的已创建子网获取ID。像:

output "subnetid" {
       value = "${azurerm_subnet.xxx.id}"
}

在下一个模板中,您可以在subnet_id字段中使用此ID。

“$ {azurerm_subnet.xxx.id}”的值基于resourcegroup / vnet / subnet。因此,如果你知道它是如何构建的,你也可以喜欢不是以terraform形式创建的资源。

答案 1 :(得分:0)

您可以使用data指令来获取现有资源,如下所示。然后,您可以插值这些来创建您的VM。

data "azurerm_resource_group" "existing_deploy_rg" {
  name     = "RG"
}

data "azurerm_virtual_network" "existing_vnet" {
  name                = "existing-vnet"
  resource_group_name = "${data.azurerm_resource_group.existing_deploy_rg.name}"
}

data "azurerm_subnet" "existing_subnet" {
  name                 = "existing-subnet"
  resource_group_name  = "${data.azurerm_resource_group.existing_deploy_rg.name}"
  virtual_network_name = "${data.azurerm_virtual_network.existing_vnet.name}"
}