Terraform首次apply路由表routes为空,二次apply才正常?
Terraform路由表输出首次为空的问题解决
问题出在你这段代码的嵌套for循环存在变量名遮蔽:外部循环遍历路由表的变量是rtable,内部遍历路由条目的循环也用了rtable当变量名,这会让Terraform首次执行时,内部变量覆盖了外部的路由表资源对象,导致无法正确读取路由数据。第二次执行时,资源已经写入状态文件,Terraform能直接从状态里拉取完整数据,所以输出正常。
修复后的代码
把内部循环的变量名换成不重复的名称,比如route_entry:
output_rtables = { for rtable in aws_route_table.rtable : rtable.id => { id = rtable.id name = rtable.tags["Name"] vpc = rtable.vpc_id routes = flatten([ for route_entry in rtable.route : { for key, value in route_entry : key => value if value != "" } ]) } }
补充说明
这种变量名遮蔽的问题不会触发Terraform语法错误,但会导致数据解析异常,出现首次执行输出不正确、后续执行恢复正常的诡异情况。修改后重新执行terraform apply,首次就能正确输出路由条目了。
内容的提问来源于stack exchange,提问作者Fransurbo
相关产品推荐
相关产品推荐

