如何获取Terraform资源属性的键名?
在Terraform中如何通过反射获取Secret的键名?
Terraform没有传统编程语言里的“反射”机制,但可以通过操作Secret的data映射本身来获取键名,而非针对单个键的值。
你之前的代码报错,是因为kubernetes_secret.my_secret.data.secret是单个敏感值,并非map或object类型——keys()函数要求输入必须是map/object,所以会抛出参数错误。
正确的做法是直接对data这个map对象调用keys():
- 如果你的Secret里只有一个键,直接取第一个元素即可拿到键名:
extraEnvs = [{ name = "BLAH_BLAH" valueFrom= { secretKeyRef= { name = kubernetes_secret.my_secret.id key = keys(kubernetes_secret.my_secret.data)[0] } } }]
- 如果Secret包含多个键,你可以根据需要筛选特定键,比如用
contains()判断后取值,或者直接指定索引。
另外你提到的“通过映射变量创建Secret并复用变量”确实是更稳妥的方案——比如提前在变量里定义键名,后续直接引用变量,避免依赖资源的动态属性。但如果必须从已存在的Secret资源中提取键名,上述keys()的用法完全可行。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

