gpt4 book ai didi

Terraform 'case statement' - 一堆有条件的替换

转载 作者:行者123 更新时间:2023-12-05 04:41:18 26 4
gpt4 key购买 nike

我可能完全错误地处理这个问题,但这是我目前可以理解的唯一方法,无需重新编写大量依赖于相同数据结构的其他代码...

我们有一些 json 指定了一些 IP 地址,我们希望将其替换为某些防火墙规则,具体取决于我们部署的环境版本。

    "customer_ranges": {
"prod": {
"customer_cidr": "192.168.0.0/24"
},
"test": {
"customer_cidr": "192.168.1.0/24"
}
},

基本上,遍历每个环境,我们检查规则是否是为这个环境构建的,如果是,那么我们需要在 ip 范围内替换,找到字符串“#Env_customer_cidr”。发生这种情况的地方之一是在 source_ranges_names 变量中:

我目前拥有的代码(不起作用)基于我想象的用 terraform 条件语句编写的 case 语句:

source_ranges = distinct(flatten([for source in [for source in v.source_ranges_names : source == "#Env" ? replace(source, "#Env", env) : (source == "#Env_customer_cidr" && env == "prod" ? "${var.customer_ranges["prod"]["customer_cidr"]}" : ( source == "#Env_customer_cidr" && env == "test" : "${var.customer_ranges["test"]["customer_cidr"]}" : local.defined_ranges[source] )) ]]))

我希望逻辑非常明显,如果找到正确的字符串,这取决于我们在正确的 IP 范围内替换的 env 值。最后,如果两个标签都不匹配,它应该返回未经编辑的源代码。然而,我经常遇到条件运算符需要错误条件的问题,但从我的代码来看,我认为它总是提供,或者右括号的数量错误?

经过一些编辑,我现在只有一个错误:

  source_ranges = distinct(flatten([for source in [for source in v.source_ranges_names :
source == "#Env" ? replace(source, "#Env", env) :
(source == "#Env_customer_cidr" && env == "prod" ? "${var.customer_ranges["prod"]["customer_cidr"]}" :
( source == "#Env_customer_cidr" && env == "test" ? "${var.customer_ranges["test"]["customer_cidr"]}" :
local.defined_ranges[source] ))]]))


│ Error: Unbalanced parentheses

│ on main.tf line 25, in locals:
│ 25: source_ranges = distinct(flatten([for source in [for source in v.source_ranges_names : source == "#Env" ? replace(source, "#Env", env) : (source == "#Env_customer_cidr" && env == "prod" ? "${var.customer_ranges["prod"]["customer_cidr"]}" : ( source == "#Env_customer_cidr" && env == "test" : "${var.customer_ranges["test"]["customer_cidr"]}" : local.defined_ranges[source] )) ]]))

│ Expected a closing parenthesis to terminate the expression.

最佳答案

除了额外的 ],您的条件不正确。一般形式为:

condition ? true_val : false_val

不是

condition : true_val : false_val

所以应该是:

source == "#Env_customer_cidr" && env == "test" ? "${var.customer_ranges["test"]["customer_cidr"]}" : local.defined_ranges[source]

关于Terraform 'case statement' - 一堆有条件的替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70109127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com