我目前正在学习 Go,我的第一个项目是获取 GCP 项目列表并确定哪些项目启用了 K8s API,然后获取 K8s 集群的版本。
我已经设法获得了一个项目列表,我可以通过它进行过滤,尽管我在比较“google.golang.org/genproto/googleapis/api/serviceusage/v1”时遇到了问题。状态检查是否K8s API 已启用。
到目前为止我有:
package main
import (
"fmt"
"log"
"context"
"reflect"
resourcemanager "cloud.google.com/go/resourcemanager/apiv3"
resourcemanagerpb "google.golang.org/genproto/googleapis/cloud/resourcemanager/v3"
serviceusage "cloud.google.com/go/serviceusage/apiv1"
serviceusagepb "google.golang.org/genproto/googleapis/api/serviceusage/v1"
"google.golang.org/api/iterator"
)
func main() {
ProjectMap := getGCPProjects()
if len(ProjectMap) > 0 {
fmt.Println(ProjectMap)
for key, value := range ProjectMap {
fmt.Println("Checking K8s API for " + key)
ctx := context.Background()
c, err := serviceusage.NewClient(ctx)
if err != nil{
log.Fatal(err)
}
defer c.Close()
req := &serviceusagepb.GetServiceRequest{
Name: value + "/services/container.googleapis.com",
}
resp, err := c.GetService(ctx, req)
if err != nil{
log.Fatal(err)
}
fmt.Println(reflect.TypeOf(resp.State))
fmt.Println(resp.State)
if resp.State == "ENABLED"{
fmt.Println(resp.State)
}
}
} else {
log.Fatal("ProjectMap is null.")
}
}
func getGCPProjects() map[string]string{
ProjectMap := make(map[string]string)
ctx := context.Background()
c, err := resourcemanager.NewProjectsClient(ctx)
if err != nil{
log.Fatal(err)
}
defer c.Close()
rqst := &resourcemanagerpb.SearchProjectsRequest{
Query: "state:ACTIVE",
}
我想看看resp.State是否等于“ENABLED”,这样我就可以继续检查每个集群中部署的 K8s 版本。但是,我目前遇到:
无效操作:resp.State == "ENABLED"(不匹配的类型“google.golang.org/genproto/googleapis/api/serviceusage/v1”。状态和无类型字符串)
我能否以某种方式将从 API 返回的内容转换为字符串,然后与之进行比较?否则,我还能怎么检查?
宝慕林4294392
相关分类