Пользовательский поставщик 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

Другие вопросы по тегам