尝试列出 GCP 组织内的文件夹时出错
Error while trying to list folders inside a GCP organisation
我正在尝试在 GO 中编写一个简单的代码,使用 resourcemanager API 列出 GCP 组织下的所有文件夹。下面是我的代码:
package main
import (
"context"
"log"
resourcemanager "cloud.google.com/go/resourcemanager/apiv2"
"google.golang.org/api/iterator"
resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v2"
)
func main() {
ctx := context.Background()
c, err := resourcemanager.NewFoldersClient(ctx)
if err != nil {
// TODO: Handle error.
log.Println("Error: Failed to start client.")
}
defer c.Close()
req := &resourcemanagerpb.ListFoldersRequest{
Parent: "organizations/<MY-ORG-NAME>",
}
it := c.ListFolders(ctx, req)
tries := 0
for {
resp, err := it.Next()
if err == iterator.Done || tries == 3 {
break
}
if err != nil {
log.Println(err)
}
// TODO: Use resp.
log.Println(resp)
tries++
}
}
代码是直接从API文档中复制过来的,我只是添加了我的组织名称,添加了一些日志功能并限制了for循环中的尝试,因为它一直在打印错误。
每当我 运行 代码时,我都会收到以下错误消息:
2021/11/04 17:06:41 rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/html; charset=UTF-8"
我不确定这是否是解决方案,但是;我想我需要在我的目录中添加一个 .proto
文件才能正常工作,但我不明白该怎么做,也不知道该放什么。我是 GO 的新手,这是我第一次使用 API,所以这一切对我来说似乎很混乱。
非常感谢任何帮助!
迁移到 API v3 解决了这个问题。这非常有效!
感谢所有发表评论的人和找到解决方案的同事!
package main
import (
"context"
"fmt"
"log"
cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v3"
)
func main() {
ctx := context.Background()
svc, err := cloudresourcemanager.NewService(ctx)
if err != nil {
log.Fatal(err)
}
foldersService := cloudresourcemanager.NewFoldersService(svc)
foldersListCall := foldersService.List()
foldersListCall.Parent("organizations/<MY-ORG-ID>")
resp, err := foldersListCall.Do()
if err != nil {
log.Fatal(err)
}
for _, fld := range resp.Folders {
fmt.Println(fld.DisplayName)
}
}
我正在尝试在 GO 中编写一个简单的代码,使用 resourcemanager API 列出 GCP 组织下的所有文件夹。下面是我的代码:
package main
import (
"context"
"log"
resourcemanager "cloud.google.com/go/resourcemanager/apiv2"
"google.golang.org/api/iterator"
resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v2"
)
func main() {
ctx := context.Background()
c, err := resourcemanager.NewFoldersClient(ctx)
if err != nil {
// TODO: Handle error.
log.Println("Error: Failed to start client.")
}
defer c.Close()
req := &resourcemanagerpb.ListFoldersRequest{
Parent: "organizations/<MY-ORG-NAME>",
}
it := c.ListFolders(ctx, req)
tries := 0
for {
resp, err := it.Next()
if err == iterator.Done || tries == 3 {
break
}
if err != nil {
log.Println(err)
}
// TODO: Use resp.
log.Println(resp)
tries++
}
}
代码是直接从API文档中复制过来的,我只是添加了我的组织名称,添加了一些日志功能并限制了for循环中的尝试,因为它一直在打印错误。
每当我 运行 代码时,我都会收到以下错误消息:
2021/11/04 17:06:41 rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/html; charset=UTF-8"
我不确定这是否是解决方案,但是;我想我需要在我的目录中添加一个 .proto
文件才能正常工作,但我不明白该怎么做,也不知道该放什么。我是 GO 的新手,这是我第一次使用 API,所以这一切对我来说似乎很混乱。
非常感谢任何帮助!
迁移到 API v3 解决了这个问题。这非常有效!
感谢所有发表评论的人和找到解决方案的同事!
package main
import (
"context"
"fmt"
"log"
cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v3"
)
func main() {
ctx := context.Background()
svc, err := cloudresourcemanager.NewService(ctx)
if err != nil {
log.Fatal(err)
}
foldersService := cloudresourcemanager.NewFoldersService(svc)
foldersListCall := foldersService.List()
foldersListCall.Parent("organizations/<MY-ORG-ID>")
resp, err := foldersListCall.Do()
if err != nil {
log.Fatal(err)
}
for _, fld := range resp.Folders {
fmt.Println(fld.DisplayName)
}
}