如何将地图的块地图转换为 Terraform 中的变量
How do I turn a block Map of Maps into a variable in Terraform
我正在使用 terraform-aws-eks 模块来部署 EKS 集群。我希望得到一些帮助,将 node_groups map of maps 转换为变量,以便我可以针对不同的环境修改变量文件。这是地图中的地图:
node_groups = {
example = {
desired_capacity = 1
max_capacity = 10
min_capacity = 1
instance_types = ["m5.large"]
capacity_type = "ON_DEMAND"
k8s_labels = {
Environment = "test"
GithubRepo = "terraform-aws-eks"
GithubOrg = "terraform-aws-modules"
}
additional_tags = {
ExtraTag = "example"
}
}
}
我希望能够在 main.tf 中引用变量而不是映射,例如
node_groups = var.node_groups
我正在努力处理 variables.tf 中列表(对象)的各个级别。在此先感谢您的帮助。
我想您是在问什么 type constraint 适合接受这样的数据结构的变量。如果是这样,请尝试一下:
type = map(object({
desired_capacity = number
max_capacity = number
min_capacity = number
instance_types = set(string)
capacity_type = string
k8s_labels = map(string)
additional_tags = map(string)
}))
我在这里猜测了你的意图:
- 我将
instance_types
设置为一组字符串而不是字符串列表,因为实例类型通常没有有意义的排序,而集合是无序集合的合适数据结构。但是,如果确实打算使用实例类型的设置顺序,那么您可以将其更改为 list(string)
。
- 对于
k8s_labels
和 additional_tags
来说,这些似乎只是调用者选择的任意 key/value 对,而不是模块指定的特定数据结构,所以我限制了它们作为 map(string)
而不是作为涵盖您在示例中显示的确切属性名称的特定对象类型。如果您打算在 k8s_labels
中精确地要求 Environment
、GithubRepo
和 GithubOrg
属性,而不是由调用者决定,那么您可以将其更改为对象类型而不是地图类型。
我正在使用 terraform-aws-eks 模块来部署 EKS 集群。我希望得到一些帮助,将 node_groups map of maps 转换为变量,以便我可以针对不同的环境修改变量文件。这是地图中的地图:
node_groups = {
example = {
desired_capacity = 1
max_capacity = 10
min_capacity = 1
instance_types = ["m5.large"]
capacity_type = "ON_DEMAND"
k8s_labels = {
Environment = "test"
GithubRepo = "terraform-aws-eks"
GithubOrg = "terraform-aws-modules"
}
additional_tags = {
ExtraTag = "example"
}
}
}
我希望能够在 main.tf 中引用变量而不是映射,例如
node_groups = var.node_groups
我正在努力处理 variables.tf 中列表(对象)的各个级别。在此先感谢您的帮助。
我想您是在问什么 type constraint 适合接受这样的数据结构的变量。如果是这样,请尝试一下:
type = map(object({
desired_capacity = number
max_capacity = number
min_capacity = number
instance_types = set(string)
capacity_type = string
k8s_labels = map(string)
additional_tags = map(string)
}))
我在这里猜测了你的意图:
- 我将
instance_types
设置为一组字符串而不是字符串列表,因为实例类型通常没有有意义的排序,而集合是无序集合的合适数据结构。但是,如果确实打算使用实例类型的设置顺序,那么您可以将其更改为list(string)
。 - 对于
k8s_labels
和additional_tags
来说,这些似乎只是调用者选择的任意 key/value 对,而不是模块指定的特定数据结构,所以我限制了它们作为map(string)
而不是作为涵盖您在示例中显示的确切属性名称的特定对象类型。如果您打算在k8s_labels
中精确地要求Environment
、GithubRepo
和GithubOrg
属性,而不是由调用者决定,那么您可以将其更改为对象类型而不是地图类型。