给定azurerm_linux_virtual_machine,
resource "azurerm_virtual_machine_extension" "postinstall" {
name = azurerm_linux_virtual_machine.privateeye.computer_name
virtual_machine_id = azurerm_linux_virtual_machine.privateeye.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = << SETTINGS
{
"commandToExecute" : "/usr/sbin/postinstall.sh"
}
当我销毁它时,它给出一个错误:
azurerm_virtual_machine_extension.postinstall: Destroying: [id=/subscriptions/55bee-aaa-445b-vd-420608165/resourceGroups/rg_PrivateEye/providers/Microsoft.Compute/virtualMachines/ollinger-vm-gitlabtemplate/extensions/ollinger-vm-gitlabtemplate]
compute.VirtualMachineExtensionsClient#Delete: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=<nil> Code="OperationNotAllowed" Message="Cannot modify extensions in the VM when the VM is not running."
这是因为Terraform在关闭时无法访问/查看该Linux虚拟机的扩展。
从Azure门户也可以看到相同的行为。如果你关闭你的linux机器,你不能看到扩展,添加新的或卸载现有的。
要解决此问题,请启动虚拟机,然后再次运行销毁操作。
出现问题是因为VM是一般化的,这意味着它不能再被制作成特定的实例。因此我无法重新启动它。可以泛化一个VM,以便创建一个磁盘映像,该磁盘映像可以保存在Azure目标磁盘库中,从而允许从自定义映像进行部署。
我唯一能做的就是在Azure控制台中删除VM。那时:
terraform destroy -auto-approve
这将刷新我的本地Terraform状态到Azure的状态。