Skip to content

Commit db2d397

Browse files
committed
resource_permission - done
1 parent 612aa5e commit db2d397

File tree

2 files changed

+57
-33
lines changed

2 files changed

+57
-33
lines changed

client/permission.go

+32-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,26 @@ package client
22

33
import (
44
"fmt"
5+
//"log"
56
)
67

78
// Permission spec
89
type Permission struct {
9-
ID string `json:"_id,omitempty"`
10+
ID string `json:"id,omitempty"`
1011
Team string `json:"role,omitempty"`
1112
Resource string `json:"resource,omitempty"`
1213
Action string `json:"action,omitempty"`
1314
Account string `json:"account,omitempty"`
15+
Tags []string `json:"attributes,omitempty"`
16+
}
17+
18+
// NewPermission spec, diffs from Permission is `json:"team,omitempty"` vs `json:"role,omitempty"`
19+
type NewPermission struct {
20+
ID string `json:"_id,omitempty"`
21+
Team string `json:"team,omitempty"`
22+
Resource string `json:"resource,omitempty"`
23+
Action string `json:"action,omitempty"`
24+
Account string `json:"account,omitempty"`
1425
Tags []string `json:"tags,omitempty"`
1526
}
1627

@@ -76,7 +87,16 @@ func (client *Client) GetPermissionByID(id string) (*Permission, error) {
7687
// CreatePermision -
7788
func (client *Client) CreatePermission(permission *Permission) (*Permission, error) {
7889

79-
body, err := EncodeToJSON(permission)
90+
newPermission := &NewPermission{
91+
ID: permission.ID,
92+
Team: permission.Team,
93+
Resource: permission.Resource,
94+
Action: permission.Action,
95+
Account: permission.Account,
96+
Tags: permission.Tags,
97+
}
98+
99+
body, err := EncodeToJSON(newPermission)
80100

81101
if err != nil {
82102
return nil, err
@@ -93,13 +113,20 @@ func (client *Client) CreatePermission(permission *Permission) (*Permission, er
93113
return nil, err
94114
}
95115

96-
var newPermission Permission
97-
err = DecodeResponseInto(resp, &newPermission)
116+
// respStr := string(resp)
117+
// log.Printf("[DEBUG] createPermission responce body = %s", respStr)
118+
var permissionResp []Permission
119+
err = DecodeResponseInto(resp, &permissionResp)
98120
if err != nil {
99121
return nil, err
100122
}
123+
if len(permissionResp) != 1 {
124+
return nil, fmt.Errorf("createPermission - unknown response lenght!=1: %v", permissionResp)
125+
}
101126

102-
return &newPermission, nil
127+
newPermissionID := permissionResp[0].ID
128+
129+
return client.GetPermissionByID(newPermissionID)
103130
}
104131

105132
// DeletePermission -

codefresh/resource_permission.go

+25-28
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package codefresh
22

33
import (
4-
"fmt"
4+
"fmt"
5+
"log"
56
cfClient "github.com/codefresh-io/terraform-provider-codefresh/client"
67
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
78

@@ -26,17 +27,12 @@ func resourcePermission() *schema.Resource {
2627
Type: schema.TypeString,
2728
Required: true,
2829
},
29-
"account": {
30-
Type: schema.TypeString,
31-
Optional: true,
32-
Computed: true,
33-
},
3430
"resource": {
3531
Type: schema.TypeString,
3632
Required: true,
3733
ValidateFunc: func(val interface{}, key string) (warns []string, errs []error) {
3834
v := val.(string)
39-
if v != "cluster" || v != "pipeline" {
35+
if v != "cluster" && v != "pipeline" {
4036
errs = append(errs, fmt.Errorf("%q must be between \"pipeline\" or \"cluster\", got: %s", key, v))
4137
}
4238
return
@@ -47,7 +43,7 @@ func resourcePermission() *schema.Resource {
4743
Required: true,
4844
ValidateFunc: func(val interface{}, key string) (warns []string, errs []error) {
4945
v := val.(string)
50-
if v != "create" || v != "read" || v != "update" || v != "delete" || v != "approve" {
46+
if v != "create" && v != "read" && v != "update" && v != "delete" && v != "run" && v != "approve" {
5147
errs = append(errs, fmt.Errorf("%q must be between one of create,read,update,delete,approve, got: %s", key, v))
5248
}
5349
return
@@ -59,7 +55,6 @@ func resourcePermission() *schema.Resource {
5955
Elem: &schema.Schema{
6056
Type: schema.TypeString,
6157
},
62-
Default: []string{"*", "untagged"},
6358
},
6459
},
6560
}
@@ -70,12 +65,15 @@ func resourcePermissionCreate(d *schema.ResourceData, meta interface{}) error {
7065

7166
permission := *mapResourceToPermission(d)
7267

73-
resp, err := client.CreatePermission(&permission)
68+
newPermission, err := client.CreatePermission(&permission)
7469
if err != nil {
7570
return err
7671
}
72+
if newPermission == nil {
73+
return fmt.Errorf("resourcePermissionCreate - failed to create permission, empty responce")
74+
}
7775

78-
d.SetId(resp.ID)
76+
d.SetId(newPermission.ID)
7977

8078
return resourcePermissionRead(d, meta)
8179
}
@@ -107,17 +105,16 @@ func resourcePermissionUpdate(d *schema.ResourceData, meta interface{}) error {
107105
client := meta.(*cfClient.Client)
108106

109107
permission := *mapResourceToPermission(d)
110-
111-
112-
// existingPermission, err := client.GetPermissionByID(permission.ID)
113-
// if err != nil {
114-
// return nil
115-
// }
116-
108+
permission.ID = ""
117109
resp, err := client.CreatePermission(&permission)
118110
if err != nil {
119111
return err
120-
}
112+
}
113+
114+
deleteErr := resourcePermissionDelete(d, meta)
115+
if deleteErr != nil {
116+
log.Printf("[WARN] failed to delete permission %v: %v",permission, deleteErr)
117+
}
121118
d.SetId(resp.ID)
122119

123120
return resourcePermissionRead(d, meta)
@@ -146,11 +143,6 @@ func mapPermissionToResource(permission *cfClient.Permission, d *schema.Resource
146143
return err
147144
}
148145

149-
err = d.Set("account", permission.Account)
150-
if err != nil {
151-
return err
152-
}
153-
154146
err = d.Set("action", permission.Action)
155147
if err != nil {
156148
return err
@@ -171,14 +163,19 @@ func mapPermissionToResource(permission *cfClient.Permission, d *schema.Resource
171163

172164
func mapResourceToPermission(d *schema.ResourceData) *cfClient.Permission {
173165

174-
tags := d.Get("tags").(*schema.Set).List()
166+
tagsI := d.Get("tags").(*schema.Set).List()
167+
var tags []string
168+
if len(tagsI) > 0 {
169+
tags = convertStringArr(tagsI)
170+
} else {
171+
tags = []string{"*", "untagged"}
172+
}
175173
permission := &cfClient.Permission{
176174
ID: d.Id(),
177175
Team: d.Get("team").(string),
178176
Action: d.Get("action").(string),
179-
Resource: d.Get("string").(string),
180-
//Account: d.Get("account_id").(string),
181-
Tags: convertStringArr(tags),
177+
Resource: d.Get("resource").(string),
178+
Tags: tags,
182179
}
183180

184181
return permission

0 commit comments

Comments
 (0)