es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usar Fábricas para Testear los Proveedores Personalizados de Terraform.

Estoy creando un nuevo proveedor, pero tengo algunas dudas en las Fábricas de Proveedores.

Estoy siguiendo el terraform-provider-scaffolding, por lo que en provider_test.go tengo lo siguiente:

var providerFactories = map[string]func() (*schema.Provider, error){
    "acdcn": func() (*schema.Provider, error) {
        return New("dev")(), nil
    },
}

Luego, en el archivo de prueba de recursos, me gustaría acceder al Proveedor para poder usar mi cliente de API para eliminar el recurso creado. Estoy intentando lo siguiente:

provider, err := providerFactories["acdcn"]()
apiClient := provider.Meta().(*client.Client)

Pero provider.Meta() siempre es nulo. ¿Cómo puedo acceder a mi cliente de API configurado en el proveedor?

La prueba funciona bien, se crea el recurso, pero no puedo destruir el recurso dentro de la función configurada en CheckDestroy.

EDICIÓN: Me doy cuenta de que malinterpreté el significado de la clave CheckDestroy. La prueba ejecuta automáticamente la operación de eliminación de recursos. Por lo tanto, eso resuelve mi problema. Pero mantengo la pregunta, ¿cómo puedo acceder a mi cliente de API?

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para acceder a su cliente de API configurado en el proveedor, puede definir un método personalizado en la implementación del proveedor que devuelva el cliente de API. Por ejemplo:

    func (p *Provider) GetAPIClient() (*client.Client, error) {
        return p.apiClient, nil
    }
    

    Luego, en su archivo de prueba de recursos, puede instanciar el proveedor y llamar a este método para obtener el cliente de API:

    provider, err := acdcn.Provider().(*acdcn.Provider)
    if err != nil {
        t.Fatal(err)
    }
    
    apiClient, err := provider.GetAPIClient()
    if err != nil {
        t.Fatal(err)
    }
    

    Esto asume que ha definido el campo apiClient en su implementación del proveedor y lo ha configurado adecuadamente en el constructor New.

Comments are closed.