我觉得这真的很简单也很明显,但对于我的生活来说,我不知道应该如何接近它。
我有一个我希望构建的环境列表 [“env1”,“env2”...],然后我有一个指定用于特定环境的值的映射。
"wanted_envs": ["env1", "env2"]
"envs": {
"env1": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env1"
},
"env2": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env2"
},
"env3": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env3"
},
......
我只需要创建一个局部变量,其中包含从 中的地图复制的我希望构建的环境的详细信息(在我的字符串列表中列出)envs
。
在我的本地定义中,我尝试了各种形式的 for_each ,认为我可以从所需环境列表中获取值,但我无法完全弄清楚它,而不会因为使用 terraform 做“错误”的事情而出现错误。
我最终会得到一个地图,其中仅包含 中列出的环境值wanted_envs
。
就像这样:
"envs_to_build": {
"env1": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env1"
},
"env2": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env2"
}
}
使用for 表达式可以得到你需要的东西。考虑以下简短的示例。
这会产生以下输出:
如果您想维护密钥,就像在编辑中一样,可以这样做:
产生: