Terraform多行文heredoc行尾符随运行环境变更的问题如何解决?
解决方案
方案1:统一移除所有回车符(适用所有文本场景)
直接用Terraform内置的replace函数过滤掉heredoc内容中的所有\r字符,强制统一行尾为\n,不受运行环境和Git行尾转换逻辑影响。
修改后的资源示例如下:
resource "azurerm_key_vault_secret" "env_secrets" { name = "my-secret" key_vault_id = var.key_vault_id value = replace(<<-EOT { "ADMIN_USER": "admin", "ADMIN_PASSWORD": "some_secret", } EOT , "\r", "") content_type = "application/x-json" }
该方法为通用解法,不管是JSON、配置文件还是其他纯文本内容都可以使用。如果是读取外部文件的场景,也可以用同样的逻辑处理:replace(file("./config.txt"), "\r", "")。
方案2:使用jsonencode构造JSON内容(当前场景最优)
你当前存储的内容是标准JSON结构,完全可以不用手写heredoc,改用Terraform内置的jsonencode函数直接从Terraform对象生成标准JSON,从根源上避免手写文本带来的行尾符、语法错误等问题:
resource "azurerm_key_vault_secret" "env_secrets" { name = "my-secret" key_vault_id = var.key_vault_id value = jsonencode({ ADMIN_USER = "admin" ADMIN_PASSWORD = "some_secret" }) content_type = "application/x-json" }
该方案的额外优势是支持直接插入Terraform变量、自动处理转义字符,不需要手动维护JSON语法。
内容的提问来源于stack exchange,提问作者Ilya Chernomordik
相关产品推荐
相关产品推荐

