Skip to content

Commit daea703

Browse files
committed
project paging
Signed-off-by: Lukas Hoehl <lukas.hoehl@stackit.cloud>
1 parent 03fbbbc commit daea703

File tree

1 file changed

+34
-23
lines changed

1 file changed

+34
-23
lines changed

internal/cmd/project/list/tree.go

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -130,42 +130,53 @@ func (r *resourceTree) fillNode(ctx context.Context, parent *node) error {
130130
lifecycleState: resourcemanager.LIFECYCLESTATE_ACTIVE,
131131
labels: folder.GetLabels(),
132132
}
133+
r.mu.Lock()
133134
parent.children = append(parent.children, newFolderNode)
135+
r.mu.Unlock()
134136
return r.fillNode(ctx, newFolderNode)
135137
})
136138
}
137139
return g.Wait()
138140
}
139141

140142
func (r *resourceTree) getNodeProjects(ctx context.Context, parent *node) error {
141-
req := r.resourceClient.ListProjects(ctx).ContainerParentId(parent.resourceID)
142-
resp, err := req.Execute()
143-
if err != nil {
144-
if !isForbiddenError(err) {
145-
return err
143+
offset := 0
144+
for {
145+
req := r.resourceClient.ListProjects(ctx).ContainerParentId(parent.resourceID).Offset(float32(offset))
146+
if r.projectCreationTimeAfter != nil {
147+
req = req.CreationTimeStart(*r.projectCreationTimeAfter)
146148
}
147-
// listing projects for parent was forbidden, trying with member
148-
resp, err = req.Member(r.member).Execute()
149+
resp, err := req.Execute()
149150
if err != nil {
150-
return err
151-
}
152-
}
153-
for _, proj := range resp.GetItems() {
154-
if r.projectLifecycleState != nil && *r.projectLifecycleState != strings.ToLower(string(proj.GetLifecycleState())) {
155-
continue
151+
if !isForbiddenError(err) {
152+
return err
153+
}
154+
// listing projects for parent was forbidden, trying with member
155+
resp, err = req.Member(r.member).Execute()
156+
if err != nil {
157+
return err
158+
}
156159
}
157-
if r.projectCreationTimeAfter != nil && !proj.CreationTime.After(*r.projectCreationTimeAfter) {
158-
return nil
160+
if len(resp.GetItems()) == 0 {
161+
break
159162
}
160-
projNode := &node{
161-
resourceID: proj.GetProjectId(),
162-
typ: resourceTypeProject,
163-
name: proj.GetName(),
164-
labels: proj.GetLabels(),
165-
lifecycleState: proj.GetLifecycleState(),
166-
parent: parent,
163+
for _, proj := range resp.GetItems() {
164+
if r.projectLifecycleState != nil && *r.projectLifecycleState != strings.ToLower(string(proj.GetLifecycleState())) {
165+
continue
166+
}
167+
projNode := &node{
168+
resourceID: proj.GetProjectId(),
169+
typ: resourceTypeProject,
170+
name: proj.GetName(),
171+
labels: proj.GetLabels(),
172+
lifecycleState: proj.GetLifecycleState(),
173+
parent: parent,
174+
}
175+
r.mu.Lock()
176+
parent.children = append(parent.children, projNode)
177+
r.mu.Unlock()
167178
}
168-
parent.children = append(parent.children, projNode)
179+
offset += len(resp.GetItems())
169180
}
170181
return nil
171182
}

0 commit comments

Comments
 (0)