目前,我在编写Terraform模块以部署Helm图表时遇到了以下问题:
│ Error: YAML parse error on external-dns/templates/serviceaccount.yaml: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal object into Go struct field .metadata.annotations of type string有了这样的资源定义:
resource "helm_release" "external_dns" {
name = "externaldns"
namespace = var.external_dns_namespace
repository = "https://charts.bitnami.com/bitnami"
chart = "external-dns"
version = "5.3.0"
set {
name = "serviceAccount.annotations.eks.amazonaws.com/role-arn"
value = resource.aws_iam_role.external_dns_role.arn
}
}当我找到一个具有类似模块的公共存储库时:https://github.com/lablabs/terraform-aws-eks-external-dns/blob/master/main.tf,并看到它的最后一个参数定义为
set {
name = "serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn"
value = aws_iam_role.external_dns[0].arn
}我试着添加那些双斜杠(),一切都正常!现在我想了解..。为什么这些双斜杠需要在最后两个之前“。但不是在另外两个人身上?
我知道,在Terraform中,双斜杠的字面意思是斜杠.但我不明白为何要这样做。
这就是我想要放到Terraform模块中的东西。

如对此问题有任何解释,将不胜感激:)
发布于 2021-08-10 08:57:58
在name = "serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn"中,您需要定义由点分隔的三个组:
serviceAccount -> annotations -> eks.amazonaws.com/role-arn
因为您的第三个组碰巧包含点,所以您成功地发现必须转义点字符才能保持正确的结构。
如果不逃跑的话,绳子就意味着
serviceAccount -> annotations -> eks -> amazonaws-> com/role-arn,这在这里毫无意义
https://stackoverflow.com/questions/68722570
复制相似问题