Skip to content

Commit 358739a

Browse files
committed
Fix teams
1 parent a24bec6 commit 358739a

File tree

2 files changed

+87
-64
lines changed

2 files changed

+87
-64
lines changed

client/team.go

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
type TeamUser struct {
88
ID string `json:"id,omitempty"`
99
UserName string `json:"userName,omitempty"`
10+
Email string `json:"email,omitempty"`
1011
}
1112

1213
// Team spec
@@ -171,61 +172,48 @@ func (client *Client) SynchronizeClientWithGroup(name, ssoType string, notificat
171172
return nil
172173
}
173174

174-
func (client *Client) AddUserToTeam(teamID, userID string) (*Team, error) {
175+
func (client *Client) AddUserToTeam(teamID, userID string) error {
175176

176177
fullPath := fmt.Sprintf("/team/%s/%s/assignUserToTeam", teamID, userID)
177178
opts := RequestOptions{
178179
Path: fullPath,
179180
Method: "PUT",
180181
}
181182

182-
resp, err := client.RequestAPI(&opts)
183-
184-
if err != nil {
185-
return nil, err
186-
}
187-
188-
var respTeam Team
189-
err = DecodeResponseInto(resp, &respTeam)
183+
_, err := client.RequestAPI(&opts)
190184
if err != nil {
191-
return nil, err
185+
return err
192186
}
193187

194-
return &respTeam, nil
188+
return nil
195189
}
196190

197-
func (client *Client) DeleteUserFromTeam(teamID, userID string) (*Team, error) {
191+
func (client *Client) DeleteUserFromTeam(teamID, userID string) error {
198192

199193
fullPath := fmt.Sprintf("/team/%s/%s/deleteUserFromTeam", teamID, userID)
200194
opts := RequestOptions{
201195
Path: fullPath,
202196
Method: "PUT",
203197
}
204198

205-
resp, err := client.RequestAPI(&opts)
199+
_, err := client.RequestAPI(&opts)
206200

207201
if err != nil {
208-
return nil, err
209-
}
210-
211-
var respTeam Team
212-
err = DecodeResponseInto(resp, &respTeam)
213-
if err != nil {
214-
return nil, err
202+
return err
215203
}
216204

217-
return &respTeam, nil
205+
return nil
218206
}
219207

220-
func (client *Client) RenameTeam(teamID, name string) (*Team, error) {
208+
func (client *Client) RenameTeam(teamID, name string) error {
221209

222210
fullPath := fmt.Sprintf("/team/%s/renameTeam", teamID)
223211

224212
team := Team{Name: name}
225213
body, err := EncodeToJSON(team)
226214

227215
if err != nil {
228-
return nil, err
216+
return err
229217
}
230218

231219
opts := RequestOptions{
@@ -234,17 +222,47 @@ func (client *Client) RenameTeam(teamID, name string) (*Team, error) {
234222
Body: body,
235223
}
236224

237-
resp, err := client.RequestAPI(&opts)
225+
_, err = client.RequestAPI(&opts)
238226

239227
if err != nil {
240-
return nil, err
228+
return err
241229
}
242230

243-
var respTeam Team
244-
err = DecodeResponseInto(resp, &respTeam)
245-
if err != nil {
246-
return nil, err
231+
return nil
232+
}
233+
234+
func GetUsersDiff(desiredUsers []string, existingUsers []TeamUser) (usersToAdd []string, usersToDelete []string) {
235+
236+
existingUsersIDs := []string{}
237+
usersToAdd = []string{}
238+
usersToDelete = []string{}
239+
240+
for _, user := range existingUsers{
241+
existingUsersIDs = append(existingUsersIDs, user.ID)
247242
}
248243

249-
return &respTeam, nil
244+
for _, id := range existingUsersIDs{
245+
ok := find(desiredUsers, id)
246+
if !ok {
247+
usersToDelete = append(usersToDelete, id)
248+
}
249+
}
250+
251+
for _, id := range desiredUsers{
252+
ok := find(existingUsersIDs, id)
253+
if !ok {
254+
usersToAdd = append(usersToAdd, id)
255+
}
256+
}
257+
258+
return usersToAdd, usersToDelete
259+
}
260+
261+
func find(slice []string, val string) bool {
262+
for _, item := range slice {
263+
if item == val {
264+
return true
265+
}
266+
}
267+
return false
250268
}

codefresh/resource_team.go

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package codefresh
22

33
import (
4-
"fmt"
54
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
65
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
76
)
@@ -22,37 +21,25 @@ func resourceTeam() *schema.Resource {
2221
},
2322
"type": {
2423
Type: schema.TypeString,
25-
ForceNew: true,
2624
Optional: true,
2725
},
28-
"account": {
26+
"account_id": {
2927
Type: schema.TypeString,
3028
Optional: true,
3129
Computed: true,
3230
},
3331
"tags": {
3432
Type: schema.TypeSet,
3533
Optional: true,
36-
ForceNew: true,
3734
Elem: &schema.Schema{
3835
Type: schema.TypeString,
3936
},
4037
},
4138
"users": {
42-
Type: schema.TypeList,
39+
Type: schema.TypeSet,
4340
Optional: true,
44-
ForceNew: true,
45-
Elem: &schema.Resource{
46-
Schema: map[string]*schema.Schema{
47-
"user_id": {
48-
Type: schema.TypeString,
49-
Required: true,
50-
},
51-
"name": {
52-
Type: schema.TypeString,
53-
Optional: true,
54-
},
55-
},
41+
Elem: &schema.Schema{
42+
Type: schema.TypeString,
5643
},
5744
},
5845
},
@@ -102,11 +89,36 @@ func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) error {
10289

10390
team := *mapResourceToTeam(d)
10491

105-
_, err := client.RenameTeam(team.ID, team.Name)
92+
// Rename
93+
err := client.RenameTeam(team.ID, team.Name)
10694
if err != nil {
10795
return err
10896
}
10997

98+
// Update users
99+
existingTeam, err := client.GetTeamByID(team.ID)
100+
if err != nil {
101+
return nil
102+
}
103+
104+
desiredUsers := d.Get("users").(*schema.Set).List()
105+
106+
usersToAdd, usersToDelete := cfClient.GetUsersDiff(convertStringArr(desiredUsers), existingTeam.Users)
107+
108+
for _, userId := range usersToDelete{
109+
err := client.DeleteUserFromTeam(team.ID, userId)
110+
if err != nil {
111+
return err
112+
}
113+
}
114+
115+
for _, userId := range usersToAdd{
116+
err := client.AddUserToTeam(team.ID, userId)
117+
if err != nil {
118+
return err
119+
}
120+
}
121+
110122
return nil
111123
}
112124

@@ -133,7 +145,7 @@ func mapTeamToResource(team *cfClient.Team, d *schema.ResourceData) error {
133145
return err
134146
}
135147

136-
err = d.Set("account", team.Account)
148+
err = d.Set("account_id", team.Account)
137149
if err != nil {
138150
return err
139151
}
@@ -151,16 +163,11 @@ func mapTeamToResource(team *cfClient.Team, d *schema.ResourceData) error {
151163
return nil
152164
}
153165

154-
func flattenTeamUsers(users []cfClient.TeamUser) []map[string]interface{} {
155-
var res = make([]map[string]interface{}, len(users))
156-
for i, user := range users {
157-
m := make(map[string]interface{})
158-
m["name"] = user.UserName
159-
m["user_id"] = user.ID
160-
161-
res[i] = m
166+
func flattenTeamUsers(users []cfClient.TeamUser) []string {
167+
res := []string{}
168+
for _, user := range users {
169+
res = append(res, user.ID)
162170
}
163-
164171
return res
165172
}
166173

@@ -170,18 +177,16 @@ func mapResourceToTeam(d *schema.ResourceData) *cfClient.Team {
170177
ID: d.Id(),
171178
Name: d.Get("name").(string),
172179
Type: d.Get("type").(string),
173-
Account: d.Get("account").(string),
180+
Account: d.Get("account_id").(string),
174181
Tags: convertStringArr(tags),
175182
}
176183

177184
if _, ok := d.GetOk("users"); ok {
178-
users := d.Get("users").([]interface{})
179-
for idx := range users {
185+
users := d.Get("users").(*schema.Set).List()
186+
for _, id := range users {
180187
user := cfClient.TeamUser{
181-
ID: d.Get(fmt.Sprintf("users.%v.user_id", idx)).(string),
182-
UserName: d.Get(fmt.Sprintf("users.%v.name", idx)).(string),
188+
ID: id.(string),
183189
}
184-
185190
team.Users = append(team.Users, user)
186191
}
187192
}

0 commit comments

Comments
 (0)