问题描述
想要对传入的映射进行清理,使其符合以下格式,并将其放在locals部分中:
cidrs_sanitized = {
A = [1.1.1.1]
B = [2.2.2.2, 3.3.3.3]
Group1 = [4.4.4.4, 5.5.5.5]
C = [4.4.4.4]
D = [5.5.5.5]
}
用户尝试了各种循环的方法,但是都没有成功。他尝试了将每组值作为单独的变量并将它们合并在一起的方法,但是合并总是失败,因为输出是元组,他无法找到如何让terraform显示locals grouped、groups和single的值。
用户希望得到一些帮助或指导,谢谢。
解决方案
根据Terraform的文档,一个映射是一组键/值对的集合,有一个约束条件:“…只要每个元素都是相同类型的元素”。
所以你声明的输入映射已经是一个无效的映射,至少对于Terraform 0.12来说是这样的。
以下是产生的错误示例:
variable "cidrs" {
description = ""
type = map
default = [
["1.1.1.1"],
["2.2.2.2", "3.3.3.3"],
{
C = ["4.4.4.4"]
D = ["5.5.5.5"]
}
]
}
在验证时会引发错误:
$> terraform validate
Error: Invalid default value for variable on vars.tf line 65, in variable "cidrs":
65: default = [
66: ["1.1.1.1"],
67: ["2.2.2.2", "3.3.3.3"],
68: {
69: C = ["4.4.4.4"]
70: D = ["5.5.5.5"]
71: }]
This default value is not compatible with the variable's type constraint: map of any single type required.
鉴于这一点,如果我们可以将A和B泛化为“值为列表”的值,将Group1泛化为“值为映射”的值,并且输入是一个固定类型的有序输入,我们可以使用元组或对象来更可读(和可维护)地解决这个问题。如果是这样,请告诉我们,我们可以扩展这个答案。
正文完