Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions github/data_source_github_enterprise_team.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
package github

import (
"context"
"fmt"
"strconv"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceGithubEnterpriseTeam() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceGithubEnterpriseTeamRead,

Schema: map[string]*schema.Schema{
"enterprise_slug": {
Type: schema.TypeString,
Required: true,
Description: "The slug of the enterprise.",
},
"slug": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ConflictsWith: []string{"team_id"},
Description: "The slug of the enterprise team.",
},
"team_id": {
Type: schema.TypeInt,
Optional: true,
Computed: true,
ConflictsWith: []string{"slug"},
Description: "The numeric ID of the enterprise team.",
},
"name": {
Type: schema.TypeString,
Computed: true,
Description: "The name of the enterprise team.",
},
"description": {
Type: schema.TypeString,
Computed: true,
Description: "A description of the enterprise team.",
},
"organization_selection_type": {
Type: schema.TypeString,
Computed: true,
Description: "Specifies which organizations in the enterprise should have access to this team.",
},
"group_id": {
Type: schema.TypeString,
Computed: true,
Description: "The ID of the IdP group to assign team membership with.",
},
},
}
}

func dataSourceGithubEnterpriseTeamRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
enterpriseSlug := strings.TrimSpace(d.Get("enterprise_slug").(string))
if enterpriseSlug == "" {
return diag.FromErr(fmt.Errorf("enterprise_slug must not be empty"))
}

var te *enterpriseTeam
if v, ok := d.GetOk("team_id"); ok {
teamID := int64(v.(int))
if teamID != 0 {
found, err := findEnterpriseTeamByID(ctx, client, enterpriseSlug, teamID)
if err != nil {
return diag.FromErr(err)
}
if found == nil {
return diag.FromErr(fmt.Errorf("could not find enterprise team %d in enterprise %s", teamID, enterpriseSlug))
}
te = found
}
}

if te == nil {
teamSlug := strings.TrimSpace(d.Get("slug").(string))
if teamSlug == "" {
return diag.FromErr(fmt.Errorf("one of slug or team_id must be set"))
}
found, _, err := getEnterpriseTeamBySlug(ctx, client, enterpriseSlug, teamSlug)
if err != nil {
return diag.FromErr(err)
}
te = found
}

d.SetId(buildSlashTwoPartID(enterpriseSlug, strconv.FormatInt(te.ID, 10)))
if err := d.Set("enterprise_slug", enterpriseSlug); err != nil {
return diag.FromErr(err)
}
if err := d.Set("slug", te.Slug); err != nil {
return diag.FromErr(err)
}
if err := d.Set("team_id", int(te.ID)); err != nil {
return diag.FromErr(err)
}
if err := d.Set("name", te.Name); err != nil {
return diag.FromErr(err)
}
if te.Description != nil {
if err := d.Set("description", *te.Description); err != nil {
return diag.FromErr(err)
}
} else {
if err := d.Set("description", ""); err != nil {
return diag.FromErr(err)
}
}
orgSel := te.OrganizationSelectionType
if orgSel == "" {
orgSel = "disabled"
}
if err := d.Set("organization_selection_type", orgSel); err != nil {
return diag.FromErr(err)
}
if te.GroupID != nil {
if err := d.Set("group_id", *te.GroupID); err != nil {
return diag.FromErr(err)
}
} else {
if err := d.Set("group_id", ""); err != nil {
return diag.FromErr(err)
}
}

return nil
}
94 changes: 94 additions & 0 deletions github/data_source_github_enterprise_team_membership.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package github

import (
"context"
"fmt"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceGithubEnterpriseTeamMembership() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceGithubEnterpriseTeamMembershipRead,

Schema: map[string]*schema.Schema{
"enterprise_slug": {
Type: schema.TypeString,
Required: true,
Description: "The slug of the enterprise.",
},
"enterprise_team": {
Type: schema.TypeString,
Required: true,
Description: "The slug or ID of the enterprise team.",
},
"username": {
Type: schema.TypeString,
Required: true,
Description: "The GitHub username.",
},
"role": {
Type: schema.TypeString,
Computed: true,
Description: "The role of the user in the enterprise team, if returned by the API.",
},
"state": {
Type: schema.TypeString,
Computed: true,
Description: "The membership state, if returned by the API.",
},
"etag": {
Type: schema.TypeString,
Computed: true,
Description: "ETag of the membership response.",
},
},
}
}

func dataSourceGithubEnterpriseTeamMembershipRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
enterpriseSlug := strings.TrimSpace(d.Get("enterprise_slug").(string))
enterpriseTeam := strings.TrimSpace(d.Get("enterprise_team").(string))
username := strings.TrimSpace(d.Get("username").(string))
if enterpriseSlug == "" {
return diag.FromErr(fmt.Errorf("enterprise_slug must not be empty"))
}
if enterpriseTeam == "" {
return diag.FromErr(fmt.Errorf("enterprise_team must not be empty"))
}
if username == "" {
return diag.FromErr(fmt.Errorf("username must not be empty"))
}
m, resp, err := getEnterpriseTeamMembershipDetails(ctx, client, enterpriseSlug, enterpriseTeam, username)
if err != nil {
return diag.FromErr(err)
}

d.SetId(buildSlashThreePartID(enterpriseSlug, enterpriseTeam, username))
if err := d.Set("enterprise_slug", enterpriseSlug); err != nil {
return diag.FromErr(err)
}
if err := d.Set("enterprise_team", enterpriseTeam); err != nil {
return diag.FromErr(err)
}
if err := d.Set("username", username); err != nil {
return diag.FromErr(err)
}
if m != nil {
if err := d.Set("role", m.Role); err != nil {
return diag.FromErr(err)
}
if err := d.Set("state", m.State); err != nil {
return diag.FromErr(err)
}
}
if resp != nil {
if err := d.Set("etag", resp.Header.Get("ETag")); err != nil {
return diag.FromErr(err)
}
}
return nil
}
71 changes: 71 additions & 0 deletions github/data_source_github_enterprise_team_organizations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package github

import (
"context"
"fmt"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceGithubEnterpriseTeamOrganizations() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceGithubEnterpriseTeamOrganizationsRead,

Schema: map[string]*schema.Schema{
"enterprise_slug": {
Type: schema.TypeString,
Required: true,
Description: "The slug of the enterprise.",
},
"enterprise_team": {
Type: schema.TypeString,
Required: true,
Description: "The slug or ID of the enterprise team.",
},
"organization_slugs": {
Type: schema.TypeSet,
Computed: true,
Description: "Set of organization slugs that the enterprise team is assigned to.",
Elem: &schema.Schema{Type: schema.TypeString},
Set: schema.HashString,
},
},
}
}

func dataSourceGithubEnterpriseTeamOrganizationsRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*Owner).v3client
enterpriseSlug := strings.TrimSpace(d.Get("enterprise_slug").(string))
enterpriseTeam := strings.TrimSpace(d.Get("enterprise_team").(string))
if enterpriseSlug == "" {
return diag.FromErr(fmt.Errorf("enterprise_slug must not be empty"))
}
if enterpriseTeam == "" {
return diag.FromErr(fmt.Errorf("enterprise_team must not be empty"))
}
orgs, err := listEnterpriseTeamOrganizations(ctx, client, enterpriseSlug, enterpriseTeam)
if err != nil {
return diag.FromErr(err)
}

slugs := make([]string, 0, len(orgs))
for _, org := range orgs {
if org.Login != "" {
slugs = append(slugs, org.Login)
}
}

d.SetId(buildSlashTwoPartID(enterpriseSlug, enterpriseTeam))
if err := d.Set("enterprise_slug", enterpriseSlug); err != nil {
return diag.FromErr(err)
}
if err := d.Set("enterprise_team", enterpriseTeam); err != nil {
return diag.FromErr(err)
}
if err := d.Set("organization_slugs", slugs); err != nil {
return diag.FromErr(err)
}
return nil
}
Loading
Loading