'GCP - get project NAT GW's

We have account on GCP which contain valid cloud Nat, now we want to get those values via GCP sdk, I've tried the following and get empty response (maybe I use the wrong API and it not 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)
    }
}

I need to get the following values using GCP GO SDK

enter image description here

update

I tried the following as-is and I got error

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


Solution 1:[1]

A VPN Gateway is not the same as a NAT Gateway.

Use this code to list routers. Within the list of routers, is the NAT Gateways

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 Documentation

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1