Kubernetes Terraform资源名称不能为空错误

Kubernetes Terraform资源名称不能为空错误,kubernetes,terraform,terraform-provider-kubernetes,Kubernetes,Terraform,Terraform Provider Kubernetes,我收到了以下我不理解的错误消息: Error: resource name may not be empty on main.tf line 48, in data "kubernetes_service" "spark_master_service": 48: data "kubernetes_service" "spark_master_service" { 相关的数据源: data "kubernetes_service" "spark_master_service" {

我收到了以下我不理解的错误消息:

Error: resource name may not be empty

  on main.tf line 48, in data "kubernetes_service" "spark_master_service":
  48: data "kubernetes_service" "spark_master_service" {
相关的
数据源

data "kubernetes_service" "spark_master_service" {
    metadata {
        labels = {
            "app.kubernetes.io/component" = "master"
            "app.kubernetes.io/instance" = "spark"
            "app.kubernetes.io/name" = "spark"
        }
        namespace = var.namespace
    }
}

我的
数据
有一个名字,所以我不太明白地形告诉我什么

这个令人困惑的错误来自这样一个事实:您不能使用元数据标签作为数据源的输入,而只能提供服务的名称空间和名称来查找它

如果查看,您可以看到它仅使用
名称空间
名称
字段:

func dataSourceKubernetesServiceRead(d*schema.ResourceData,元接口{})错误{
om:=meta_v1.ObjectMeta{
名称空间:d.Get(“metadata.0.Namespace”)(字符串),
名称:d.Get(“metadata.0.Name”)(字符串),
}
d、 SetId(buildId(om))
返回resourceKubernetesServiceRead(d,meta)
}
do表明,这是应该使用的仅有的两个参数:

论据

  • 名称-(可选)服务的名称必须是唯一的。无法更新。有关更多信息,请参阅Kubernetes参考
  • 名称空间-(可选)名称空间定义服务名称必须唯一的空间
不幸的是,文档声明名称空间和名称都是可选的,因为它们使用的共享架构部分与Kubernetes提供程序的大部分部分相同,所以Terraform无法检查是否使用了
名称
字段,因为底层实现需要它

我没有深入研究Kubernetes提供程序,但对我来说这似乎是一个bug,如果一个资源或数据源在实践中具有与其他资源不同的模式,那么该模式应该与该实现相匹配。这可能会很棘手,因为有这么多的Kubernetes模式是共享的,但如果没有它,您将失去Terraform的许多优点,因为它应该是非常强类型的,并且在您出错时能够向您提供更好的错误消息