Не удалось установить поставщика для стороннего поставщика

#terraform

Вопрос:

Я использую модули terraform для применения принципов DRY в Azure Devops. Мы используем пользовательских поставщиков вместе с официальным поставщиком Azure Devops. Созданные нами модули используются таким образом, чтобы файлы tf, используемые разработчиками, служили только для объявления переменных, поскольку настройка ресурсов выполняется командой разработчиков.

Модуль состоит из файла TF и файла переменных, размещенных в /modules/build_ci

build_ci.tf:

 resource "build_definition_resource" "Build_CI" {
    trigger_ci      = true
    solution_name   = var.solution_name
    repository      = var.repository
    pool            = var.pool
    branch          = var.branch
    branches_ci     = var.branches_ci
    
    dynamic "build_template" {
        for_each = var.templates
        iterator = task
        content {
            name    = task.value["name"]
            input   = task.value["inputs"]
    }
    }
}
 

variables.tf

 variable "solution_name" {
    type = string
}

variable "repository" {
    type = string
}

variable "pool" {
    type    = string
    default = "alm-aws-pool"
}

variable "branch" {
    type    = string
    default = "master"
}

variable "branches_ci" {
    type    = list(string)
    default = ["master", "release/*"]
}

variable "templates" {
    type = list(object({
        name    = string
        inputs  = map(string)
    }))

    default = [
        {
            name    = "templates/build/tg1_buildamp;nuget.yaml"
            inputs  = {
                IsNugetPrerelaseVersion = "false"
                BuildConfiguration = "Release"
                BuildPlatform = "Any CPU"
                SearchPatternToPack = "none"
            }        
        },
        {
            name    = "templates/build/TG2_Validations.yaml"
            inputs  = {
                BuildConfiguration = "Release"
            }
        },
        {
            name    = "templates/build/TG3_Publish.yaml"  
            inputs  = null      
        }
    ]
}
 

компонент build_template вызывает шаблоны yaml, размещенные в другом репозитории.

использование этого модуля будет выглядеть следующим образом

 module "app_Build_CI" {
    source          = "../modules/build_ci"
    solution_name   = "app"
    repository      = "app_repository"
}
 

and the terraform provider is:

 provider "test_provider" {
  uri = "#{custom_provider_uri}"
  
}

provider "azuredevops" {
  org_service_url = "#{AZDO_ORG_SERVICE_URL}#"
  personal_access_token = "#{AZDO_PERSONAL_ACCESS_TOKEN}#"
}

terraform {
  required_version = ">= 0.12"
  backend "s3" {
    bucket = "#{BUCKET}#"
    key    = "#{KEY}#"
    region = "#{REGION}#"
      access_key = "#{access_key}#"
      role_arn = "#{ARN_ROLE}#"
      external_id = "#{EXTERNAL_ID}#"
  }
  
  required_providers {
    test_provider = {
      versions = ["0.2"]
      source = "test/provider/test"
    }
    azuredevops = {
      source = "microsoft/azuredevops"
      version = ">=0.1.0"
    }
    repo = {
      versions = ["0.2"]
      source = "test/provider/test"
    }
    build = {
      versions = ["0.2"]
      source = "test/provider/test"
    }
  }
}
 

Проблема возникает при выполнении инициализации terraform, мы получаем сообщение об ошибке, в котором говорится, что он не может установить поставщик hashichorp/сборки, который мы не используем. Если я использую старую структуру без модулей, она работает, но при использовании модулей она выходит из строя.

 Error: Failed to install provider

Error while installing hashicorp/build: provider registry
registry.terraform.io does not have a provider named
registry.terraform.io/hashicorp/build
 

Кто-нибудь знает, из-за чего произошла эта ошибка?
Большое спасибо

Ответ №1:

Ошибка заключалась в том, что папка modules должна содержать поставщика, в противном случае она использует официальных поставщиков hashicorp, а не сторонних. Это все, что для этого нужно