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 или $OWNERenv 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
}
Другие вопросы по тегам