获取项目的NAT网关

huangapple go评论89阅读模式
英文:

GCP - get project NAT GW's

问题

我们在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{
		Project: proj,
	}
	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获取以下值:

获取项目的NAT网关

更新

我尝试了原样的代码,但是出现了错误:

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 {
			// 处理每个`router`资源:
			fmt.Printf("%#v\n", router)
			// NAT Gateways可以在router.nats中找到
		}
		return nil
	}); err != nil {
		log.Fatal(err)
	}
}

错误信息为./main.go:16:36: cannot use ctx (type context.Context) as type *http.Client in argument to compute.New
英文:

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

获取项目的NAT网关

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

答案1

得分: 2

一个VPN网关与NAT网关不同。

使用以下代码列出路由器。在路由器列表中,可以找到NAT网关。

import "google.golang.org/api/compute/v1"

// 替换为您的项目的有效值
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 {
        // 处理每个“router”资源:
        fmt.Printf("%#v\n", router)
        // NAT网关可以在router.nats中找到
    }
    return nil
}); err != nil {
    log.Fatal(err)
}

SDK文档

英文:

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

huangapple
  • 本文由 发表于 2022年3月19日 14:45:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/71535963.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定