我正在使用 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随机创建的令牌,我得到了正确的响应。
我还尝试确保随机标记是一个字符串,但这没有帮助。
当我尝试使用某种随机定义时(我尝试过 random_password 提供程序或 openssl rand)它不起作用
根据 gitlab 提供商的文档,
token
是用于连接到 GitLab 的 OAuth2 令牌、项目、组、个人访问令牌或 CI 作业令牌。
换句话说,您需要提供现有令牌才能连接到提供商:
provider "gitlab" {
token = var.gitlab_token
}
作为替代方案,使用
GITLAB_TOKEN
环境变量向提供者进行身份验证,而不是像 var.gitlab_token
这样的变量。这种方法更好,因为它避免了在 Terraform 状态文件中存储敏感信息。