Terraform を使用して GitLab (自己ホスト型) 構成を管理しようとしています。Terraform GitLab プロバイダーでは、API 呼び出しを行って構成を読み書きできるようにするには、GitLab Personal Access Token が必要です。Terraform を使用してこのトークンを提供しようとすると、Terraformsecret_resource
でシークレットを管理できません。シークレットをインポートしようとすると、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 プロバイダーが適切に構成されます。
私はこの動作を次のように観察します。
- テラフォーム 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 トークンを管理するために引き続き使用できるようにしたいと考えています。どうやって?