terraform init에서 "Failed to query available provider packages"가 발생했을 때의 대처법

5338 단어 ESXiTerraform
집 서버 용도로 ESXi를 도입했습니다. 웹에서 딱딱하고 VM을 세우는 것은 어렵기 때문에 terraform을 사용하여 코드로 관리하려고합니다.

사용한 플러그인은 다음과 같습니다.
  • Registry: josenk/esxi | Terraform Registry
  • GitHub: josenk/terraform-provider-esxi: Terraform-provider-esxi plugin

  • 사용중인 terraform의 버전은 다음과 같습니다. (Mac 환경을 사용하고 있습니다)
    $ terraform -v
    Terraform v0.15.4
    on darwin_amd64
    
    

    오류 내용



    시작하기 전에 terraform init에서 사용하는 provider plugin을 설정했지만이 시점에서 오류가 발생했습니다.
    $ terraform init
    
    Initializing the backend...
    
    Initializing provider plugins...
    - Finding latest version of hashicorp/esxi...
    ╷
    │ Error: Failed to query available provider packages
    │ 
    │ Could not retrieve the list of available versions for provider hashicorp/esxi: provider registry registry.terraform.io does not have a
    │ provider named registry.terraform.io/hashicorp/esxi
    │ 
    │ All modules should specify their required_providers so that external consumers will get the correct providers when using a module. To see
    │ which modules are currently depending on hashicorp/esxi, run the following command:
    │     terraform providers
    
    

    사용한 파일은 다음과 같습니다.

    main.tf
    terraform {
      required_providers {
        esxi = {
          source = "hashicorp/esxi"
        }
      }
    }
    
    provider "esxi" {
      esxi_hostname      = "192.168.0.2" # ESXiのIPアドレス
      esxi_hostport      = "22"
      esxi_hostssl       = "443"
      esxi_username      = "root" # ESXiにSSHするときのUSER
      esxi_password      = "pa$$w0rd" # ESXiにSSHするときのPASSWORD
    }
    
    resource "esxi_guest" "vmtest" {
      guest_name         = "vmtest"
      disk_store         = "datastore1"
      network_interfaces {
        virtual_network = "VM Network"
        mac_address     = "00:50:56:00:00:00"
      }
    }
    

    대처법


    source = "hashicorp/esxi" 라는 지정이 잘못되었으므로 source = "josenk/esxi" 로 수정하여 해결했습니다. (공식 문서에도 쓰여졌습니다,,)

    main.tf
    terraform {
      required_providers {
        esxi = {
          source = "josenk/esxi" # ここを修正
        }
      }
    }
    

    terraform 0.13부터 Provider가 htps : // 레기 스트리. 테라후 rm. 이오/ 에서 배포되므로 source = "<Provider名>/<プラグイン名>" 라고 기재하는 것으로 htps : // 레기 스트리. 테라후 rm. 이오/

    또, source = "registry.terraform.io/josenk/esxi" 라고 기재해도 같은 동작이 됩니다.

    플러그인을 사용할 때는 레지스트리의 웹 페이지로 가서 오른쪽 상단의 "USE PROVIDER"를 클릭하면 필요한 terraform의 version과 코드를 볼 수 있으므로 표시된대로 나열하면 문제 없습니다.



    Reference


  • terraform 0.13에서 로컬 provider를 사용하는 방법 - Sion의 기술 블로그
  • could not query provider registry for registry.terraform.io에서 terraform의 provider를 다운로드 할 수없는 문제 해결 - Screaming Loud
  • 좋은 웹페이지 즐겨찾기