terraform - Terraform Openstack 无法检索提供程序的可用版本列表
问题描述
当我执行时,terraform init
我有以下输出:
Initializing modules...
- compute in modules\compute
- private_network in modules\private_network
- public_ip in modules\public_ip
- route in modules\route
Initializing the backend...
Initializing provider plugins...
- Finding terraform-provider-openstack/openstack versions matching "~> 1.35.0"...
- Finding latest version of hashicorp/openstack...
- Installing terraform-provider-openstack/openstack v1.35.0...
- Installed terraform-provider-openstack/openstack v1.35.0 (self-signed, key ID 4F80527A391BEFD2)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/plugins/signing.html
Error: Failed to query available provider packages
Could not retrieve the list of available versions for provider
hashicorp/openstack: provider registry registry.terraform.io does not have a
provider named registry.terraform.io/hashicorp/openstack
这是我的 provider.tf 文件(灵感来自于 Terraform 的官方文档):
# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.35.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
user_name = "username"
tenant_name = "tenantname"
password = "mypasswd"
auth_url = "http://my.openstack.lan:5000"
region = "RegionOne"
}
# Create a web server
#resource "openstack_compute_instance_v2" "test-server" {
# ...
#}
当我检查版本时,我有这个:
Terraform v0.14.2
Your version of Terraform is out of date! The latest version
is 1.0.3. You can update by downloading from https://www.terraform.io/downloads.html
这是我跑步的时候terraform apply
Error: Could not load plugin
Plugin reinitialization required. Please run "terraform init".
Plugins are external binaries that Terraform uses to access and manipulate
don't satisfy the version constraints, or are otherwise incompatible.
Terraform automatically discovers provider requirements from your
configuration, including providers used in child modules. To see the
requirements and constraints, run "terraform providers".
2 problems:
- Failed to instantiate provider "registry.terraform.io/hashicorp/openstack"
to obtain schema: unknown provider "registry.terraform.io/hashicorp/openstack"
- Failed to instantiate provider
"registry.terraform.io/terraform-provider-openstack/openstack" to obtain
schema: unknown provider
最后terraform providers
Providers required by configuration:
.
├── provider[registry.terraform.io/terraform-provider-openstack/openstack] ~> 1.35.0
├── module.compute
│ └── provider[registry.terraform.io/hashicorp/openstack]
├── module.private_network
│ └── provider[registry.terraform.io/hashicorp/openstack]
├── module.public_ip
│ └── provider[registry.terraform.io/hashicorp/openstack]
└── module.route
└── provider[registry.terraform.io/hashicorp/openstack]
解决方案
要手动管理提供程序版本,请使用 terraform 镜像。
基本上:创建提供程序路径,下载 && 安装提供程序,设置 terraform 镜像路径。
# mkdir -p /root/.local/share/terraform/plugins/registry.terraform.io/terraform-provider-openstack/openstack/1.40.0/linux_amd64/
# curl -L https://releases.hashicorp.com/terraform-provider-openstack/1.40.0/terraform-provider-openstack_1.40.0_linux_amd64.zip -o terraform-provider-openstack.zip
# unzip terraform-provider-openstack.zip
# mv terraform-provider-openstack_v1.40.0 /root/.local/share/terraform/plugins/registry.terraform.io/terraform-provider-openstack/openstack/1.40.0/linux_amd64/
# terraform providers mirror /root/.local/share/terraform/plugins/
完成后,当 terraform init 时,它将从此路径加载提供程序。(我使用这条路径是因为在以前的 TF 版本中,提供者就在那里)。
此外,当我从 Gitlab 在 openstack 上部署 TF 时,我创建了一个 docker 映像。这是 Dockerfile:
FROM hashicorp/terraform:0.14.7
RUN apk update && \
apk upgrade && \
apk add --no-cache \
curl && \
mkdir -p /root/.local/share/terraform/plugins/registry.terraform.io/terraform-provider-openstack/openstack/1.40.0/linux_amd64/ && \
curl -L https://releases.hashicorp.com/terraform-provider-openstack/1.40.0/terraform-provider-openstack_1.40.0_linux_amd64.zip -o terraform-provider-openstack.zip && \
unzip terraform-provider-openstack.zip && \
mv terraform-provider-openstack_v1.40.0 /root/.local/share/terraform/plugins/registry.terraform.io/terraform-provider-openstack/openstack/1.40.0/linux_amd64/ && \
terraform providers mirror /root/.local/share/terraform/plugins/
ENTRYPOINT /bin/sh
推荐阅读
- java - Android Material Button Toggle Group
- twitter-bootstrap - 如何使用角度字符串插值为引导工具提示的标题属性赋值?
- php - 如何在 php,laravel 中的不同代码块中使变量值可变
- scala - Fs2 流处理队列中的时间
- python - OperationalError:无效的 uri 权限:anaconda3
- sql - 根据上次更新日期为表生成行索引
- python - aggdraw:以透明方式绘画或擦除至透明。似乎没有办法擦除或绘制透明像素
- java - 如果语句在java中不起作用,drawString in
- python - Django 属性错误:“NoneType”对象没有属性“videofile”
- json - 无法将 json 编组为 protobuf 消息