Terraform含插值的base64encode语法修正及值变更问题咨询
解决Terraform插值表达式弃用警告并避免值变更的正确语法
修正后的完整配置
resource "kubernetes_secret" "flux-infra-gcr-credentials" { metadata { name = "flux-infra-gcr-credentials" namespace = "flux-system" } data = { ".dockerconfigjson" = jsonencode({ auths = { "https://europe-west2-docker.pkg.dev" = { auth = base64encode("_json_key:" + google_secret_manager_secret_version.flux-infra-gcr-credentials-v1.secret_data) } } }) } }
关键修正点说明
- 移除外层不必要的插值包裹:原代码中
"${base64encode(...)}"的写法是Terraform 0.12之前的旧语法,0.12+支持直接将函数调用作为表达式赋值,无需用"${}"包裹。 - 替换内部字符串插值为原生拼接:原代码里的
"_json_key:${google_secret_manager_secret_version.flux-infra-gcr-credentials-v1.secret_data}"改用"_json_key:" + 资源引用的方式拼接字符串,这是Terraform 0.12+的标准写法,能保证计算结果和旧语法完全一致,不会触发terraform plan的不必要值变更。 - 这样修改既符合tflint的规范要求,又能保留原有配置的实际效果,避免意外变更。
内容的提问来源于stack exchange,提问作者sc-leeds
相关产品推荐
相关产品推荐

