在检查其存在后无法在指定资源组中创建新的 VNet

问题描述 投票:0回答:1

这里我使用数据块来检索 Vnet 的信息(如果它已经存在)。如果 VNet 不存在,则创建一个同名的新 VNet。我已经正确定义了一切。

data "azurerm_virtual_network" "existing_vnet" {
  name                = var.vnet_name
  resource_group_name = data.azurerm_resource_group.existing_rg.name
}

locals {
  vnet_exists = length(data.azurerm_virtual_network.existing_vnet) > 0
}

resource "azurerm_virtual_network" "my_vnet" {
  count = local.vnet_exists ? 0 : 1

  name                = var.vnet_name
  address_space       = var.address_space
  location            = data.azurerm_resource_group.existing_rg.location
  resource_group_name = data.azurerm_resource_group.existing_rg.name
}

但是在运行

terraform apply
之后它显示了一个错误:

Error: Error: Virtual Network: (Name "axis_VN" / Resource Group "training") was not found
│ 
│   with data.azurerm_virtual_network.existing_vnet,
│   on main.tf line 24, in data "azurerm_virtual_network" "existing_vnet":
│   24: data "azurerm_virtual_network" "existing_vnet" {

任何人都可以帮助我吗?

我原以为 VNet 只有在资源组中不退出时才会创建

azure conditional-statements devops azure-virtual-network vnet
1个回答
0
投票

我尝试使用以下代码检查现有资源

data "azurerm_virtual_network" "existing_vnet" {
  name                = "myVnet"
  resource_group_name = data.azurerm_resource_group.example.name
}

locals {
  vnet_exists = length(data.azurerm_virtual_network.existing_vnet) > 0
}

output "vnetcout" {
  value = local.vnet_exists
}

如果资源不存在,它会给出错误“找不到资源”。

对于这个外部数据源可以使用:external_external |数据来源 |哈希公司/外部 | Terraform Registry 因为 Terraform 不检查预先存在的资源。

这里几乎可以使用任何编程语言。 一个这样的例子,如果它不存在,我试图创建它。

data "external" "vm_exists" {
      program = ["Powershell.exe", "C:\\Users\\v-sakavya\\checkexistence.ps1"]
    }

 output "vmexistsornot" {
      value = "${data.external.vm_exists.result.value}"
    }

Powershell代码: Checkexistence.ps1

$rgName = "myrg"
    $vmName = "excpectedm"
    $vmExists = Get-AzVM -Name $vmName -ResourceGroupName $rgName -ErrorAction SilentlyContinue  
   # $vmexistsmsg="VM exists"
   # $vmnotexistsmsg="VM does not exist"
    if (!$vmExists) {
    Write-Output '{"value" :  "true" }'   
    } else {
    Write-Output '{"value" :  "false" }'
      
    }

最初只检查不存在:它必须返回 true。

然后如果 Vm 不存在,它将被创建。

resource "azurerm_network_interface" "example" {
  name                = "kaexample-nic"
 location            = data.azurerm_resource_group.example.location
  resource_group_name = data.azurerm_resource_group.example.name
  ip_configuration {
    name                          = "example-ip-config"
    subnet_id                     = azurerm_subnet.example.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_virtual_network" "example" {
  name                = "kaexample-virtual-network"
  address_space       = ["10.0.0.0/16"]
  location            = data.azurerm_resource_group.example.location
  resource_group_name = data.azurerm_resource_group.example.name
}

resource "azurerm_subnet" "example" {
  name                 = "kkexample-subnet"
  address_prefixes     = ["10.0.0.0/24"]
  virtual_network_name = azurerm_virtual_network.example.name
  resource_group_name  = data.azurerm_resource_group.example.name
}


resource "azurerm_virtual_machine" "new_vm" {
  count = data.external.vm_exists.result.value == "true" ? 1 : 0

  name                = var.vm_name
  resource_group_name = var.resource_group_name
  location            = "eastus"
   vm_size               = "Standard_D4as_v5"
   network_interface_ids =  [azurerm_network_interface.example.id]

  

  storage_os_disk {
    name               = "my_os_storage_disk"
    caching            = "ReadWrite"
    create_option      = "FromImage"
    managed_disk_type  = "Standard_LRS"
  }

  os_profile {
    computer_name  = "myvm"
    admin_username = "azureuser"
    admin_password = "MyComplexPassword"
  }

  os_profile_windows_config {
  }

  # other configuration settings...


}

resource "azurerm_virtual_machine" "new_vm" {
  count = data.external.vm_exists.result.value == true ? 0 : 1
  name                = var.vm_name
  resource_group_name = var.resource_group_name
  location            = "eastus"
}

© www.soinside.com 2019 - 2024. All rights reserved.