@@ -145,12 +145,13 @@ func resourceGitlabProjectAccessTokenRead(ctx context.Context, d *schema.Resourc
145
145
146
146
log .Printf ("[DEBUG] read gitlab ProjectAccessToken %d, project ID %s" , projectAccessTokenID , project )
147
147
148
- projectAccessToken , err := resourceGitlabProjectAccessTokenFind (ctx , client , project , projectAccessTokenID )
149
- if errors .Is (err , errResourceGitlabProjectAccessTokenNotFound ) {
150
- log .Printf ("[DEBUG] failed to read gitlab ProjectAccessToken %d, project ID %s" , projectAccessTokenID , project )
151
- d .SetId ("" )
152
- }
148
+ projectAccessToken , _ , err := client .ProjectAccessTokens .GetProjectAccessToken (project , projectAccessTokenID , gitlab .WithContext (ctx ))
153
149
if err != nil {
150
+ if is404 (err ) {
151
+ log .Printf ("[DEBUG] GitLab ProjectAccessToken %d, project ID %s not found, removing from state" , projectAccessTokenID , project )
152
+ d .SetId ("" )
153
+ return nil
154
+ }
154
155
return diag .FromErr (err )
155
156
}
156
157
@@ -164,8 +165,7 @@ func resourceGitlabProjectAccessTokenRead(ctx context.Context, d *schema.Resourc
164
165
d .Set ("revoked" , projectAccessToken .Revoked )
165
166
d .Set ("user_id" , projectAccessToken .UserID )
166
167
d .Set ("access_level" , accessLevelValueToName [projectAccessToken .AccessLevel ])
167
- err = d .Set ("scopes" , projectAccessToken .Scopes )
168
- if err != nil {
168
+ if err = d .Set ("scopes" , projectAccessToken .Scopes ); err != nil {
169
169
return diag .FromErr (err )
170
170
}
171
171
@@ -194,47 +194,15 @@ func resourceGitlabProjectAccessTokenDelete(ctx context.Context, d *schema.Resou
194
194
log .Printf ("[DEBUG] Waiting for ProjectAccessToken %s to finish deleting" , d .Id ())
195
195
196
196
err = resource .RetryContext (ctx , 5 * time .Minute , func () * resource.RetryError {
197
- _ , err := resourceGitlabProjectAccessTokenFind (ctx , client , project , projectAccessTokenID )
198
- if errors .Is (err , errResourceGitlabProjectAccessTokenNotFound ) {
199
- return nil
200
- }
197
+ _ , _ , err := client .ProjectAccessTokens .GetProjectAccessToken (project , projectAccessTokenID , gitlab .WithContext (ctx ))
201
198
if err != nil {
199
+ if is404 (err ) {
200
+ return nil
201
+ }
202
202
return resource .NonRetryableError (err )
203
203
}
204
204
return resource .RetryableError (errors .New ("project access token was not deleted" ))
205
205
})
206
206
207
207
return diag .FromErr (err )
208
208
}
209
-
210
- var errResourceGitlabProjectAccessTokenNotFound = errors .New ("project access token not found" )
211
-
212
- // resourceGitlabProjectAccessTokenFind finds the project access token with the specified tokenID.
213
- // It returns a errResourceGitlabProjectAccessTokenNotFound error if the token is not found.
214
- func resourceGitlabProjectAccessTokenFind (ctx context.Context , client * gitlab.Client , project interface {}, projectAccessTokenID int ) (* gitlab.ProjectAccessToken , error ) {
215
- //there is a slight possibility to not find an existing item, for example
216
- // 1. item is #101 (ie, in the 2nd page)
217
- // 2. I load first page (ie. I don't find my target item)
218
- // 3. A concurrent operation remove item 99 (ie, my target item shift to 1st page)
219
- // 4. a concurrent operation add an item
220
- // 5: I load 2nd page (ie. I don't find my target item)
221
- // 6. Total pages and total items properties are unchanged (from the perspective of the reader)
222
-
223
- page := 1
224
- for page != 0 {
225
- projectAccessTokens , response , err := client .ProjectAccessTokens .ListProjectAccessTokens (project , & gitlab.ListProjectAccessTokensOptions {Page : page , PerPage : 100 }, gitlab .WithContext (ctx ))
226
- if err != nil {
227
- return nil , err
228
- }
229
-
230
- for _ , projectAccessToken := range projectAccessTokens {
231
- if projectAccessToken .ID == projectAccessTokenID {
232
- return projectAccessToken , nil
233
- }
234
- }
235
-
236
- page = response .NextPage
237
- }
238
-
239
- return nil , errResourceGitlabProjectAccessTokenNotFound
240
- }
0 commit comments