У меня есть модуль, который принимает следующую переменную
variable "policy" {
description = "The policy to be created"
type = map(list(object({
path = string
capabilities = list(string)
})))
}
Затем я вызываю вышеуказанный модуль из другого
module "policies" {
source = "../path/to/module/above"
for_each = var.policies.policies
policy = each.value
}
Где var.policies
объявлено в terragrunt.hcl
locals {
policies = yamldecode(file("config.yaml"))
}
inputs = {
policies = local.policies
}
и config.yaml
policies:
policy-test-1:
- capabilities:
- read
- create
path: /foo/lala
- capabilities:
- read
- create
path: /bar/lala
policy-test-2:
- capabilities:
- update
- delete
path: /foo/lala
Это не удается:
╷
│ Error: Invalid value for input variable
│
│ on main.tf line 38, in module "policies":
│ 38: policy = each.value
│
│ The given value is not suitable for
│ module.policies["policy-test-2"].var.policy declared at
│ ../path/to/module/above/variables.tf:5,1-18: map of
│ list of object required.
╵
╷
│ Error: Invalid value for input variable
│
│ on main.tf line 38, in module "policies":
│ 38: policy = each.value
│
│ The given value is not suitable for
│ module.policies["policy-test-1"].var.policy declared at
│ ../path/to/module/above/variables.tf:5,1-18: map of
│ list of object required.
Почему each
var.policies.policies
нет карты списка объектов? Не должен быть
policy-test-1 : {
[
{
capabilities = ["create", "read"]
path = "/foo/lala"
},
{
capabilities = ["create", "read"]
path = "/bar/lala"
}
]
}
который представляет собой карту (с ключом policy-test-1
) списка объектов, каждый объект в списке имеет
{
path = string
capabilities = list(string)
}
тип?
такая же ошибка на выходе
попробуй: policy = { capabilities = each.value.capabilities path = each.value.path }
Правильный тип для вашего policy
— это список, а не карта, потому что ваш each.value
будет list
:
variable "policy" {
description = "The policy to be created"
type = list(object({
path = string
capabilities = list(string)
}))
}
Кажется, это не работает: │ The given value is not suitable for module.policies.var.policy declared at │ ../path/to/module/above/variables.tf:5,1-18 list of │ object required.
@pkaramol Это означает, что ваш реальный код отличается от того, что вы разместили в вопросе, потому что мои ответы касаются проблемы, о которой вы сообщили, на основе приведенных вами примеров и кода.
вы правы, я внес изменения в то же время (я отменил его, и теперь он работает), извините за это
не могли бы вы попробовать
policy = {each.key)
иpolicy = each.key
в интерфейсе вашего модуля вместоpolicy=each.value