Terraform创建Kubernetes Secret生成YAML格式错误排查
问题原因
核心错误是嵌套调用了yamlencode函数。yamlencode的作用是将Terraform原生的结构化对象(map、结构体等)序列化为YAML格式的纯文本。你在最外层已经对整个Thanos配置对象调用了yamlencode,正常情况下内层的config如果是嵌套对象,外层序列化时会自动生成YAML的嵌套层级结构。
但你提前对config对应的内层对象单独调用了一次yamlencode,相当于把config的值先转成了一段YAML字符串,外层yamlencode处理时就会把这个值当成普通的多行字符串,而不是嵌套对象,最终生成的YAML里config就变成了|开头的多行文本块,内部内容全是带引号的字符串格式,和预期的嵌套结构完全不符,自然无法被应用正常识别。
修复方法
删除内层多余的yamlencode调用,只保留最外层的一次序列化即可,修正后的locals配置如下:
locals { service_account_value = base64decode(var.json_key) thanos_config = yamlencode( { type = "GCS" config = { bucket = var.bucket_name service_account = local.service_account_value } } ) }
修正后生成的YAML会完全匹配你手动创建的目标结构:config会作为嵌套对象存在,service_account字段会自动按多行字面量格式(|-)输出,保留服务账号JSON的原始内容,不会出现多余引号、层级错误的问题。
内容的提问来源于stack exchange,提问作者FranAguiar
相关产品推荐
相关产品推荐

