Terraform: создайте репозиторий организации GitHub вместо пользовательского репозитория
Структура файла TF:
- ./
- main.tf (см. код ниже, здесь определен провайдер github)
- module1 (папка)
- module1.tfvars
- github-repos.tf (см. код ниже)
- main.tf (пустой)
- variables.tf (определяется для модуля, значение берется из файла tfvar)
- модуль2 (папка)
- module3 (папка)
Я настроил интеграцию GitHub в моем корневом файле следующим образом:
./main.tf
terraform {
required_version = ">= 1.0.9"
backend "s3" {
}
required_providers {
github = {
source = "integrations/github"
version = "~> 4.0"
}
}
}
provider "github" {
owner = "githuborgname"
base_url = "https://github.com/githuborgname/" # we have GitHub Enterprise
token = github_mgmt_token
}
В
github_mgmt_token
поступает из вывода позже в том же
main.tf
файл и, похоже, работает хорошо (поскольку репо успешно создается в пользовательских репозиториях PAT).
Внутри модуля у меня есть
github-repos.tf
файл, который выглядит так: ./moduel1/github-repos.tf
resource "github_repository" "ssc" {
name = "ssc"
description = "text"
homepage_url = "https://internalurl.com"
visibility = "private"
delete_branch_on_merge = true
auto_init = true
gitignore_template = "Python"
archive_on_destroy = true
vulnerability_alerts = true
}
Это успешно создает репо без проблем, но оно находится внутри учетной записи пользователя PAT, а не в GitHub org.
Как создать репо организации?
2 ответа
Я думаю, что это ошибка
1.0.9
&
1.0.10
(по крайней мере, может быть, и другие версии), если я предоставлю
$GITHUB_OWNER
или
$OWNER
env var при запуске Terraform apply, это работает, как ожидалось, и создает репо в организации. По какой-то причине он не учитывает / не видит / не понимает аргументы поставщика, как ожидалось в этих версиях.
Я думаю, вам нужно использовать
owner
аргумент провайдеру:
владелец - (необязательно) это целевая организация GitHub или отдельная учетная запись пользователя, которой нужно управлять. Например, действительными владельцами являются torvalds и github. Это значение указывать необязательно, его также можно получить из переменной среды GITHUB_OWNER. Если токен не предоставлен и доступен, будет использоваться учетная запись отдельного пользователя, владеющего токеном. Если он не предоставлен и токен недоступен, поставщик может работать некорректно.
взято из https://registry.terraform.io/providers/integrations/github/latest/docs
т.е.
provider "github" {
token = var.token
owner = "myorg" // <--- here
}