我正在尝试使用Terraform来管理一些GitLab(自托管(配置。Terraform GitLab提供程序需要一个GitLab个人访问令牌才能进行API调用来读取和写入配置。当我尝试使用Terraformsecret_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(
- provider registry.terraform.io/nixpkgs/secret v1.1.1
我希望能够继续使用secret_resource
来管理GitLab API令牌。我该怎么办?
从错误消息来看,base_url
的配置似乎不正确。/api/v4/user
出现两次:
Error: GET https://gitlab.example.com./api/v4/user/api/v4/user: 404 {error: 404 Not Found}
尝试将base_url
仅设置为主机名,并使用斜线:
provider "gitlab" {
base_url = "https://gitlab.example.com/"
token = secret_resource.api_token.value
}
地址(gitlab.example.com.
(中还有一个点,应该是gitlab.example.com
。