Skip to content

Commit

Permalink
feat: enable native updating of GCP routes
Browse files Browse the repository at this point in the history
  • Loading branch information
0x416e746f6e committed Sep 8, 2024
1 parent 6054692 commit 00426e3
Show file tree
Hide file tree
Showing 30 changed files with 1,159 additions and 325 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# stage: prefetch ------------------------------------------------------

FROM golang:1.22-alpine as prefetch
FROM golang:1.22-alpine AS prefetch

RUN apk add --no-cache gcc musl-dev linux-headers

Expand All @@ -11,7 +11,7 @@ RUN go mod download

# stage: build ---------------------------------------------------------

FROM prefetch as build
FROM prefetch AS build

COPY . .

Expand Down
48 changes: 0 additions & 48 deletions aws/aws.go

This file was deleted.

41 changes: 41 additions & 0 deletions aws/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package aws

import (
"context"

"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
"github.com/aws/aws-sdk-go-v2/service/ec2"
)

type Client struct {
region string

ec2 *ec2.Client
imds *imds.Client
}

func NewClient(ctx context.Context) (*Client, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return nil, err
}

_imds := imds.NewFromConfig(cfg)
regionOutput, err := _imds.GetRegion(ctx, &imds.GetRegionInput{})
if err != nil {
return nil, err
}

cfg, err = config.LoadDefaultConfig(ctx, config.WithRegion(regionOutput.Region))
if err != nil {
return nil, err
}

return &Client{
region: regionOutput.Region,

ec2: ec2.NewFromConfig(cfg),
imds: imds.NewFromConfig(cfg),
}, nil
}
29 changes: 2 additions & 27 deletions aws/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,8 @@ package aws

import (
"context"
"errors"
"fmt"

"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
)

var (
errFailedToDeriveRegion = errors.New("failed to derive aws region from the environment")
)

func Region(ctx context.Context) (string, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return "", fmt.Errorf("%w: %w",
errFailedToDeriveRegion, err,
)
}

cli := imds.NewFromConfig(cfg)

out, err := cli.GetRegion(ctx, &imds.GetRegionInput{})
if err != nil {
return "", fmt.Errorf("%w: %w",
errFailedToDeriveRegion, err,
)
}

return out.Region, nil
func (cli *Client) Region(ctx context.Context) (string, error) {
return cli.region, nil
}
100 changes: 4 additions & 96 deletions aws/network_interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@ import (
"context"
"errors"
"fmt"
"io"
"strings"

"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
"github.com/aws/aws-sdk-go-v2/service/ec2"
"github.com/flashbots/vpnham/utils"
)
Expand Down Expand Up @@ -47,7 +43,7 @@ func (cli *Client) NetworkInterfaceId(
)
}

macs, err := macAddresses(ctx)
macs, err := cli.macAddresses(ctx)
if err != nil {
return "", fmt.Errorf("%w: %w",
errFailedToDeriveEc2NetworkInterfaceId, err,
Expand All @@ -56,15 +52,15 @@ func (cli *Client) NetworkInterfaceId(

errs := []error{}
for _, mac := range macs {
eni, err := macInterfaceID(ctx, mac)
eni, err := cli.macInterfaceID(ctx, mac)
if err != nil {
return "", fmt.Errorf("%w: %w",
errFailedToDeriveEc2NetworkInterfaceId, err,
)
}

if len(ipv4s) > 0 {
macIPv4s, err := macLocalIPv4s(ctx, mac)
macIPv4s, err := cli.macLocalIPv4s(ctx, mac)
if err != nil {
// there could be legit errors
// (e.g. when getting ipv4 addresses for ipv6-only interface)
Expand All @@ -79,7 +75,7 @@ func (cli *Client) NetworkInterfaceId(
}

if len(ipv6s) > 0 {
macIPv6s, err := macIPv6s(ctx, mac)
macIPv6s, err := cli.macIPv6s(ctx, mac)
if err != nil {
// there could be legit errors
// (e.g. when getting ipv6 addresses for ipv4-only interface)
Expand Down Expand Up @@ -128,91 +124,3 @@ func (cli *Client) NetworkInterfaceVpcID(

return *ifs.VpcId, nil
}

func macAddresses(ctx context.Context) ([]string, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return nil, err
}
cli := imds.NewFromConfig(cfg)

out, err := cli.GetMetadata(ctx, &imds.GetMetadataInput{
Path: "network/interfaces/macs/",
})
if err != nil {
return nil, err
}

buf := &strings.Builder{}
if _, err := io.Copy(buf, out.Content); err != nil {
return nil, err
}

return strings.Split(strings.TrimSpace(buf.String()), "\n"), nil
}

func macInterfaceID(ctx context.Context, mac string) (string, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return "", err
}
cli := imds.NewFromConfig(cfg)

out, err := cli.GetMetadata(ctx, &imds.GetMetadataInput{
Path: "network/interfaces/macs/" + mac + "/interface-id",
})
if err != nil {
return "", err
}

buf := &strings.Builder{}
if _, err := io.Copy(buf, out.Content); err != nil {
return "", err
}

return strings.TrimSpace(buf.String()), nil
}

func macLocalIPv4s(ctx context.Context, mac string) ([]string, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return nil, err
}
cli := imds.NewFromConfig(cfg)

out, err := cli.GetMetadata(ctx, &imds.GetMetadataInput{
Path: "network/interfaces/macs/" + mac + "/local-ipv4s",
})
if err != nil {
return nil, err
}

buf := &strings.Builder{}
if _, err := io.Copy(buf, out.Content); err != nil {
return nil, err
}

return strings.Split(strings.TrimSpace(buf.String()), "\n"), nil
}

func macIPv6s(ctx context.Context, mac string) ([]string, error) {
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
return nil, err
}
cli := imds.NewFromConfig(cfg)

out, err := cli.GetMetadata(ctx, &imds.GetMetadataInput{
Path: "network/interfaces/macs/" + mac + "/ipv6s",
})
if err != nil {
return nil, err
}

buf := &strings.Builder{}
if _, err := io.Copy(buf, out.Content); err != nil {
return nil, err
}

return strings.Split(strings.TrimSpace(buf.String()), "\n"), nil
}
Loading

0 comments on commit 00426e3

Please sign in to comment.