Вы указали, что ограничение типа атрибута data
равно object({})
, что является типом объекта вообще без атрибутов. Ограничения типа объекта требуют, чтобы по крайней мере присутствовали для заданных атрибутов, но поскольку вы не указали никаких атрибутов, это ограничение будет соответствовать любому значению объекта, но оно также отбросит все его атрибуты во время преобразование типа, потому что ни одно из них не указано в ограничении типа.
Такое поведение для полностью пустого типа объекта, конечно, немного странно. Это естественное, но, возможно, неудобное следствие правила, которое позволяет объявлять ограничение типа объекта, которое является подмножеством типа объекта, определенного типом ресурса провайдера, чтобы позволить вызывающим абонентам удобнее передавать весь ресурс без необходимости выписывать все атрибуты, которые на самом деле не нужны или не нужны модулю:
variable "aws_vpc" {
type = object({
id = string
cidr_block = string
# aws_vpc's object type has many other attributes,
# but this module only needs the two above so it
# will accept and silently discard all of the
# others. Caller can therefore do this:
# aws_vpc = aws_vpc.example
})
}
Атрибут data
kubernetes_config_map
определяется с помощью ограничения типа map(string)
, поэтому я думаю, что лучший способ получить результат, который вы искали здесь, заключается в том, чтобы повторить то же ограничение типа в вашей переменной, например:
variable "extra_configmaps" {
type = list(object({
name = string
namespace = string
data = map(string)
}))
default = []
}
Более подробная информация о правилах преобразования типов Terraform приведена в Преобразование сложных типов , которая является частью документации по Type Constraints .