我需要帮助检查下面嵌套的条件,在我的生活中,我无法找到导致逻辑被破坏的语法错误。问题不在于逻辑本身,尽管我承认它有点混乱,但在语法中,我是如何将一个条件分支连接到另一个条件分支的
"(${length(regexall("(?i)READ$", "${trimspace(each.value.access_type)}" )) > 0 ?
"_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__R" : (
${length(regexall("(?i)READ_WRITE", "${trimspace(each.value.access_type)}" )) > 0
"_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__RW" : (
${length(regexall("(?i)READ_WRITE_CTRL", "${trimspace(each.value.access_type)}" )) > 0
"_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__RWC" : null))})"水流在地形洞期间立即停止,有以下错误:
此字符不在语言中使用。
引用的字符串不可能分割成多行。要生成多行字符串,可以使用\n转义来表示换行符,也可以使用"heredoc“多行模板语法。
期望表达式的开始,但发现一个无效的表达式令牌。
下面是一个不使用嵌套条件的功能版本:
"${length(regexall("(?i)READ$", "${trimspace(each.value.access_type)}" )) > 0 ?
"_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__R" :
"TEST"}"发布于 2022-11-13 16:52:09
语法非常不正确,我在下面通过插入缺失的元素对其进行了更正,为此,我对缩进进行了改进,因为您可以看到,查找缺少的内容要简单得多:
"(${
length(regexall("(?i)READ$", "${trimspace(each.value.access_type)}" )) > 0
? "_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__R"
: "(${
length(regexall("(?i)READ_WRITE", "${trimspace(each.value.access_type)}" )) > 0
? "_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__RW"
: "(${
length(regexall("(?i)READ_WRITE_CTRL", "${trimspace(each.value.access_type)}" )) > 0
? "_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__RWC"
: null
})"
})"
})"

正如你所看到的,这是一件令我好奇的事情,我想知道它是否仍然不起作用。
发布于 2022-11-14 20:16:27
我意识到这并不是直接回答您的问题,但下面是使用查找表和单个正则表达式查找来表示此映射规则的另一种可能的方法,您可能会发现维护起来更容易:
locals {
access_type_suffixes = tomap({
"READ" = "R"
"READ_WRITE" = "RW"
"READ_WRITE_CTRL" = "RWC"
})
access_rule_types = tomap({
for k, v in WHATEVER_YOUR_FOR_EACH_CURRENTLY_REFERS_TO :
k => regex("(?i)(?:READ(?:_WRITE(?:_CTRL)?)?)?", v.access_type)
})
}
resource "example" "example" {
for_each = WHATEVER_YOUR_FOR_EACH_CURRENTLY_REFERS_TO
this_thing = "_AR_${substr("${split(",", trimspace(each.value.parameter_names))[0]}", 9, -1)}__${substr("${split(",", trimspace(each.value.parameter_names))[1]}", 7, -1)}__${local.access_rule_suffixes[local.access_rule_types[each.key]]}"
}这里的想法是使用一个regex模式来匹配每个访问类型中READ_WRITE_CTRL字符串最长的有效前缀,并将它们收集到local.access_rule_types中的一个映射中。然后,另一个本地值local.access_type_suffixes充当从长名称到短后缀的映射表,因此您只需要写出这个复杂的字符串模板表达式一次,并引用这两个映射的适当元素。
https://stackoverflow.com/questions/74422737
复制相似问题