Terraform выдает имя ресурса не может быть пустым ошибка
Я получаю следующее сообщение об ошибке, которого я не понимаю:
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 source
:
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
}
}
Мой data
есть имя, поэтому я не могу понять, что мне говорит Terraform.
1 ответ
Эта сбивающая с толку ошибка возникает из-за того, что вы не можете использовать метки метаданных в качестве входных данных для источника данных, а вместо этого можете предоставить только пространство имен и имя службы для ее поиска.
Если вы посмотрите на источник данных, вы увидите, что он использует толькоnamespace
а также name
поля:
func dataSourceKubernetesServiceRead(d *schema.ResourceData, meta interface{}) error {
om := meta_v1.ObjectMeta{
Namespace: d.Get("metadata.0.namespace").(string),
Name: d.Get("metadata.0.name").(string),
}
d.SetId(buildId(om))
return resourceKubernetesServiceRead(d, meta)
}
В документах действительно показывают, что только эти два аргумента, которые должны быть использованы:
Аргументы
- name - (Необязательно) Имя службы, должно быть уникальным. Не может быть обновлено. Дополнительные сведения см. В справочнике Kubernetes.
- namespace - (Необязательно) Namespace определяет пространство, в котором имя службы должно быть уникальным.
К сожалению, в документации указано, что и пространство имен, и имя являются необязательными, поскольку они используют части общей схемы, которые одинаковы для большей части поставщика Kubernetes, поэтому Terraform не может проверить, что name
поле используется, потому что этого требует базовая реализация.
Я не слишком глубоко изучал поставщика Kubernetes, но мне это кажется ошибкой, и если у ресурса или источника данных на практике схема отличается от других ресурсов, тогда схема должна соответствовать этой реализации. Это может быть сложно сделать с такой большой частью общей схемы Kubernetes, но без нее вы теряете много тонкостей Terraform в том смысле, что она должна быть довольно строго типизированной и иметь возможность лучше сообщать вам об ошибках, когда вы что-то делаете. неправильно.