Azure genera una dirección IP pública obsoleta

Azure genera una dirección IP pública obsoleta

Tengo un archivo Terraform llamado azure.tf que se supone que implementa una máquina virtual en Azure y luego SSH en dicha máquina para ejecutar un libro de estrategias de Ansible. El problema es que cada vez que ejecuto terraform apply, se utiliza la antigua dirección IP pública de la máquina virtual anterior.

Tengo un archivo llamado outputs.tf que genera esta dirección IP

output "public_ip_address" {
  value = data.azurerm_public_ip.my_terraform_public_ip.ip_address
}

Esta dirección IP de salida pero parece ser la antigua dirección IP del recurso ya destruido.

resource "azurerm_resource_group" "rg" {
  location = var.resource_group_location
  name     = "ikwilgraaagdatditwerkt"
}

# Create virtual network
resource "azurerm_virtual_network" "my_terraform_network" {
  name                = "myVnet"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
}

# Create subnet
resource "azurerm_subnet" "my_terraform_subnet" {
  name                 = "mySubnet"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.my_terraform_network.name
  address_prefixes     = ["10.0.1.0/24"]
}

# Create public IPs
resource "azurerm_public_ip" "my_terraform_public_ip" {
  name                = "testpublicIP"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  allocation_method   = "Dynamic"
}


# Create Network Security Group and rule
resource "azurerm_network_security_group" "my_terraform_nsg" {
  name                = "myNetworkSecurityGroup"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name

  security_rule {
    name                       = "SSH"
    priority                   = 1001
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "22"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
  }
}

# Create network interface
resource "azurerm_network_interface" "my_terraform_nic" {
  name                = "myNIC"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name

  ip_configuration {
    name                          = "my_nic_configuration"
    subnet_id                     = azurerm_subnet.my_terraform_subnet.id
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = azurerm_public_ip.my_terraform_public_ip.id
  }
}

# Connect the security group to the network interface
resource "azurerm_network_interface_security_group_association" "example" {
  network_interface_id      = azurerm_network_interface.my_terraform_nic.id
  network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id
}

resource "azurerm_virtual_machine" "my_terraform_vm" {
  name = "myVM"  #abstract away
  location              = azurerm_resource_group.rg.location
  resource_group_name   = azurerm_resource_group.rg.name
  network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
  vm_size = "Standard_DS1_v2" #abstract away


  delete_data_disks_on_termination = true

  delete_os_disk_on_termination = true

  storage_image_reference {
    publisher = "canonical"         #abstract away
    offer     = "0001-com-ubuntu-server-focal"    #abstract away
    sku       = "20_04-lts"       #abstract away
    version   = "latest"          #abstract away

  }
    storage_os_disk {
    name              = "vm1-osdisk"   #abstract away
    caching           = "ReadWrite"   #abstract away
    create_option     = "FromImage"   #abstract away
    managed_disk_type = "Standard_LRS"#abstract away
  }
  os_profile {
    computer_name  = "hostname"       #abstract away
    admin_username = "testadmin"      #abstract away
    admin_password = "Password1234!"  #abstract away
  }
  os_profile_linux_config {
    disable_password_authentication = false
  }
   provisioner "remote-exec" {
    inline = ["echo 'Wait until SSH is ready'"]

    connection {
      type        = "ssh"
      user        = "ubuntu"
      private_key =  file(local.private_key_path_Azure)
      host        = azurerm_public_ip.my_terraform_public_ip.ip_address
    }
  }
  provisioner "local-exec" {
    command = "ansible-playbook  -i ${azurerm_public_ip.my_terraform_public_ip.ip_address}, --private-key ${local.private_key_path_Azure} docker.yaml"
  }
}

Miré la NIC, la IP pública y la máquina virtual en el portal y a todos se les asignó la nueva dirección IP pública. Entonces, ¿por qué el ejecutable remoto usa el anterior?

Cualquier ayuda sería muy apreciada.

información relacionada