我正在创建一个新的提供者,但我对提供者工厂有一些疑问。
我正在关注地形提供者的脚手架,所以在provider_test.go中我有以下内容:
var providerFactories = map[string]func() (*schema.Provider, error){
"acdcn": func() (*schema.Provider, error) {
return New("dev")(), nil
},
}
然后在资源测试文件中,我希望访问Provider,以便能够使用我的api客户端删除创建的资源。我正在尝试以下操作:
provider, err := providerFactories["acdcn"]()
apiClient := provider.Meta().(*client.Client)
但是提供者。Meta((始终为零。如何访问在提供程序中配置的api客户端?
测试运行良好,资源已创建,但我无法销毁CheckDestroy中配置的函数内部的资源。
编辑:我注意到我误解了CheckDestroy键的含义。测试会自动运行删除资源操作。这就解决了我的问题。但我保留了一个问题,我如何访问我的api客户端?
感谢
我从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 Issue