#plugins #terraform
#Плагины #terraform
Вопрос:
Я учусь разрабатывать поставщика terraform. Я следую этому удивительному руководству, составленному hashicorp: https://learn.hashicorp.com/tutorials/terraform/provider-use?in=terraform/providers#create-order
Terraform init
сработало, когда я добавил required_providers
блок. Однако, как только я добавил ресурс и сделал terraform apply
, apply завершается с ошибкой «Не удалось загрузить плагин». После этой ошибки, когда я запускаю terraform providers
отладку, в нем указаны как поставщик, так и ресурс как требуемые поставщики.
Версия Terraform, которую я использую: 0.13.5
Ниже приведен код, который я использовал:
required_providers {
hashicups = {
versions = ["0.3"]
source = "hashicorp.com/edu/hashicups"
}
}
}
resource "haschicups_order" "edu" {
items {
coffee {
id = 3
}
quantity = 2
}
items {
coffee {
id = 2
}
quantity = 2
}
}
output "edu_order" {
value = haschicups_order.edu
}```
```% terraform providers
Providers required by configuration:
.
├── provider[hashicorp.com/edu/hashicups]
└── provider[registry.terraform.io/hashicorp/haschicups]```
Комментарии:
1. Исторически сложилось
terraform providers
так, что подкоманда действительно несколько сбита с толку локально созданными и загруженными поставщиками. Похоже, что это поведение сохраняется.2. Ошибки Terraform с «Не удалось загрузить плагин», и указанная причина заключается в том, что «конфигурация предоставила необходимые плагины, которые не могут быть найдены, не удовлетворяют ограничениям версии». Я уверен, что эта ошибка ссылается на ресурс, который terraform вводит в заблуждение как поставщика
Ответ №1:
Похоже, вы использовали неправильное имя типа ресурса для ресурса: вы написали haschicups_order
вместо hashicups_order
.
Поскольку вы не объявили поставщика с локальным именем haschicups
, Terraform предполагает, что этот тип ресурса должен принадлежать названному поставщику hashicorp/haschicups
с помощью того же механизма, который Terraform позволяет объявлять aws_instance
ресурс без явного объявления поставщика AWS.
Если вы исправите свое имя типа ресурса, чтобы оно имело тот же префикс, что и локальное имя поставщика, тогда Terraform должен связать ресурс с поставщиком, как вы ожидали:
resource "hashicups_order" "edu" {
items {
coffee {
id = 3
}
quantity = 2
}
items {
coffee {
id = 2
}
quantity = 2
}
}
Комментарии:
1. Спасибо, Мартин! Позже я обнаружил, что мне нужно использовать префикс поставщика, чтобы ресурс был распознан как часть поставщика. Также спасибо, что указали мне на исправление в имени поставщика!