在地形中使用for_each表达式循环映射变量



我有一个变量,我想在terraform中使用for_each来迭代它,以创建子模块node_groups的多个实例,它是eks模块的一部分。这是我的变量:

variable "frame_platform_eks_node_groups" {
type = map
default = {
eks_kube_system = {
desired_capacity = 1,
max_capacity     = 5,
min_capacity     = 1,
instance_type    = ["m5.large"],
k8s_label        = "eks_kube_system",
additional_tags  = "eks_kube_system_node"
},
eks_jenkins_build = {
desired_capacity = 1,
max_capacity     = 10,
min_capacity     = 1,
instance_type    = ["m5.large"],
k8s_label        = "eks_jenkins_build",
additional_tags  = "eks_jenkins_build_node"
}
}
}  

这是我的node_groups子模块,它是模块eks的一部分

module "eks" {
...
node_groups = {
for_each = var.frame_platform_eks_node_groups
each.key = {
desired_capacity = each.value.desired_capacity
max_capacity     = each.value.max_capacity
min_capacity     = each.value.min_capacity

instance_types = each.value.instance_type
k8s_labels = {
Name = each.value.k8s_label
}
additional_tags = {
ExtraTag = each.value.additional_tags
}
}

当我运行地形计划时,我得到以下错误:

15: each.key = {
If this expression is intended to be a reference, wrap it in parentheses. If
it’s instead intended as a literal name containing periods, wrap it in quotes
to create a string literal.

我的意图显然是从带有each.key引用的map变量中获取eks_kube_system和eks_jenkins_build值。但有些地方出了问题。你有没有建议我做错了什么?

谢谢!

node_groups是什么还不完全清楚,因为它在您的问题中没有定义,但假设它是一个地图列表,那么代码应该是:

module "eks" {
...
node_groups = [
for k,v in var.frame_platform_eks_node_groups:
{
desired_capacity = v.desired_capacity
max_capacity     = v.max_capacity
min_capacity     = v.min_capacity

instance_types = v.instance_type
k8s_labels = {
Name = v.k8s_label
}
additional_tags = {
ExtraTag = v.additional_tags
}
}
]

最新更新