问题描述
使用此代码,我计划拥有多个变量,例如“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 (将#修改为@)