如何将API令牌作为Terraform秘密资源提供给GitLab Terraform提供商



我正在尝试使用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

相关内容

  • 没有找到相关文章

最新更新