Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to instruct module to use particular provider in terraform?

I want to create a module that is linked to my artifactory provider. In my config.tf where I have configured my providers, I also have hashicorp/aws defined like below…

terraform {
  required_version = "~> 1.2.4"
    
  required_providers {
    aws = {
      version = "4.64.0"
      source  = "hashicorp/aws"
    }
    artifactory = {
      version = "6.22.3"
      source  = "registry.terraform.io/jfrog/artifactory"
    }
  }
}
    
// ARTIFACTORY // 
    
provider "artifactory" {
  url           = "<my artifactory url>"
  access_token  = "<my token>"
}
    
// AWS // 
   
provider "aws" {
  region              = var.region
  allowed_account_ids = [var.account_id]
  assume_role {
    role_arn = var.terraform_role_arn
  }
}

When I attempt to create a module using artifactory provider like the below inside a main.tf file….

module "artifactory_resources" {
  source     = "./modules/artifactory_resources"
  provider = artifactory
}
    
module "model_store_s3" {
  source     = "./modules/storage/s3"
  aws_region = local.aws_region
}

I get the following error…

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Could not retrieve the list of available versions for provider hashicorp/artifactory: provider registry registry.terraform.io does not have a provider named registry.terraform.io/hashicorp/artifactory

Did you intend to use jfrog/artifactory? If so, you must specify that source address in each module which requires that provider. To see which modules are currently depending on hashicorp/artifactory, run the following command: terraform providers

And when I run terraform providers I can see my module is trying to use a non-existent provider…

Providers required by configuration:
.
├── provider[registry.terraform.io/jfrog/artifactory] 6.22.3
├── provider[registry.terraform.io/hashicorp/aws] 4.64.0
├── module.model_store_s3
│   └── provider[registry.terraform.io/hashicorp/aws]
├── module.artifactory_resources
│   ├── provider[registry.terraform.io/hashicorp/local]
│   └── provider[registry.terraform.io/hashicorp/artifactory]

I can see the wrong provider is being used in the module, how can I change providers fromprovider[registry.terraform.io/hashicorp/artifactory to registry.terraform.io/jfrog/artifactory?

>Solution :

Each module has to have required providers defined as per the documentation:

Each Terraform module must declare which providers it requires, so that Terraform can install and use them. Provider requirements are declared in a required_providers block.

Furthermore, there is one really important thing to note:

Each module must declare its own provider requirements. This is especially important for non-HashiCorp providers.

This means you have to declare the Artifactory provider (as it is a non-HashiCorp provider) inside of the module code, i.e., in the artifactory_resources module. The way provider configuration is inherited is detailed in the documentation as well.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading