Эта сбивающая с толку ошибка возникает из-за того, что вы не можете использовать метки метаданных в качестве входных данных для источника данных, а вместо этого можете предоставить только пространство имен и имя службы для ее поиска.
Если вы посмотрите на источник для источника данных , вы увидите, что он использует только поля 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)
}
docs действительно показывают, что это единственные два аргумента, которые следует использовать:
Аргументы
- имя - (Необязательно) Имя службы должно быть уникальным. Не может быть обновлено. Для получения дополнительной информации см. Справочник Kubernetes
- пространство имен - (Необязательно) Пространство имен определяет пространство, в котором имя службы должно быть уникальным.
К сожалению, в документации указано, что как пространство имен и имя не являются обязательными, поскольку они используют части общей схемы, одинаковые для большей части поставщика Kubernetes, поэтому Terraform не может проверить, используется ли поле name
, потому что этого требует базовая реализация.
Я не слишком глубоко изучал поставщика Kubernetes, но мне это кажется ошибкой, и если ресурс или источник данных на практике имеет другую схему, чем другие ресурсы, тогда схема должна соответствовать этой реализации. Это может быть сложно сделать с такой большой частью общей схемы Kubernetes, но без нее вы теряете много тонкостей Terraform в том, что она должна быть довольно строго типизированной и иметь возможность лучше сообщать вам об ошибках, когда вы что-то делаете. неправильно.