Jenney
Jenney

Reputation: 291

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

Upvotes: 0

Views: 178

Answers (1)

John Hanley
John Hanley

Reputation: 81464

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

Upvotes: 2

Related Questions