GCP — получить NAT GW проекта

У нас есть учетная запись на 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

GCP — получить NAT GW проекта

Обновить

Я попробовал следующее как есть и получил ошибку

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
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Шлюз 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)
}

Документация SDK

Спасибо, не могли бы вы добавить импорт, который вы используете?

Alberto 19.03.2022 08:15

Я добавил оператор импорта

John Hanley 19.03.2022 08:19

Я только что добавил ссылку на документацию Go Compute SDK.

John Hanley 19.03.2022 08:24

спасибо, у вас работает? У меня возникла ошибка при запуске кода, посмотрите мое обновление

Alberto 19.03.2022 08:26

@Alberto Альберто Я обновил свой ответ, включив в него раздел авторизации с использованием ADC. Мой первый ответ был именно тем разделом, который вам нужен. Я предположил, что вы знаете, как настроить клиент, поскольку я не знал, какой механизм авторизации вы используете (учетная запись службы, ADC и т. д.).

John Hanley 19.03.2022 08:32

Другие вопросы по теме