使用 Terraform 的 GitLab 项目

问题描述 投票:0回答:1

我正在使用 Terraform 创建 GitLab 服务器和项目。 我的提供商令牌有问题。

我为服务器创建一个实例,并使用脚本为 GitLab 定义令牌。


"echo 'Creating GitLab access token script'",
      "echo \"user = User.find_by(username: 'root')\" > create_token.rb",
      "echo \"token = user.personal_access_tokens.create!(name: 'Automated Token', scopes: [:api, :read_user, :read_repository, :write_repository, :sudo], expires_at: 30.days.from_now)\" >> create_token.rb",
      "echo \"token.set_token('${var.gitlab_token}')\" >> create_token.rb",
      "echo \"token.save!\" >> create_token.rb",
      "echo \"File.open('/tmp/gitlab_token.txt', 'w') { |file| file.write(token.token) }\" >> create_token.rb",
      "sudo gitlab-rails runner -e production /home/ubuntu/create_token.rb"

之后我想使用 GitLab 提供程序创建一个项目:

provider "gitlab" {
  token = var.gitlab_token
  base_url = "https://<gitlab_server>/api/v4/"
}
resource "gitlab_project" "example" {...}

我的问题是,当我手动定义 gitlab_token 时它可以工作(但安全方面它不好),但是当我尝试使用某种随机定义(我 treid random_password 提供程序或 openssl rand)时它不起作用,我得到:

Error: GET http://<ip>/api/v4/user: 401 {message: 401 Unauthorized}
│ 
│   with provider["registry.terraform.io/gitlabhq/gitlab"],.

我测试了用curl随机创建的令牌,我得到了正确的响应。

我还尝试确保随机标记是一个字符串,但这没有帮助。

terraform gitlab
1个回答
0
投票

当我尝试使用某种随机定义时(我尝试过 random_password 提供程序或 openssl rand)它不起作用

根据 gitlab 提供商的文档,

token
是用于连接到 GitLab 的 OAuth2 令牌、项目、组、个人访问令牌或 CI 作业令牌。

换句话说,您需要提供现有令牌才能连接到提供商:

provider "gitlab" {
  token = var.gitlab_token
}

作为替代方案,使用

GITLAB_TOKEN
环境变量向提供者进行身份验证,而不是像
var.gitlab_token
这样的变量。这种方法更好,因为它避免了在 Terraform 状态文件中存储敏感信息。

© www.soinside.com 2019 - 2024. All rights reserved.