1
1
package gitlab
2
2
3
3
import (
4
+ "context"
4
5
"log"
5
6
"net/http"
6
7
"strconv"
7
8
"strings"
8
9
10
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9
11
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10
12
"github.com/xanzy/go-gitlab"
11
13
)
@@ -18,10 +20,10 @@ func resourceGitlabProjectMembership() *schema.Resource {
18
20
}
19
21
}
20
22
return & schema.Resource {
21
- Create : resourceGitlabProjectMembershipCreate ,
22
- Read : resourceGitlabProjectMembershipRead ,
23
- Update : resourceGitlabProjectMembershipUpdate ,
24
- Delete : resourceGitlabProjectMembershipDelete ,
23
+ CreateContext : resourceGitlabProjectMembershipCreate ,
24
+ ReadContext : resourceGitlabProjectMembershipRead ,
25
+ UpdateContext : resourceGitlabProjectMembershipUpdate ,
26
+ DeleteContext : resourceGitlabProjectMembershipDelete ,
25
27
Importer : & schema.ResourceImporter {
26
28
StateContext : schema .ImportStatePassthroughContext ,
27
29
},
@@ -46,7 +48,7 @@ func resourceGitlabProjectMembership() *schema.Resource {
46
48
}
47
49
}
48
50
49
- func resourceGitlabProjectMembershipCreate (d * schema.ResourceData , meta interface {}) error {
51
+ func resourceGitlabProjectMembershipCreate (ctx context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
50
52
client := meta .(* gitlab.Client )
51
53
52
54
userId := d .Get ("user_id" ).(int )
@@ -59,33 +61,33 @@ func resourceGitlabProjectMembershipCreate(d *schema.ResourceData, meta interfac
59
61
}
60
62
log .Printf ("[DEBUG] create gitlab project membership for %d in %s" , options .UserID , projectId )
61
63
62
- _ , _ , err := client .ProjectMembers .AddProjectMember (projectId , options )
64
+ _ , _ , err := client .ProjectMembers .AddProjectMember (projectId , options , gitlab . WithContext ( ctx ) )
63
65
if err != nil {
64
- return err
66
+ return diag . FromErr ( err )
65
67
}
66
68
userIdString := strconv .Itoa (userId )
67
69
d .SetId (buildTwoPartID (& projectId , & userIdString ))
68
- return resourceGitlabProjectMembershipRead (d , meta )
70
+ return resourceGitlabProjectMembershipRead (ctx , d , meta )
69
71
}
70
72
71
- func resourceGitlabProjectMembershipRead (d * schema.ResourceData , meta interface {}) error {
73
+ func resourceGitlabProjectMembershipRead (ctx context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
72
74
client := meta .(* gitlab.Client )
73
75
id := d .Id ()
74
76
log .Printf ("[DEBUG] read gitlab project projectMember %s" , id )
75
77
76
- projectId , userId , e := projectIdAndUserIdFromId (id )
77
- if e != nil {
78
- return e
78
+ projectId , userId , err := projectIdAndUserIdFromId (id )
79
+ if err != nil {
80
+ return diag . FromErr ( err )
79
81
}
80
82
81
- projectMember , resp , err := client .ProjectMembers .GetProjectMember (projectId , userId )
83
+ projectMember , resp , err := client .ProjectMembers .GetProjectMember (projectId , userId , gitlab . WithContext ( ctx ) )
82
84
if err != nil {
83
85
if resp != nil && resp .StatusCode == http .StatusNotFound {
84
86
log .Printf ("[DEBUG] gitlab project membership for %s not found so removing from state" , d .Id ())
85
87
d .SetId ("" )
86
88
return nil
87
89
}
88
- return err
90
+ return diag . FromErr ( err )
89
91
}
90
92
91
93
resourceGitlabProjectMembershipSetToState (d , projectMember , & projectId )
@@ -104,7 +106,7 @@ func projectIdAndUserIdFromId(id string) (string, int, error) {
104
106
return projectId , userId , e
105
107
}
106
108
107
- func resourceGitlabProjectMembershipUpdate (d * schema.ResourceData , meta interface {}) error {
109
+ func resourceGitlabProjectMembershipUpdate (ctx context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
108
110
client := meta .(* gitlab.Client )
109
111
110
112
userId := d .Get ("user_id" ).(int )
@@ -116,26 +118,30 @@ func resourceGitlabProjectMembershipUpdate(d *schema.ResourceData, meta interfac
116
118
}
117
119
log .Printf ("[DEBUG] update gitlab project membership %v for %s" , userId , projectId )
118
120
119
- _ , _ , err := client .ProjectMembers .EditProjectMember (projectId , userId , & options )
121
+ _ , _ , err := client .ProjectMembers .EditProjectMember (projectId , userId , & options , gitlab . WithContext ( ctx ) )
120
122
if err != nil {
121
- return err
123
+ return diag . FromErr ( err )
122
124
}
123
- return resourceGitlabProjectMembershipRead (d , meta )
125
+ return resourceGitlabProjectMembershipRead (ctx , d , meta )
124
126
}
125
127
126
- func resourceGitlabProjectMembershipDelete (d * schema.ResourceData , meta interface {}) error {
128
+ func resourceGitlabProjectMembershipDelete (ctx context. Context , d * schema.ResourceData , meta interface {}) diag. Diagnostics {
127
129
client := meta .(* gitlab.Client )
128
130
129
131
id := d .Id ()
130
- projectId , userId , e := projectIdAndUserIdFromId (id )
131
- if e != nil {
132
- return e
132
+ projectId , userId , err := projectIdAndUserIdFromId (id )
133
+ if err != nil {
134
+ return diag . FromErr ( err )
133
135
}
134
136
135
137
log .Printf ("[DEBUG] Delete gitlab project membership %v for %s" , userId , projectId )
136
138
137
- _ , err := client .ProjectMembers .DeleteProjectMember (projectId , userId )
138
- return err
139
+ _ , err = client .ProjectMembers .DeleteProjectMember (projectId , userId , gitlab .WithContext (ctx ))
140
+ if err != nil {
141
+ return diag .FromErr (err )
142
+ }
143
+
144
+ return nil
139
145
}
140
146
141
147
func resourceGitlabProjectMembershipSetToState (d * schema.ResourceData , projectMember * gitlab.ProjectMember , projectId * string ) {
0 commit comments