Skip to content

Instantly share code, notes, and snippets.

@karmab
Last active June 17, 2023 17:14
Show Gist options
  • Save karmab/1b6193222ccf5775eb192517bb7cc128 to your computer and use it in GitHub Desktop.
Save karmab/1b6193222ccf5775eb192517bb7cc128 to your computer and use it in GitHub Desktop.
Update network alias of a gcp instance from metadata
package main
import (
"log"
"os"
"golang.org/x/net/context"
"golang.org/x/oauth2/google"
"google.golang.org/api/compute/v1"
)
func main() {
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)
}
arguments := os.Args[1:]
project := arguments[0]
zone := arguments[1]
instance := arguments[2]
cidrName := arguments[3]
cidr := arguments[4]
info, err := computeService.Instances.Get(project, zone, instance).Context(ctx).Do()
if err != nil {
log.Fatal(err)
}
fingerprint := info.NetworkInterfaces[0].Fingerprint
var aliasIpRanges []*compute.AliasIpRange
aliasIpRange := &compute.AliasIpRange{IpCidrRange: cidr, SubnetworkRangeName: cidrName}
aliasIpRanges = append(aliasIpRanges, aliasIpRange)
rb := &compute.NetworkInterface{AliasIpRanges: aliasIpRanges, Fingerprint: fingerprint}
_, err = computeService.Instances.UpdateNetworkInterface(project, zone, instance, "nic0", rb).Context(ctx).Do()
if err != nil {
log.Fatal(err)
}
}
#!/usr/bin/env bash
export PATH=/root:$PWD:$PATH
export GOOGLE_APPLICATION_CREDENTIALS="${GOOGLE_APPLICATION_CREDENTIALS:-/root/creds.json}"
PROJECT=$(curl -s -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/project/project-id)
ZONE=$(basename $(curl -s -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/zone))
INSTANCE=$hostname
CIDR_NAME=dual-mynetwork
CIDR=192.168.124.0/25
updatealias $PROJECT $ZONE $INSTANCE $CIDR_NAME $CIDR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment