tl;dr version:

"${element(data.github_team.pull.*.id, count.index)}"

While writing a little terraform module to manage github repositories, team permissions and branch protection rules, I ran into an issue where github_team_repository resources need the team ID, but github_branch_protection resources need the team slug.

This was annoying as I wanted the module to have a single variable which served both purposes. I ended up having a variable var.teams_pull which accepted a list of team slugs. Using the github_team data source I was able to derive each team’s ID.

See the team_id parameter on the github_team_repository.pull resource below to see how to access it.

locals {
  pull_count = "${length(var.teams_pull)}"
}

data "github_team" "pull" {
  count = "${local.pull_count}"
  slug  = "${element(var.teams_pull, count.index)}"
}

resource "github_team_repository" "pull" {
  count      =  "${local.pull_count}"
  team_id    = "${element(data.github_team.pull.*.id, count.index)}"
  repository = "${github_repository.project.name}"
  permission = "pull"
}