为什么 Terraform 上的这个参数定义中需要双斜杠?
Why are the double slash in this parameter definition on Terraform required?
目前正在努力编写 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
}
}
当我发现 public 存储库具有类似模块时: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 模块的内容。
任何对此问题的解释帮助将不胜感激:)
在 name = "serviceAccount.annotations.eks\.amazonaws\.com/role-arn"
中你想定义 3 个组,用点分隔:
serviceAccount
-> annotations
-> eks.amazonaws.com/role-arn
由于您的第三组恰好包含点,您成功地发现必须转义点字符才能保持正确的结构。
如果不转义,字符串会以某种方式表示
serviceAccount
-> annotations
-> eks
-> amazonaws
-> com/role-arn
,这里没有意义
目前正在努力编写 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
}
}
当我发现 public 存储库具有类似模块时: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 模块的内容。
任何对此问题的解释帮助将不胜感激:)
在 name = "serviceAccount.annotations.eks\.amazonaws\.com/role-arn"
中你想定义 3 个组,用点分隔:
serviceAccount
-> annotations
-> eks.amazonaws.com/role-arn
由于您的第三组恰好包含点,您成功地发现必须转义点字符才能保持正确的结构。
如果不转义,字符串会以某种方式表示
serviceAccount
-> annotations
-> eks
-> amazonaws
-> com/role-arn
,这里没有意义