11package github
22
33import (
4+ "context"
5+ "strconv"
6+
7+ "github.com/google/go-github/v66/github"
48 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
59 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
610 "github.com/shurcooL/githubv4"
@@ -67,9 +71,18 @@ func dataSourceGithubOrganizationTeams() *schema.Resource {
6771 Elem : & schema.Schema {Type : schema .TypeString },
6872 },
6973 "parent" : {
70- Type : schema .TypeMap ,
74+ Deprecated : "Use parent_team_id and parent_team_slug instead." ,
75+ Type : schema .TypeMap ,
76+ Computed : true ,
77+ Elem : & schema.Schema {Type : schema .TypeString },
78+ },
79+ "parent_team_id" : {
80+ Type : schema .TypeString ,
81+ Computed : true ,
82+ },
83+ "parent_team_slug" : {
84+ Type : schema .TypeString ,
7185 Computed : true ,
72- Elem : & schema.Schema {Type : schema .TypeString },
7386 },
7487 },
7588 },
@@ -84,6 +97,7 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
8497 return err
8598 }
8699
100+ clientv3 := meta .(* Owner ).v3client
87101 client := meta .(* Owner ).v4client
88102 orgName := meta .(* Owner ).name
89103 rootTeamsOnly := d .Get ("root_teams_only" ).(bool )
@@ -107,7 +121,10 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
107121 return err
108122 }
109123
110- additionalTeams := flattenGitHubTeams (query )
124+ additionalTeams , err := flattenGitHubTeams (clientv3 , meta .(* Owner ).StopContext , orgName , query )
125+ if err != nil {
126+ return err
127+ }
111128 teams = append (teams , additionalTeams ... )
112129
113130 if ! query .Organization .Teams .PageInfo .HasNextPage {
@@ -125,11 +142,11 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
125142 return nil
126143}
127144
128- func flattenGitHubTeams (tq TeamsQuery ) []interface {} {
145+ func flattenGitHubTeams (client * github. Client , ctx context. Context , org string , tq TeamsQuery ) ( []interface {}, error ) {
129146 teams := tq .Organization .Teams .Nodes
130147
131148 if len (teams ) == 0 {
132- return make ([]interface {}, 0 )
149+ return make ([]interface {}, 0 ), nil
133150 }
134151
135152 flatTeams := make ([]interface {}, len (teams ))
@@ -152,6 +169,18 @@ func flattenGitHubTeams(tq TeamsQuery) []interface{} {
152169
153170 t ["members" ] = flatMembers
154171
172+ var parentTeamId string
173+ if len (team .Parent .Slug ) != 0 {
174+ parentTeam , _ , err := client .Teams .GetTeamBySlug (ctx , org , string (team .Parent .Slug ))
175+ if err != nil {
176+ return nil , err
177+ }
178+ parentTeamId = strconv .FormatInt (parentTeam .GetID (), 10 )
179+ }
180+
181+ t ["parent_team_id" ] = parentTeamId
182+ t ["parent_team_slug" ] = team .Parent .Slug
183+
155184 parentTeam := make (map [string ]interface {})
156185 parentTeam ["id" ] = team .Parent .ID
157186 parentTeam ["slug" ] = team .Parent .Slug
@@ -171,5 +200,5 @@ func flattenGitHubTeams(tq TeamsQuery) []interface{} {
171200 flatTeams [i ] = t
172201 }
173202
174- return flatTeams
203+ return flatTeams , nil
175204}
0 commit comments