如何使用go-tfe库获取指定组织的所有工作区且无需分页?
解决方案:获取指定组织下所有Terraform Cloud工作区
因为github.com/hashicorp/go-tfe对应的Terraform Cloud API本身限制了单页最多返回100个工作区,所以无法通过一次调用获取全部数据,必须通过分页遍历所有页面来合并结果。以下是实现代码:
import ( "context" "github.com/hashicorp/go-tfe" ) func getAllWorkspaces(ctx context.Context, tfeClient *tfe.Client, orgName string) ([]*tfe.Workspace, error) { var allWorkspaces []*tfe.Workspace pageNumber := 1 pageSize := 100 // API允许的最大单页数量 for { // 设置当前页的查询参数 opts := &tfe.WorkspaceListOptions{ ListOptions: tfe.ListOptions{ PageNumber: pageNumber, PageSize: pageSize, }, } // 获取当前页的工作区 workspaces, err := tfeClient.Workspaces.List(ctx, orgName, opts) if err != nil { return nil, err } // 将当前页的工作区添加到总列表 allWorkspaces = append(allWorkspaces, workspaces.Items...) // 检查是否还有下一页,没有则退出循环 if workspaces.Pagination.NextPage == 0 { break } // 更新页码,准备获取下一页 pageNumber = workspaces.Pagination.NextPage } return allWorkspaces, nil }
代码说明
- 初始化空切片
allWorkspaces用于存储所有工作区 - 每次请求设置最大单页数量100,减少总请求次数
- 通过返回结果的
Pagination.NextPage判断是否还有后续页面,直到所有页面都获取完成 - 每次获取到的当前页工作区通过
append合并到总列表中
这样就能一次性获取指定组织下的所有工作区,不管总数多少。
内容的提问来源于stack exchange,提问作者Maadhav Jain
相关产品推荐
相关产品推荐

