Больше не удается создавать / уничтожать виртуальные машины Azure (OSProvisioningInternalError) - PullRequest
0 голосов
/ 03 июля 2019

Я использую Jenkins для запуска своих скриптов terraform.Он работал нормально в течение нескольких дней, но после уничтожения и (повторного) создания моей виртуальной машины несколько раз, он больше не работает.При создании я получаю:

* azurerm_virtual_machine.windows: Code="OSProvisioningInternalError" Message="OS Provisioning failed for VM 'e2r2s08ibld0001' due to an internal error."

Удаление также не работает:

* azurerm_network_interface.windows: Error deleting Network Interface "e2r2s08ibld0001-nic" (Resource Group "Buildslaves_rg"): network.InterfacesClient#Delete: Failure sending request: StatusCode=400 -- Original Error: Code="NicInUse" Message="Network Interface /subscriptions/****/resourceGroups/Buildslaves_rg/providers/Microsoft.Network/networkInterfaces/e2r2s08ibld0001-nic is used by existing resource /subscriptions/****/resourceGroups/Buildslaves_rg/providers/Microsoft.Compute/virtualMachines/e2r2s08ibld0001. In order to delete the network interface, it must be dissociated from the resource. To learn more, see aka.ms/deletenic." Details=[]

ОК, он говорит: «используется», но я ожидал, что terraform удалит все ресурсы в правильномпорядок?Я могу успешно удалить свои ресурсы с помощью Azure Portel.

Но затем снова возникает та же ошибка, когда я пытаюсь (заново) создать виртуальную машину с помощью terraform.

Я также пытался удалить свой файл tfstate, но ошибка остается той же.

Вот соответствующая часть моего main.tf:

resource "azurerm_network_interface" "windows" {
  name                          = "${var.vm_windows["name"]}-nic"
  location                      = "${azurerm_resource_group.main.location}"
  resource_group_name           = "${azurerm_resource_group.main.name}"
#  network_security_group_id     = "${azurerm_network_security_group.main.id}"
  tags                          = "${var.tags}"
  enable_accelerated_networking = true

  ip_configuration {
    name                          = "ipconfig1"
    subnet_id                     = "${data.azurerm_subnet.main.id}"
    private_ip_address_allocation = "Dynamic"
#    private_ip_address            = "${var.vm_windows["private_ip_address"]}"
  }
}

resource "azurerm_virtual_machine" "windows" {
  name                  = "${var.vm_windows["name"]}"
  location              = "${azurerm_resource_group.main.location}"
  resource_group_name   = "${azurerm_resource_group.main.name}"
  network_interface_ids = ["${azurerm_network_interface.windows.id}"]
  vm_size               = "${var.vm_windows["size"]}"
  tags     = "${var.tags}"

  # This means the OS Disk will be deleted when Terraform destroys the Virtual Machine
  # NOTE: This may not be optimal in all cases.
  delete_os_disk_on_termination = true
  delete_data_disks_on_termination = true

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2019-Datacenter"
    version   = "latest"
  }

  storage_os_disk {
    name              = "${var.vm_windows["name"]}-os"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "${var.vm_windows["disk_os_type"]}"
  }

  storage_data_disk {
    name              = "${var.vm_windows["name"]}-data"
    caching           = "ReadOnly"
    create_option     = "Empty"
    disk_size_gb      = "${var.vm_windows["disk_data_size"]}"
    lun               = 0
    managed_disk_type = "${var.vm_windows["disk_data_type"]}"
  }

  os_profile {
    computer_name  = "${var.vm_windows["name"]}"
    admin_username = "${var.vm_admin_username}"
    admin_password = "${var.vm_admin_password}"
#    custom_data    = "${local.custom_data_content}"
  }

  os_profile_windows_config {
    provision_vm_agent        = true
    enable_automatic_upgrades = true

    # Auto-Login's required to configure WinRM
    additional_unattend_config {
      pass         = "oobeSystem"
      component    = "Microsoft-Windows-Shell-Setup"
      setting_name = "AutoLogon"
      content      = "<AutoLogon><Password><Value>${var.vm_admin_password}</Value></Password><Enabled>true</Enabled><LogonCount>1</LogonCount><Username>${var.vm_admin_username}</Username></AutoLogon>"
    }

    # See https://github.com/terraform-providers/terraform-provider-azurerm/tree/master/examples/virtual-machines/provisioners/windows
    additional_unattend_config {
      pass         = "oobeSystem"
      component    = "Microsoft-Windows-Shell-Setup"
      setting_name = "FirstLogonCommands"
      content      = "${file("./files/FirstLogonCommands.xml")}"
    }
  }
}

1 Ответ

0 голосов
/ 04 июля 2019

Я только что нашел свою ошибку: В моем FirstLogonCommands.xml было две записи с одинаковым номером Order (проблема копирования и вставки).

После исправления все работает как положено!

...