这里我使用数据块来检索 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 只有在资源组中不退出时才会创建
我尝试使用以下代码检查现有资源
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"
}