Версия TF 1.0.11, я пытаюсь объединить список переменных карты, db_cluster_parameter_group_params создается в locals.tf, db_cluster_parameter_group_parameters пуст. Я хочу объединить эти 2, но выдает ошибку.
В locals.tf:
db_cluster_parameter_group_params = [
{name = "autovacuum_vacuum_cost_delay", value = "20"},
{name = "max_wal_senders", value = "15", apply_method = "pending-reboot"}
]
В tfvar.tf:
variable "db_cluster_parameter_group_parameters" {
description = "A list of DB cluster parameters to apply. Note that parameters may differ from a family to an other"
type = list(map(string))
default = []
}
db_cluster_parameter_group_parameters = [
{name = "vacuum_cost_limit", value = "1000"},
{name = "rds.logical_replication", value = "1", apply_method = "pending-reboot"}
]
Ищите db_final_cluster_parameter_group_parameters следующим образом:
db_final_cluster_parameter_group_parameters = [
{name = "autovacuum_vacuum_cost_delay", value = "20"},
{name = "max_wal_senders", value = "15", apply_method = "pending-reboot"},
{name = "vacuum_cost_limit", value = "1000"},
{name = "rds.logical_replication", value = "1", apply_method = "pending-reboot"}
]
В модуле я пытаюсь использовать слияние для достижения желаемых результатов:
db_final_cluster_parameter_group_parameters = merge(local.db_cluster_parameter_group_params,var.db_cluster_parameter_group_parameters)
-- while running apply
│ on ../../main.tf line 123, in module "rds-aurora-postgresql":
│ 123: db_cluster_parameter_group_parameters = merge(var.db_cluster_parameter_group_params,var.db_cluster_parameter_group_parameters)
│ ├────────────────
│ │ local.db_cluster_parameter_group_params is list of map of string with 2 elements
│ │ var.db_cluster_parameter_group_parameters is a list of map of string, known only after apply
обновил сообщение с ожидаемыми результатами, пожалуйста, проверьте





Вместо слияния вы должны использовать concat:
locals {
db_cluster_parameter_group_params = [
{ name = "autovacuum_vacuum_cost_delay", value = "20" },
{ name = "max_wal_senders", value = "15", apply_method = "pending-reboot" }
]
db_cluster_parameter_group_parameters = [
{ name = "vacuum_cost_limit", value = "1000" },
{ name = "rds.logical_replication", value = "1", apply_method = "pending-reboot" }
]
db_final_cluster_parameter_group_parameters = concat(local.db_cluster_parameter_group_params, local.db_cluster_parameter_group_parameters)
}
output "db_final_cluster_parameter_group_parameters_output" {
value = local.db_final_cluster_parameter_group_parameters
}
db_final_cluster_parameter_group_parameters_output = [
{
"name" = "autovacuum_vacuum_cost_delay"
"value" = "20"
},
{
"apply_method" = "pending-reboot"
"name" = "max_wal_senders"
"value" = "15"
},
{
"name" = "vacuum_cost_limit"
"value" = "1000"
},
{
"apply_method" = "pending-reboot"
"name" = "rds.logical_replication"
"value" = "1"
},
]
Можете ли вы показать пример точного результата, который вы хотите произвести? Я не уверен, что именно вы подразумеваете под «объединить список карт»; функция
mergeпредназначена только для создания одной карты, и я не думаю, что это то, что вам здесь нужно, потому что все показанные вами входные карты имеют одни и те же ключи.