Skip to content

Commit 50a1d06

Browse files
committed
Use single GET endpoints to retrieve GAT and PAT
1 parent 1a9ef92 commit 50a1d06

File tree

2 files changed

+31
-82
lines changed

2 files changed

+31
-82
lines changed

internal/provider/resource_gitlab_group_access_token.go

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -166,50 +166,31 @@ func resourceGitlabGroupAccessTokenRead(ctx context.Context, d *schema.ResourceD
166166
}
167167

168168
log.Printf("[DEBUG] read gitlab GroupAccessToken %d, group ID %s", groupAccessTokenId, group)
169-
170-
//there is a slight possibility to not find an existing item, for example
171-
// 1. item is #101 (ie, in the 2nd page)
172-
// 2. I load first page (ie. I don't find my target item)
173-
// 3. A concurrent operation remove item 99 (ie, my target item shift to 1st page)
174-
// 4. a concurrent operation add an item
175-
// 5: I load 2nd page (ie. I don't find my target item)
176-
// 6. Total pages and total items properties are unchanged (from the perspective of the reader)
177-
178-
page := 1
179-
for page != 0 {
180-
groupAccessTokens, response, err := client.GroupAccessTokens.ListGroupAccessTokens(group, &gitlab.ListGroupAccessTokensOptions{Page: page, PerPage: 100}, gitlab.WithContext(ctx))
181-
if err != nil {
182-
return diag.FromErr(err)
169+
groupAccessToken, _, err := client.GroupAccessTokens.GetGroupAccessToken(group, groupAccessTokenId, gitlab.WithContext(ctx))
170+
if err != nil {
171+
if is404(err) {
172+
log.Printf("[DEBUG] GitLab GroupAccessToken %d, group ID %s not found, removing from state", groupAccessTokenId, group)
173+
d.SetId("")
174+
return nil
183175
}
176+
return diag.FromErr(err)
177+
}
184178

185-
for _, groupAccessToken := range groupAccessTokens {
186-
if groupAccessToken.ID == groupAccessTokenId {
187-
188-
d.Set("group", group)
189-
d.Set("name", groupAccessToken.Name)
190-
if groupAccessToken.ExpiresAt != nil {
191-
d.Set("expires_at", groupAccessToken.ExpiresAt.String())
192-
}
193-
d.Set("active", groupAccessToken.Active)
194-
d.Set("created_at", groupAccessToken.CreatedAt.Format(time.RFC3339))
195-
d.Set("access_level", accessLevelValueToName[groupAccessToken.AccessLevel])
196-
d.Set("revoked", groupAccessToken.Revoked)
197-
d.Set("user_id", groupAccessToken.UserID)
198-
199-
err = d.Set("scopes", groupAccessToken.Scopes)
200-
if err != nil {
201-
return diag.FromErr(err)
202-
}
203-
204-
return nil
205-
}
206-
}
179+
d.Set("group", group)
180+
d.Set("name", groupAccessToken.Name)
181+
if groupAccessToken.ExpiresAt != nil {
182+
d.Set("expires_at", groupAccessToken.ExpiresAt.String())
183+
}
184+
d.Set("active", groupAccessToken.Active)
185+
d.Set("created_at", groupAccessToken.CreatedAt.Format(time.RFC3339))
186+
d.Set("access_level", accessLevelValueToName[groupAccessToken.AccessLevel])
187+
d.Set("revoked", groupAccessToken.Revoked)
188+
d.Set("user_id", groupAccessToken.UserID)
207189

208-
page = response.NextPage
190+
if err = d.Set("scopes", groupAccessToken.Scopes); err != nil {
191+
return diag.FromErr(err)
209192
}
210193

211-
log.Printf("[DEBUG] failed to read gitlab GroupAccessToken %d, group ID %s", groupAccessTokenId, group)
212-
d.SetId("")
213194
return nil
214195
}
215196

internal/provider/resource_gitlab_project_access_token.go

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,13 @@ func resourceGitlabProjectAccessTokenRead(ctx context.Context, d *schema.Resourc
145145

146146
log.Printf("[DEBUG] read gitlab ProjectAccessToken %d, project ID %s", projectAccessTokenID, project)
147147

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))
153149
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+
}
154155
return diag.FromErr(err)
155156
}
156157

@@ -164,8 +165,7 @@ func resourceGitlabProjectAccessTokenRead(ctx context.Context, d *schema.Resourc
164165
d.Set("revoked", projectAccessToken.Revoked)
165166
d.Set("user_id", projectAccessToken.UserID)
166167
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 {
169169
return diag.FromErr(err)
170170
}
171171

@@ -194,47 +194,15 @@ func resourceGitlabProjectAccessTokenDelete(ctx context.Context, d *schema.Resou
194194
log.Printf("[DEBUG] Waiting for ProjectAccessToken %s to finish deleting", d.Id())
195195

196196
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))
201198
if err != nil {
199+
if is404(err) {
200+
return nil
201+
}
202202
return resource.NonRetryableError(err)
203203
}
204204
return resource.RetryableError(errors.New("project access token was not deleted"))
205205
})
206206

207207
return diag.FromErr(err)
208208
}
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

Comments
 (0)