Terraform - 根据某些逻辑引用资源或数据源中的不同变量

问题描述

使用此代码,我计划拥有多个变量,例如“vms”。这些是 VM 和资源组的键/值映射,我在数据源查找 (backupvm) 上 for_each 以获取它们的 id。然后我可以使用 id 添加这些虚拟机作为 Vault 中的备份项目。

data "azurerm_virtual_machine" "backupvm" {
for_each             = var.vms
name                 = each.key
resource_group_name  = each.value
}

variable "vms" {
type    = map
default = {
#   "vm name"       = "resource group name"    
    "vaulttestvm1"  = "vaulttestrg"
    "vaulttestvm2"  = "vaulttestrg"
    "vaulttestvm4"  = "vaulttestrg" 
  }
}

resource "azurerm_resource_group" "rg" {
name        = var.rg_name
location    = var.location
}

resource "azurerm_recovery_services_vault" "vault" {
name                = var.vault_name
location            = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
sku                 = "Standard"

# change later
soft_delete_enabled = false
}

resource "azurerm_backup_protected_vm" "vms" {
for_each            = var.vms
recovery_vault_name = azurerm_recovery_services_vault.vault.name
resource_group_name = azurerm_recovery_services_vault.vault.resource_group_name
source_vm_id        = data.azurerm_virtual_machine.backupvm[each.key].id
backup_policy_id    = azurerm_backup_policy_vm.VMBackupPolicy.id
}

我需要一种在数据源和资源中引用 var.vms 的方法,这样我就可以将某些逻辑用于另一个映射类型变量。所以如果是 PowerShell,它会是这样的:

name = if ($env -eq "prod") { $var.vms } elseif ($env -eq "stage") { $var.vmsstage } elseif ($env -eq "dev") { $var.vmsdev }

我花了一天时间尝试不同的东西,但还没有真正接近。我可能会受到一些限制,因为我需要先使用数据源查找 vm id,然后循环遍历我的资源 (azurerm_backup_protected_vm) 放入该 ID。对此的解决方案将防止我不得不使用多个数据源和相同的资源类型。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)