微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。