我正在努力学习更多 Go,我的第一个计划是列出我们 GCP 组织中的所有项目(API 相当于gcloud projects list)。稍后我想以此为跳板,在更新 Compute Engine 标签时创建机器映像。
我正在使用 Google API 文档中的这个样板:
“ListProjects 列出了指定文件夹或组织资源的直接子项目。”
package main
import (
resourcemanager "cloud.google.com/go/resourcemanager/apiv3"
"context"
"google.golang.org/api/iterator"
resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v3"
)
func main() {
ctx := context.Background()
c, err := resourcemanager.NewProjectsClient(ctx)
if err != nil {
// TODO: Handle error.
}
defer c.Close()
req := &resourcemanagerpb.ListProjectsRequest{
// TODO: Fill request struct fields.
// See https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/resourcemanager/v3#ListProjectsRequest.
}
it := c.ListProjects(ctx, req)
for {
resp, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
// TODO: Handle error.
}
// TODO: Use resp.
_ = resp
}
}
我意识到这里有我没有完成的“TODO”部分。有人可以帮助建议我如何使用这个样板并获得一个简单的项目列表吗?感觉我缺少某种形式来识别我的组织或项目,但由于我想要整个项目列表,似乎我没有在 API 调用中传达我的组织 ID?
现在我收到“PermissionDenied desc = The caller does not have permission”。但是,我知道我有 Google Application Default 凭据设置,因为我可以在 go 中执行另一个 API 调用以列出计算实例。
缥缈止盈
相关分类