Skip to content

Commit dfc2ca1

Browse files
committed
Add resource_team.go
1 parent e35eabc commit dfc2ca1

File tree

1 file changed

+190
-0
lines changed

1 file changed

+190
-0
lines changed

codefresh/resource_team.go

+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
package codefresh
2+
3+
import (
4+
"fmt"
5+
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
7+
)
8+
9+
func resourceTeam() *schema.Resource {
10+
return &schema.Resource{
11+
Create: resourceTeamCreate,
12+
Read: resourceTeamRead,
13+
Update: resourceTeamUpdate,
14+
Delete: resourceTeamDelete,
15+
Importer: &schema.ResourceImporter{
16+
State: schema.ImportStatePassthrough,
17+
},
18+
Schema: map[string]*schema.Schema{
19+
"name": {
20+
Type: schema.TypeString,
21+
Required: true,
22+
},
23+
"type": {
24+
Type: schema.TypeString,
25+
ForceNew: true,
26+
Optional: true,
27+
},
28+
"account": {
29+
Type: schema.TypeString,
30+
Optional: true,
31+
Computed: true,
32+
},
33+
"tags": {
34+
Type: schema.TypeSet,
35+
Optional: true,
36+
ForceNew: true,
37+
Elem: &schema.Schema{
38+
Type: schema.TypeString,
39+
},
40+
},
41+
"users": {
42+
Type: schema.TypeList,
43+
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+
},
56+
},
57+
},
58+
},
59+
}
60+
}
61+
62+
func resourceTeamCreate(d *schema.ResourceData, meta interface{}) error {
63+
client := meta.(*cfClient.Client)
64+
65+
team := *mapResourceToTeam(d)
66+
67+
resp, err := client.CreateTeam(&team)
68+
if err != nil {
69+
return err
70+
}
71+
72+
d.SetId(resp.ID)
73+
74+
return nil
75+
}
76+
77+
func resourceTeamRead(d *schema.ResourceData, meta interface{}) error {
78+
79+
client := meta.(*cfClient.Client)
80+
81+
teamID := d.Id()
82+
if teamID == "" {
83+
d.SetId("")
84+
return nil
85+
}
86+
87+
team, err := client.GetTeamByID(teamID)
88+
if err != nil {
89+
return err
90+
}
91+
92+
err = mapTeamToResource(team, d)
93+
if err != nil {
94+
return err
95+
}
96+
97+
return nil
98+
}
99+
100+
func resourceTeamUpdate(d *schema.ResourceData, meta interface{}) error {
101+
client := meta.(*cfClient.Client)
102+
103+
team := *mapResourceToTeam(d)
104+
105+
_, err := client.CreateTeam(&team)
106+
if err != nil {
107+
return err
108+
}
109+
110+
return nil
111+
}
112+
113+
func resourceTeamDelete(d *schema.ResourceData, meta interface{}) error {
114+
client := meta.(*cfClient.Client)
115+
116+
err := client.DeleteTeam(d.Id())
117+
if err != nil {
118+
return err
119+
}
120+
121+
return nil
122+
}
123+
124+
func mapTeamToResource(team *cfClient.Team, d *schema.ResourceData) error {
125+
126+
err := d.Set("name", team.Name)
127+
if err != nil {
128+
return err
129+
}
130+
131+
err = d.Set("type", team.Type)
132+
if err != nil {
133+
return err
134+
}
135+
136+
err = d.Set("account", team.Account)
137+
if err != nil {
138+
return err
139+
}
140+
141+
err = d.Set("tags", team.Tags)
142+
if err != nil {
143+
return err
144+
}
145+
146+
err = d.Set("users", flattenTeamUsers(team.Users))
147+
if err != nil {
148+
return err
149+
}
150+
151+
return nil
152+
}
153+
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
162+
}
163+
164+
return res
165+
}
166+
167+
func mapResourceToTeam(d *schema.ResourceData) *cfClient.Team {
168+
tags := d.Get("tags").(*schema.Set).List()
169+
team := &cfClient.Team{
170+
ID: d.Id(),
171+
Name: d.Get("name").(string),
172+
Type: d.Get("type").(string),
173+
Account: d.Get("account").(string),
174+
Tags: convertStringArr(tags),
175+
}
176+
177+
if _, ok := d.GetOk("users"); ok {
178+
users := d.Get("users").([]interface{})
179+
for idx := range users {
180+
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),
183+
}
184+
185+
team.Users = append(team.Users, user)
186+
}
187+
}
188+
189+
return team
190+
}

0 commit comments

Comments
 (0)