7

我正在尝试使用 Terraform 来管理一些 GitLab(自托管)配置。Terraform GitLab 提供程序需要 GitLab 个人访问令牌才能进行 API 调用以读取和写入配置。当我尝试使用 Terraform 提供此令牌时,secret_resourceTerraform 无法让我管理机密。当我尝试导入密钥时,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 令牌。我怎样才能?

4

2 回答 2

5

从错误消息来看,似乎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                                                                            
}
于 2021-04-25T20:19:03.837 回答
-1

您在 address( gitlab.example.com.) 中也有一个点,应该是gitlab.example.com.

于 2021-04-25T20:23:26.880 回答