1
1
package github
2
2
3
3
import (
4
+ "context"
5
+ "strconv"
6
+
7
+ "github.com/google/go-github/v66/github"
4
8
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
5
9
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
6
10
"github.com/shurcooL/githubv4"
@@ -67,9 +71,18 @@ func dataSourceGithubOrganizationTeams() *schema.Resource {
67
71
Elem : & schema.Schema {Type : schema .TypeString },
68
72
},
69
73
"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 ,
71
85
Computed : true ,
72
- Elem : & schema.Schema {Type : schema .TypeString },
73
86
},
74
87
},
75
88
},
@@ -84,6 +97,7 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
84
97
return err
85
98
}
86
99
100
+ clientv3 := meta .(* Owner ).v3client
87
101
client := meta .(* Owner ).v4client
88
102
orgName := meta .(* Owner ).name
89
103
rootTeamsOnly := d .Get ("root_teams_only" ).(bool )
@@ -107,7 +121,10 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
107
121
return err
108
122
}
109
123
110
- additionalTeams := flattenGitHubTeams (query )
124
+ additionalTeams , err := flattenGitHubTeams (clientv3 , meta .(* Owner ).StopContext , orgName , query )
125
+ if err != nil {
126
+ return err
127
+ }
111
128
teams = append (teams , additionalTeams ... )
112
129
113
130
if ! query .Organization .Teams .PageInfo .HasNextPage {
@@ -125,11 +142,11 @@ func dataSourceGithubOrganizationTeamsRead(d *schema.ResourceData, meta interfac
125
142
return nil
126
143
}
127
144
128
- func flattenGitHubTeams (tq TeamsQuery ) []interface {} {
145
+ func flattenGitHubTeams (client * github. Client , ctx context. Context , org string , tq TeamsQuery ) ( []interface {}, error ) {
129
146
teams := tq .Organization .Teams .Nodes
130
147
131
148
if len (teams ) == 0 {
132
- return make ([]interface {}, 0 )
149
+ return make ([]interface {}, 0 ), nil
133
150
}
134
151
135
152
flatTeams := make ([]interface {}, len (teams ))
@@ -152,6 +169,18 @@ func flattenGitHubTeams(tq TeamsQuery) []interface{} {
152
169
153
170
t ["members" ] = flatMembers
154
171
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
+
155
184
parentTeam := make (map [string ]interface {})
156
185
parentTeam ["id" ] = team .Parent .ID
157
186
parentTeam ["slug" ] = team .Parent .Slug
@@ -171,5 +200,5 @@ func flattenGitHubTeams(tq TeamsQuery) []interface{} {
171
200
flatTeams [i ] = t
172
201
}
173
202
174
- return flatTeams
203
+ return flatTeams , nil
175
204
}
0 commit comments