Terraform GCP可用性检查Heredoc字符串误报变更求助
解决Terraform中GCP可用性检查content_matchers误报变更的问题
这个问题本质是Heredoc字符串的格式(缩进、换行、空格)和GCP API存储的字符串存在细微差异,Terraform的状态比对机制因此判定为需要变更。以下是可行的解决方法:
方法1:用字符串处理函数清理Heredoc格式
在Heredoc外层包裹trimspace()和chomp(),自动去掉多余的缩进、首尾空白和末尾换行:
content_matchers { content = trimspace(chomp(<<EOT 你的匹配内容 这里的缩进会被trimspace清理 EOT )) }
chomp():移除字符串末尾的换行符trimspace():清除字符串首尾的空白字符,同时将中间连续的空白(包括缩进)替换为单个空格(若需保留多行格式,可单独使用chomp())
方法2:直接使用格式明确的字符串
如果匹配内容较短,直接写单行字符串最稳妥:
content_matchers { content = "预期匹配的内容文本" }
若必须用多行,手动控制换行,避免代码缩进影响字符串格式:
content_matchers { content = "第一行内容\n第二行内容" }
方法3:对齐状态文件中的实际值
执行terraform state show google_compute_health_check.your_check_name,查看content_matchers.0.content的实际存储值,然后在代码中完全对齐这个格式——比如状态里的字符串无换行,代码就不要加换行;状态里是无缩进多行,代码就用无缩进的Heredoc。
补充:为什么<<-EOT没用?
<<-EOT仅会移除Heredoc结束标记左侧的制表符(Tab),不会处理内容里的空格缩进,也不会去掉末尾换行符。如果你的代码用的是空格缩进,这个语法自然起不到效果。
内容的提问来源于stack exchange,提问作者saturn-thmx
相关产品推荐
相关产品推荐

