У нас есть учетная запись на GCP, которая содержит действительный облачный Nat, теперь мы хотим получить эти значения через
GCP sdk, я попробовал следующее и получил пустой ответ (возможно, я использую неправильный API, а это не так ListExternalVpnGatewaysRequest
)
package main
import (
"context"
"fmt"
compute "cloud.google.com/go/compute/apiv1"
"google.golang.org/api/iterator"
computepb "google.golang.org/genproto/googleapis/cloud/compute/v1"
)
func main() {
ctx := context.Background()
c, err := compute.NewExternalVpnGatewaysRESTClient(ctx)
if err != nil {
fmt.Println(err)
}
defer c.Close()
proj := "dev-proj"
req := &computepb.ListExternalVpnGatewaysRequest{
//Filter: new(string),
//MaxResults: new(uint32),
//OrderBy: new(string),
//PageToken: new(string),
Project: proj,
//ReturnPartialSuccess: new(bool),
}
it := c.List(ctx, req)
for {
resp, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
fmt.Println(err)
}
// TODO: Use resp.
_ = resp
fmt.Println(resp)
}
}
Мне нужно получить следующие значения с помощью GCP GO SDK
Обновить
Я попробовал следующее как есть и получил ошибку
package main
import (
"context"
"fmt"
"google.golang.org/api/compute/v1"
"log"
)
func main() {
project := "my-proj"
region := "my-region"
ctx := context.Background()
computeService, err := compute.New(ctx)
if err != nil {
log.Fatal(err)
}
req := computeService.Routers.List(project, region)
if err := req.Pages(ctx, func(page *compute.RouterList) error {
for _, router := range page.Items {
// process each `router` resource:
fmt.Printf("%#v\n", router)
// NAT Gateways are found in router.nats
}
return nil
}); err != nil {
log.Fatal(err)
}
}
Error is: ./main.go:16:36: cannot use ctx (type context.Context) as type *http.Client in argument to compute.New
Шлюз VPN — это не то же самое, что шлюз NAT.
Используйте этот код для получения списка маршрутизаторов. В списке маршрутизаторов есть шлюзы NAT.
import "google.golang.org/api/compute/v1"
// Replace with valid values for your project
project := "my-project"
region := "my-region"
ctx := context.Background()
c, err := google.DefaultClient(ctx, compute.CloudPlatformScope)
if err != nil {
log.Fatal(err)
}
computeService, err := compute.New(c)
if err != nil {
log.Fatal(err)
}
req := computeService.Routers.List(project, region)
if err := req.Pages(ctx, func(page *compute.RouterList) error {
for _, router := range page.Items {
// process each `router` resource:
fmt.Printf("%#v\n", router)
// NAT Gateways are found in router.nats
}
return nil
}); err != nil {
log.Fatal(err)
}
Я добавил оператор импорта
Я только что добавил ссылку на документацию Go Compute SDK.
спасибо, у вас работает? У меня возникла ошибка при запуске кода, посмотрите мое обновление
@Alberto Альберто Я обновил свой ответ, включив в него раздел авторизации с использованием ADC. Мой первый ответ был именно тем разделом, который вам нужен. Я предположил, что вы знаете, как настроить клиент, поскольку я не знал, какой механизм авторизации вы используете (учетная запись службы, ADC и т. д.).
Спасибо, не могли бы вы добавить импорт, который вы используете?