我正在使用 Crossplane Grafana 提供程序通过 IAC 在我的 Grafana Cloud 实例上创建 Grafana 仪表板。我通过 UI 创建了仪表板,导出了 JSON 并尝试将其输入到 Grafana 仪表板资源。
尽管我没有更改任何内容,但我在 Kubernetes 上收到以下错误消息:
Invalid reference: A reference to a resource type must be followed by at least one attribute access, specifying the resource name
每次重试时,此消息都会重复多次。没有更多信息了。
无法通过
.lock
在 Crossplane Grafana Provider 资源上找到 kubectl exec
文件来检查是否还有其他有意义的消息...
我发现这条消息实际上是一条 Terraform 消息,因为 Crossplane 使用 Upbound/upjet 作为 Terraform 的转换层。虽然不是很有帮助...
经过一番研究,我发现 Terraform 错误消息来自于它尝试插入变量,例如
${resource.field}
。
有了这些信息,查看 3K 行 Json,我发现可以使用以下符号来指向 Grafana 的数据源变量:
${env}
或 $env
。当第一种情况发生时,它必须触发 Terraform API 来强制插值。
为了绕过这个问题,Terraform 接受
$${env}
,它将被插值为 ${env}
,最终被 Grafana API 接受。
所以,快速修复,添加第二个
$
。