integrations / terraform-provider-github

Terraform GitHub provider
https://www.terraform.io/docs/providers/github/
MIT License
863 stars 708 forks source link

[FEAT]: github_enterprise_actions_runner_group / github_actions_runner_group - Support network configuration #2302

Open audunsolemdal opened 1 week ago

audunsolemdal commented 1 week ago

Describe the need

For the resources github_enterprise_actions_runner_group and github_actions_runner_group I would like support for configuring private networking via Terraform. This would help ease setup and maintenance of a great and cost efficient feature.


data "github_enterprise" "example" {
  slug = "example-co"
}

resource "azapi_resource" "subnet_integration" {
  type                      = "GitHub.Network/networkSettings@2024-04-02"
  name                      = "test-subnet-integration"
  location                  = module.vnet.vnet.location
  parent_id                 = module.vnet.rg.id
  schema_validation_enabled = false
  body = jsonencode({
    properties = {
      subnetId   = module.vnet.subnets["test-subnet"].id
      businessId = data.github_enterprise.example.database_id
    }
  })

  lifecycle {
    ignore_changes = [tags]
  }
}

resource "github_enterprise_actions_runner_group" "example" {
  name                       = "my-awesome-runner-group"
  enterprise_slug            = data.github_enterprise.enterprise.slug
  selected_organization_ids  = [github_enterprise_organization.enterprise_organization.database_id]

  # NEW
  network_configuration_id   = azapi_resource.subnet_integration.tags["GithubId"] # optional
  disable_network_configuration = false # optional. Only has an effect if network_configuration_id is set
}

resource "azapi_resource" "subnet_integration2" {
  type                      = "GitHub.Network/networkSettings@2024-04-02"
  name                      = "test-subnet-integration"
  location                  = module.vnet.vnet.location
  parent_id                 = module.vnet.rg.id
  schema_validation_enabled = false
  body = jsonencode({
    properties = {
      subnetId   = module.vnet.subnets["test-subnet2"].id
      businessId = data.github_enterprise.example.database_id
    }
  })

  lifecycle {
    ignore_changes = [tags]
  }
}

resource "github_actions_runner_group" "example" {
  name                    = "xxx"
  selected_repository_ids = ["yyy"]

  # NEW
  network_configuration_id   = azapi_resource.subnet_integration2.tags["GithubId"] # optional
  disable_network_configuration = false # optional. Only has an effect if network_configuration_id is set
}

Alternatively an optional block can be used to configue this

resource "github_actions_runner_group" "example" {
...
network_configuration {
  id   = azapi_resource.subnet_integration2.tags["GithubId"] # optional
  disable_configuration = false # optional, defaults to false
}
...
}

Enterprise:

Github team:

SDK Version

No response

API Version

No response

Relevant log output

No response

Code of Conduct