【发布时间】:2021-05-05 23:32:08
【问题描述】:
我正在尝试导入资源并从 Azure 上的现有映像创建 VM。所有导入都成功,但是当我运行 terraform apply 时,出现以下错误: enter image description here
代码如下:
provider "azurerm" {
version = "2.0.0"
subscription_id = var.subscriptionID
features {}
}
resource "azurerm_resource_group" "TerraformResourceGroup" {
}
resource "azurerm_network_security_group" "TerraformSecurityGroup" {
}
resource "azurerm_virtual_network" "TerraformVirtualNetwork" {
}
resource "azurerm_network_interface" "TerraformNetworkInterface" {
}
resource "azurerm_virtual_machine" "TerraformVM" {
name = var.VM
location = var.location
resource_group_name = azurerm_resource_group.TerraformResourceGroup.name
network_interface_ids = [azurerm_network_interface.TerraformNetworkInterface.id]
vm_size = "Standard_DS1_v2"
storage_image_reference {
id = "/subscriptions/--/resourceGroups/TerraformResourceGroup/providers/Microsoft.Compute/images/TerraformVM-image-20210201164126"
}
storage_os_disk {
name = "disk1"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Standard_LRS"
}
os_profile {
computer_name = var.name
admin_username = var.username
admin_password = var.password
}
os_profile_windows_config {
provision_vm_agent = true
}
tags = {
environment = "staging"
}
}
请帮忙
好吧,让我解释清楚一点。我创建了一个 rg 并使用 terraform 部署了一个 vm,然后捕获了该 VM。现在我需要在同一个 rg 中使用该图像部署一个 vm。我需要使用导入源还是数据源?如果我使用数据源,我得到以下信息:删除虚拟网络“xx”(资源组“yy”)时出错:network.VirtualNetworksClient#Delete:发送请求失败:StatusCode=400 -- 原始错误:Code="InUseSubnetCannotBeDeleted" Message="子网 xx 正在被 /subscriptions/--/resourceGroups/yy/providers/Microsoft.Network/networkInterfaces/xx/ipConfigurations/internal 使用,无法删除。要删除子网,请删除子网内的所有资源子网。 使用数据源的代码
provider "azurerm" {
version = "2.0.0"
subscription_id = var.subscriptionID
features {}
}
data "azurerm_resource_group" "TerraformResourceGroup" {
name = var.resourceGroupName
}
data "azurerm_network_security_group" "TerraformSecurityGroup" {
name = var.securityGroup
resource_group_name = data.azurerm_resource_group.TerraformResourceGroup.name
}
data "azurerm_virtual_network" "TerraformVirtualNetwork" {
name = var.virtualNetwork
resource_group_name = data.azurerm_resource_group.TerraformResourceGroup.name
}
data "azurerm_subnet" "TerraformSubNet" {
name = var.subnet
virtual_network_name = var.virtualNetwork
resource_group_name = data.azurerm_resource_group.TerraformResourceGroup.name
}
# Create public IPs
resource "azurerm_public_ip" "test" {
name = var.publicIP
location = "${data.azurerm_resource_group.TerraformResourceGroup.location}"
resource_group_name = "${data.azurerm_resource_group.TerraformResourceGroup.name}"
allocation_method = "Static"
}
# create a network interface
resource "azurerm_network_interface" "TerraformNetworkInterface" {
name = var.networkInterface
location = "${data.azurerm_resource_group.TerraformResourceGroup.location}"
resource_group_name = "${data.azurerm_resource_group.TerraformResourceGroup.name}"
ip_configuration {
name = "testconfiguration1"
subnet_id = "${data.azurerm_subnet.TerraformSubNet.id}"
private_ip_address_allocation = "dynamic"
// public_ip_address_id = "${azurerm_public_ip.test.id}"
}
}
resource "azurerm_virtual_machine" "TerraformVM" {
name = var.VM
location = var.location
resource_group_name = data.azurerm_resource_group.TerraformResourceGroup.name
network_interface_ids = [azurerm_network_interface.TerraformNetworkInterface.id]
vm_size = "Standard_DS1_v2"
storage_image_reference {
id = "/subscriptions/----/resourceGroups/TerraformResourceGroup/providers/Microsoft.Compute/images/TerraformVM-image-20210202111108"
}
storage_os_disk {
name = "Imagedisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Standard_LRS"
}
os_profile {
computer_name = var.name
admin_username = var.username
admin_password = var.password
}
os_profile_windows_config {
provision_vm_agent = true
}
tags = {
environment = "staging"
}
}
你能帮忙吗
【问题讨论】:
标签: azure terraform virtual-machine terraform-provider-azure