我正在尝试使用 Terraform 来管理一些 GitLab(自托管)配置。Terraform GitLab 提供程序需要 GitLab 个人访问令牌才能进行 API 调用以读取和写入配置。当我尝试使用 Terraform 提供此令牌时,secret_resource
Terraform 无法让我管理机密。当我尝试导入密钥时,Terraform 失败:
$ terraform import secret_resource.api_token "xxx"
secret_resource.api_token: Importing from ID "xxx"...
secret_resource.api_token: Import prepared!
Prepared secret_resource for import
secret_resource.api_token: Refreshing state... [id=-]
Error: GET https://gitlab.example.com./api/v4/user/api/v4/user: 404 {error: 404 Not Found}
on /path/to/providers.tf line 24, in provider "gitlab":
24: provider "gitlab" {
这是重现此行为的最小 Terraform:
terraform {
required_version = "~> 0.13.6"
required_providers {
gitlab = {
source = "nixpkgs/gitlab"
version = "> 3.4.99"
}
secret = {
source = "nixpkgs/secret"
version = "~> 1.1"
alias = "default"
}
}
}
resource "secret_resource" "api_token" {
lifecycle {
prevent_destroy = true
}
}
provider "gitlab" {
base_url = "https://gitlab.example.com./api/v4/user"
token = secret_resource.api_token.value
}
resource "gitlab_project" "foo" {
name = "foo"
}
我省略了真实的主机名和 GitLab 令牌值。通过使用此配置初始化一个新的 Terraform 根模块,然后尝试导入密钥,我可以可靠地重现此故障。
这似乎是一个不合理的失败——secret_resource
不依赖于 GitLab 提供者。如果 Terraform 允许导入该值,那么它将可用,然后 GitLab 提供程序将被正确配置。
我观察到这种行为:
- Terraform v0.13.6
- 提供者registry.terraform.io/nixpkgs/gitlab v3.4.999(git rev 68c8c0e4cf14fda698bcacb74cb01fcfe7128815)
- 提供者 registry.terraform.io/nixpkgs/secret v1.1.1
我希望能够继续使用secret_resource
来管理 GitLab API 令牌。我怎样才能?