AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79561945
Accepted
Elarbe
Elarbe
Asked: 2025-04-08 19:56:44 +0800 CST2025-04-08 19:56:44 +0800 CST 2025-04-08 19:56:44 +0800 CST

Provedor Terraform v1.11.3 não encontrado no local filesystem_mirror

  • 772

Estou tentando instalar este provedor de API "burro" para me permitir usar o Terraform com uma API que atualmente não tem um provedor disponível no registro:

https://github.com/Mastercard/terraform-provider-restapi

Baixei o .zip da versão mais recente com cURLe extraí o executável com chmod +x.

Seguindo a documentação da Hashicorp, criei um arquivo de configuração conforme necessário ~/.terraformrc , pelo método de instalação explícito com o seguinte conteúdo:

provider_installation {
  filesystem_mirror {
    path    = "/home/lukerb/.terraform.d/plugins/registry.terraform.io/hashicorp/restapi/1.20.0/linux_amd64/"
    include = ["registry.terraform.io/*/*"]
  }
  direct {
    exclude = ["registry.terraform.io/*/*"]
  }
}

Este caminho existe e é exatamente onde se encontra o executável que extraí anteriormente, porém ao executar terraform initno mesmo diretório que main.tf, recebo o seguinte erro

 Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/restiapi: provider registry.terraform.io/hashicorp/restiapi was not found in any of the search
│ locations
│
│   - /home/lukerb/.terraform.d/plugins/registry.terraform.io/hashicorp/restapi/1.20.0/linux_amd64/
╵
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/restapi: provider registry.terraform.io/hashicorp/restapi was not found in any of the search
│ locations
│
│   - /home/lukerb/.terraform.d/plugins/registry.terraform.io/hashicorp/restapi/1.20.0/linux_amd64/

Meu main.tf contém

terraform {
  required_providers {
    restapi = {
      source = "hashicorp/restapi"
      version = "1.20.0"
    }
  }
}

Ativei os logs detalhados para tentar entender qual é o problema e, pelo que posso ver, ao tentar inicializar, o local é verificado, mas nada é encontrado

[TRACE] Selected provider installation method cliconfig.ProviderInstallationFilesystemMirror("/home/lukerb/.terraform.d/plugins/registry.terraform.io/hashicorp/restapi/1.20.0/linux_amd64/") with includes [registry.terraform.io/*/*] and excludes []
[TRACE] Selected provider installation method cliconfig.ProviderInstallationDirect with includes [] and excludes [registry.terraform.io/*/*]
[INFO]  CLI command args: []string{"init"}
Initializing the backend...
[TRACE] Meta.Backend: no config given or present on disk, so returning nil config
[TRACE] Meta.Backend: backend has not previously been initialized in this working directory
[TRACE] Meta.Backend: using default local state only (no backend configuration, and no existing initialized backend)
[TRACE] Meta.Backend: instantiated backend of type <nil>
[DEBUG] checking for provisioner in "."
[DEBUG] checking for provisioner in "/usr/bin"
[DEBUG] checking for provisioner in "/home/lukerb/.terraform.d/plugins"

Alguém vê onde estou cometendo um erro ou qual é exatamente o problema?

EDITAR:

Depois de fazer as alterações sugeridas por @Matthew Schuchard, estou recebendo um erro semelhante

