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.

¿Cómo puedo usar 2 proveedores en la misma configuración de Terraform?

Mi archivo main.tf comienza con

terraform {
  required_version = ">= 0.13.7"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "= 2.32.0"
    }
    foobar = {
      source = "terraform.foo.com/foo/bar"
    }
  }
}

El detalle aquí es que foo/bar es el módulo que estoy desarrollando localmente, por lo que también tengo este archivo terraformrc:

provider "installation" {
  dev_overrides {
    "terraform.foo.com/foo/bar" = "/Users/appuser/foobar/bin/darwin-amd64"
  }
}

Aquí están los errores que encuentro al ejecutar ✗ terraform init:

Initializing the backend...

Initializing provider plugins...
- Encontrando versiones de hashicorp/aws compatibles con "2.32.0"...
- Encontrando la última versión de terraform.foo.com/foo/bar...

Advertencia: Las sustituciones de desarrollo del proveedor están en efecto

Las siguientes sustituciones de desarrollo del proveedor están configuradas en la configuración del CLI:
- "terraform.foo.com/foo/bar" = "/Users/appuser/foobar/bin/darwin-amd64"

Error: No se pudo consultar los paquetes de proveedor disponibles

No se pudo recuperar la lista de versiones disponibles para el proveedor hashicorp/aws:
ninguna versión disponible coincide con las restricciones dadas 2.32.0

Error: No se pudo consultar los paquetes de proveedor disponibles

No se pudo recuperar la lista de versiones disponibles para el proveedor "terraform.foo.com/foo/bar":
ninguna versión disponible coincide con las restricciones dadas

Actualización: cuando elimino terraformrc parece funcionar, pero no puedo cargar el segundo proveedor de esta forma (ya que depende de la anulación):

terraform init

Initializing the backend…

Initializing provider plugins…
– Encontrando versiones de hashicorp/aws compatibles con “2.32.0”…
– Encontrando la última versión de hashicorp/foo/bar…
– Instalando hashicorp/aws v2.32.0…
– Instalado hashicorp/aws v2.32.0 (autofirmado, ID de clave 34365D9472D7468F)

Los proveedores de socios y de la comunidad están firmados por sus desarrolladores.
Si desea obtener más información sobre la firma de proveedores, puede leer al respecto aquí:
https://www.terraform.io/docs/plugins/signing.html

Error: No se pudo consultar los paquetes de proveedor disponibles

No se pudo recuperar la lista de versiones disponibles para el proveedor hashicorp/foo/bar:
el registro del proveedor registry.terraform.io no tiene un proveedor llamado registry.terraform.io/hashicorp/foo/bar
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Descripción del problema

    El archivo main.tf de un proyecto Terraform utiliza dos proveedores: hashicorp/aws y el módulo terraform.foo.com/foo/bar, el cual está siendo desarrollado localmente.

    También hay un archivo terraformrc que incluye una anulación de proveedor para el módulo terraform.foo.com/foo/bar, apuntando hacia un binario ubicado en /Users/appuser/foobar/bin/darwin-amd64.

    Al ejecutar terraform init, se encuentran los siguientes errores:
    – El proveedor hashicorp/aws no encuentra una versión que coincida con 2.32.0.
    – El módulo terraform.foo.com/foo/bar no encuentra ninguna versión disponible.

    Al eliminar el archivo terraformrc, el proveedor hashicorp/aws se instala correctamente, pero no se puede cargar el módulo terraform.foo.com/foo/bar debido a la ausencia de la anulación de proveedor.

    Solución

    El primer mensaje de error indica que Terraform no pudo encontrar una versión del proveedor hashicorp/aws que coincida con la versión 2.32.0 especificada en el archivo main.tf.

    Por lo tanto, es necesario publicar la versión 2.32.0 del proveedor hashicorp/aws o especificar una versión diferente en main.tf.

    El segundo mensaje de error indica que el módulo terraform.foo.com/foo/bar especificado en main.tf no tiene versiones disponibles. Esto podría ser porque se está desarrollando localmente y aún no se ha publicado.

    Sin embargo, el archivo terraformrc incluye una anulación de proveedor para ese módulo, especificando la ubicación del archivo binario.

    Por lo tanto, es necesario mantener el archivo terraformrc, pero modificarlo para que apunte a un proveedor válido. El binario del proveedor debe ser construido y publicado, y luego se debe especificar la URL y la versión del proveedor en el archivo terraformrc.

    Finalmente, ejecutar terraform init con ambos proveedores especificados en main.tf debería instalar ambos proveedores exitosamente.

    Solución actualizada

    Después de una investigación adicional, resulta que el módulo terraform.foo.com/foo/bar no es un módulo, sino un proveedor. El mensaje de error no se encontraron versiones disponibles que cumplan las restricciones especificadas para ese proveedor indica que no está disponible en el Registro público de Terraform.

    Por lo tanto, es necesario construir y publicar manualmente el proveedor en un Registro privado, y especificar la URL y la versión del proveedor en el archivo terraformrc.

    Además, el proveedor hashicorp/foo/bar especificado en main.tf no es un nombre de proveedor válido. Es necesario actualizarlo al nombre de proveedor correcto, o eliminarlo si no es necesario.

    Una vez que se publique el proveedor y se actualice el nombre en main.tf, al ejecutar terraform init con el archivo terraformrc, se instalarán ambos proveedores correctamente.

Comments are closed.