Пользовательский поставщик Terraform использует фабрики для тестирования
Я создаю нового провайдера, но у меня есть некоторые сомнения относительно фабрик провайдеров.
Я слежу за созданием terraform-provider-scaffolding, поэтому в provider_test.go у меня есть следующее:
var providerFactories = map[string]func() (*schema.Provider, error){
"acdcn": func() (*schema.Provider, error) {
return New("dev")(), nil
},
}
Затем в файле тестирования ресурсов я хотел бы получить доступ к поставщику, чтобы иметь возможность использовать мой клиент api для удаления созданного ресурса. Я пробую следующее:
provider, err := providerFactories["acdcn"]()
apiClient := provider.Meta().(*client.Client)
Но Providerr.Meta() всегда равен нулю. Как я могу получить доступ к моему клиенту api, настроенному в провайдере?
Тест работает хорошо, ресурс создан, но я не могу уничтожить ресурс внутри функции, настроенной в CheckDestroy.
РЕДАКТИРОВАТЬ: Я заметил, что неправильно понял значение ключа CheckDestroy. Тест автоматически запускает операцию удаления ресурса. Так что это решает мою проблему. Но я сохраняю вопрос, как я могу получить доступ к своему клиенту api?
Спасибо
1 ответ
Решение, которое я получил от Hashicorp Github:
// This provider can be used in testing code for API calls without requiring
// the use of saving and referencing specific ProviderFactories instances.
//
// PreCheck(t) must be called before using this provider instance.
var testAccProvider *schema.Provider = New("test")
Затем можно использовать функцию TestCase.PreCheck для настройки этого отдельного экземпляра провайдера, например
// Updating provider_test.go
func testAccPreCheck(t *testing.T) {
err := testAccProvider.Configure(context.Background(), terraform.NewResourceConfigRaw(nil))
if err != nil {
t.Fatal(err)
}
}
Затем код приемочного теста может ссылаться на клиента провайдера: testAccProvider.Meta().(*ExampleClient) (тип утвержден как правильный тип для вашего провайдера).
Для получения дополнительной информации: Проблема с Github