Terraform 实例枚举
Terraform Instance enumeration
我正在尝试将枚举的 VM 实例注册到 Azure 备份服务。但是,我收到一个错误:
* azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
这是我在 Azure 中创建 VM 实例的代码片段:
###############################################################################
# Deploy VMs and Configure Consul and Vault Services
###############################################################################
resource "azurerm_virtual_machine" "consul" {
name = "consul${count.index + 1}"
#name = "${var.consul_cluster_prefix}-consul-${count.index + 1}"
location = "${var.deployment_location}"
resource_group_name = "${var.resource_group_name}"
availability_set_id = "${azurerm_availability_set.consul.id}"
network_interface_ids = ["${element(azurerm_network_interface.consul_nic.*.id, count.index + 1)}"]
vm_size = "${var.consul_vm_size}"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
count = "${var.consul_instance_count}"
tags {
ownerinfo = "${var.ownerinfo}"
costcenter = "${var.costcenter}"
deploymenttype = "${var.deploymenttype}"
notificationdistlist = "${var.notificationdistlist}"
env_info = "${var.environmentinfo}"
application_name = "${var.applicationname}"
platform = "${var.platform}"
}
storage_image_reference {
id ="${var.consul_image_id}"
}
...
稍后,在创建备份集时,我试图引用枚举的 VM 实例:
##########################################################################################
# AzureRM Virtual Machine Into Azure Recovery Services Vault
##########################################################################################
resource "azurerm_recovery_services_vault" "backup2vault" {
name = "azurerecoveryvaulti1"
location = "${var.deployment_location}"
resource_group_name = "${var.resource_group_name}"
sku = "Standard"
}
resource "azurerm_recovery_services_protection_policy_vm" "consul_daily" {
name = "azurerecoveryvaultpolicy1"
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
backup = {
frequency = "Daily"
time = "23:00"
}
retention_daily = {
count = 1
}
}
resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
source_vm_id = "${azurerm_virtual_machine.consul.*.id}"
backup_policy_id = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}
问题似乎出在变量 source_vm_id
引用枚举实例的方式上:
source_vm_id = "${azurerm_virtual_machine.consul.*.id}"
...导致错误:
azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
问题是,在我的案例中如何引用枚举实例?
非常感谢任何反馈。
A.
您需要将 azurerm_recovery_services_protected_vm.consul_and_vault
资源枚举到与 azurerm_virtual_machine.consul
资源相同的长度。然后,您可以将每个 azurerm_virtual_machine.consul.id
引用为 count.index
中与 azurerm_virtual_machine.consul
相同元素编号的元素。它看起来像:
resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
count = "${var.consul_instance_count}"
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
source_vm_id = "${azurerm_virtual_machine.consul.*.id[count.index]}"
backup_policy_id = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}
另请注意,azurerm_virtual_machine.consul.*.id
语法将 id
作为列表输出。
我正在尝试将枚举的 VM 实例注册到 Azure 备份服务。但是,我收到一个错误:
* azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
这是我在 Azure 中创建 VM 实例的代码片段:
###############################################################################
# Deploy VMs and Configure Consul and Vault Services
###############################################################################
resource "azurerm_virtual_machine" "consul" {
name = "consul${count.index + 1}"
#name = "${var.consul_cluster_prefix}-consul-${count.index + 1}"
location = "${var.deployment_location}"
resource_group_name = "${var.resource_group_name}"
availability_set_id = "${azurerm_availability_set.consul.id}"
network_interface_ids = ["${element(azurerm_network_interface.consul_nic.*.id, count.index + 1)}"]
vm_size = "${var.consul_vm_size}"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
count = "${var.consul_instance_count}"
tags {
ownerinfo = "${var.ownerinfo}"
costcenter = "${var.costcenter}"
deploymenttype = "${var.deploymenttype}"
notificationdistlist = "${var.notificationdistlist}"
env_info = "${var.environmentinfo}"
application_name = "${var.applicationname}"
platform = "${var.platform}"
}
storage_image_reference {
id ="${var.consul_image_id}"
}
...
稍后,在创建备份集时,我试图引用枚举的 VM 实例:
##########################################################################################
# AzureRM Virtual Machine Into Azure Recovery Services Vault
##########################################################################################
resource "azurerm_recovery_services_vault" "backup2vault" {
name = "azurerecoveryvaulti1"
location = "${var.deployment_location}"
resource_group_name = "${var.resource_group_name}"
sku = "Standard"
}
resource "azurerm_recovery_services_protection_policy_vm" "consul_daily" {
name = "azurerecoveryvaultpolicy1"
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
backup = {
frequency = "Daily"
time = "23:00"
}
retention_daily = {
count = 1
}
}
resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
source_vm_id = "${azurerm_virtual_machine.consul.*.id}"
backup_policy_id = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}
问题似乎出在变量 source_vm_id
引用枚举实例的方式上:
source_vm_id = "${azurerm_virtual_machine.consul.*.id}"
...导致错误:
azurerm_recovery_services_protected_vm.consul_and_vault: source_vm_id must be a single value, not a list
问题是,在我的案例中如何引用枚举实例?
非常感谢任何反馈。
A.
您需要将 azurerm_recovery_services_protected_vm.consul_and_vault
资源枚举到与 azurerm_virtual_machine.consul
资源相同的长度。然后,您可以将每个 azurerm_virtual_machine.consul.id
引用为 count.index
中与 azurerm_virtual_machine.consul
相同元素编号的元素。它看起来像:
resource "azurerm_recovery_services_protected_vm" "consul_and_vault" {
count = "${var.consul_instance_count}"
resource_group_name = "${var.resource_group_name}"
recovery_vault_name = "${azurerm_recovery_services_vault.backup2vault.name}"
source_vm_id = "${azurerm_virtual_machine.consul.*.id[count.index]}"
backup_policy_id = "${azurerm_recovery_services_protection_policy_vm.consul_daily.id}"
}
另请注意,azurerm_virtual_machine.consul.*.id
语法将 id
作为列表输出。