2025-04-08T15:33:07.564+0200 [INFO]  Terraform version: 1.11.3
2025-04-08T15:33:07.564+0200 [DEBUG] using github.com/hashicorp/go-tfe v1.70.0
2025-04-08T15:33:07.564+0200 [DEBUG] using github.com/hashicorp/hcl/v2 v2.23.0
2025-04-08T15:33:07.564+0200 [DEBUG] using github.com/hashicorp/terraform-svchost v0.1.1
2025-04-08T15:33:07.564+0200 [DEBUG] using github.com/zclconf/go-cty v1.16.0
2025-04-08T15:33:07.564+0200 [INFO]  Go runtime version: go1.23.3
2025-04-08T15:33:07.564+0200 [INFO]  CLI args: []string{"terraform", "init"}
2025-04-08T15:33:07.564+0200 [TRACE] Stdout is a terminal of width 120
2025-04-08T15:33:07.564+0200 [TRACE] Stderr is a terminal of width 120
2025-04-08T15:33:07.564+0200 [TRACE] Stdin is a terminal
2025-04-08T15:33:07.564+0200 [DEBUG] Attempting to open CLI config file: /home/lukerb/.terraformrc
2025-04-08T15:33:07.564+0200 [INFO]  Loading CLI configuration from /home/lukerb/.terraformrc
2025-04-08T15:33:07.564+0200 [DEBUG] checking for credentials in "/home/lukerb/.terraform.d/plugins"
2025-04-08T15:33:07.564+0200 [DEBUG] Explicit provider installation configuration is set
2025-04-08T15:33:07.564+0200 [TRACE] Selected provider installation method cliconfig.ProviderInstallationFilesystemMirror("/home/lukerb/.terraform.d/plugins/registry.terraform.io/Mastercard/restapi/1.20.0/linux_amd64") with includes [registry.terraform.io/*/*] and excludes []
2025-04-08T15:33:07.565+0200 [INFO]  CLI command args: []string{"init"}
Initializing the backend...
2025-04-08T15:33:07.565+0200 [TRACE] Meta.Backend: no config given or present on disk, so returning nil config
2025-04-08T15:33:07.565+0200 [TRACE] Meta.Backend: backend has not previously been initialized in this working directory
2025-04-08T15:33:07.565+0200 [TRACE] Meta.Backend: using default local state only (no backend configuration, and no existing initialized backend)
2025-04-08T15:33:07.565+0200 [TRACE] Meta.Backend: instantiated backend of type <nil>
2025-04-08T15:33:07.565+0200 [DEBUG] checking for provisioner in "."
2025-04-08T15:33:07.567+0200 [DEBUG] checking for provisioner in "/usr/bin"
2025-04-08T15:33:07.568+0200 [DEBUG] checking for provisioner in "/home/lukerb/.terraform.d/plugins"
2025-04-08T15:33:07.568+0200 [TRACE] Meta.Backend: backend <nil> does not support operations, so wrapping it in a local backend
2025-04-08T15:33:07.568+0200 [TRACE] backend/local: state manager for workspace "default" will:
 - read initial snapshot from terraform.tfstate
 - write new snapshots to terraform.tfstate
 - create any backup at terraform.tfstate.backup
2025-04-08T15:33:07.568+0200 [TRACE] statemgr.Filesystem: reading initial snapshot from terraform.tfstate
2025-04-08T15:33:07.568+0200 [TRACE] statemgr.Filesystem: snapshot file has nil snapshot, but that's okay
2025-04-08T15:33:07.568+0200 [TRACE] statemgr.Filesystem: read nil snapshot
Initializing provider plugins...
- Finding mastercard/restapi versions matching "1.20.0"...
╷
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider mastercard/restapi: provider
│ registry.terraform.io/mastercard/restapi was not found in any of the search locations
│
│   - /home/lukerb/.terraform.d/plugins/registry.terraform.io/Mastercard/restapi/1.20.0/linux_amd64
terraform
  • 2 2 respostas
  • 41 Views

2 respostas

  • Voted
  1. Matthew Schuchard
    2025-04-08T21:20:45+08:002025-04-08T21:20:45+08:00

    O namespace do plugin está incorreto. A organização é Mastercardand not hashicorp. Você precisa atualizar na sua configuração:

    terraform {
      required_providers {
        restapi = {
          source = "Mastercard/restapi"
          version = "1.20.0"
        }
      }
    }
    

    e sua estrutura de diretório:

    filesystem_mirror {
      path    = "/home/lukerb/.terraform.d/plugins/registry.terraform.io/Mastercard/restapi/1.20.0/linux_amd64/"
      include = ["registry.terraform.io/*/*"]
    }
    

    Observe que a localização do plugin no sistema de arquivos também precisa ser corrigida para corresponder ao caminho acima.

    • 2
  2. Best Answer
    Martin Atkins
    2025-04-09T06:10:04+08:002025-04-09T06:10:04+08:00

    O caminho do espelho do sistema de arquivos deve ser para a raiz do espelho, antes dos segmentos de caminho que representam os provedores individuais incluídos no espelho.

    Por exemplo:

    provider_installation {
      filesystem_mirror {
        path    = "/home/lukerb/.terraform.d/plugins"
        include = ["registry.terraform.io/*/*"]
      }
      direct {
        exclude = ["registry.terraform.io/*/*"]
      }
    }
    

    O Terraform então pesquisa no diretório fornecido para descobrir quais provedores específicos estão incluídos nele.


    Observe que o diretório que você especificou aqui é — supondo que /home/lukerbseja seu diretório inicial — um dos locais onde o Terraform pesquisaria automaticamente ao usar o modo de diretórios espelhados implícitos .

    Portanto, você pode excluir todo esse provider_installationbloco para ativar o comportamento implícito padrão do Terraform. Nesse caso, o Terraform pesquisará esse diretório para descobrir quais provedores estão nele e criará uma configuração implícita que instalará apenas esses provedores específicos do espelho local, enquanto instala todo o resto do registro.

    Por exemplo, se esse provedor for o único no seu diretório de espelho, o Terraform construirá para si uma configuração equivalente a esta:

    provider_installation {
      filesystem_mirror {
        path    = "/home/lukerb/.terraform.d/plugins"
        include = ["registry.terraform.io/hashicorp/restapi"]
      }
      direct {
        exclude = ["registry.terraform.io/hashicorp/restapi"]
      }
    }
    

    Observe que essa configuração inferida automaticamente instala apenas o provedor específico do diretório local, enquanto permite que todo o resto seja instalado a partir do registro público.


    Por fim, a parte "namespace" dos endereços de origem do provedor registry.terraform.iocorresponde aos nomes de organizações ou nomes de usuário do GitHub, portanto, "hashicorp" não é o nome correto para usar aqui. O Terraform em si não sabe disso, é claro, então isso não é necessário para que funcione , mas eu sugeriria corrigir isso para ajudar futuros mantenedores do seu sistema a entender de onde veio esse provedor.

    • No seu diretório de espelho, instale o provedor em registry.terraform.io/mastercard/restapiem vez de registry.terraform.io/hashicorp/restapi.
    • No required_providersbloco de módulos do Terraform, especifique source = "mastercard/restapiem vez de source = "hashicorp/restapi".

    Percebi que esse provedor está disponível no Registro Terraform se você usar o endereço de origem correto: mastercard/restapi. Portanto, você pode até mesmo pular o uso do diretório de espelho local se especificar o endereço de origem correto na sua configuração, em vez de especificá-lo incorretamente como pertencente ao hashicorpnamespace.

    • 1

relate perguntas

  • Gerar JSON dinamicamente no Terraform

  • Crie usuário se ele não existir com Terraform

  • Terraform: copie elementos específicos do mapa onde especificado pela lista

  • O modelo Terraform não substitui variáveis ​​por valor

  • Não é possível recuperar um único ID de instância do EC2 de vários IDs para o módulo ALB

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve