github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/gce/cloudnat.go (about) 1 package gce 2 3 import ( 4 "github.com/caos/orbos/internal/helpers" 5 uuid "github.com/satori/go.uuid" 6 "google.golang.org/api/compute/v1" 7 "google.golang.org/api/googleapi" 8 ) 9 10 func destroyNetwork(c *context, deleteFirewalls []func() error) error { 11 svc, err := compute.NewService(c.ctx, *c.auth) 12 if err != nil { 13 return err 14 } 15 16 monitor := c.monitor.WithField("id", c.networkName) 17 18 if err := helpers.Fanout(append(deleteFirewalls, func() error { 19 return pruneErr(operateFunc( 20 func() { monitor.Debug("Deleting Cloud NAT Router") }, 21 computeOpCall(svc.Routers.Delete(c.projectID, c.desired.Region, c.networkName).RequestId(uuid.NewV1().String()).Do), 22 func() error { monitor.Info("Cloud NAT Router deleted"); return nil }, 23 )(), 404) 24 }))(); err != nil { 25 return err 26 } 27 28 return pruneErr(operateFunc( 29 func() { monitor.Debug("Deleting virtual private cloud network") }, 30 computeOpCall(svc.Networks.Delete(c.projectID, c.networkName).RequestId(uuid.NewV1().String()).Do), 31 func() error { monitor.Info("Virtual private cloud network deleted"); return nil }, 32 )(), 404) 33 } 34 35 func ensureNetwork(c *context, createFirewalls []func() error, deleteFirewalls []func() error) error { 36 svc, err := compute.NewService(c.ctx, *c.auth) 37 if err != nil { 38 return err 39 } 40 41 monitor := c.monitor.WithField("id", c.networkName) 42 43 if err := pruneErr(operateFunc( 44 func() { monitor.Debug("Creating virtual private cloud network") }, 45 computeOpCall(svc.Networks.Insert(c.projectID, &compute.Network{ 46 Name: c.networkName, 47 AutoCreateSubnetworks: true, 48 }).RequestId(uuid.NewV1().String()).Do), 49 func() error { monitor.Info("Virtual private cloud created"); return nil }, 50 )(), 409); err != nil { 51 return err 52 } 53 54 return helpers.Fanout(append(createFirewalls, append(deleteFirewalls, func() error { 55 return pruneErr(operateFunc( 56 func() { monitor.Debug("Creating Cloud NAT Router") }, 57 computeOpCall(svc.Routers.Insert(c.projectID, c.desired.Region, &compute.Router{ 58 Name: c.networkName, 59 Network: c.networkURL, 60 Nats: []*compute.RouterNat{{ 61 Name: c.networkName, 62 NatIpAllocateOption: "AUTO_ONLY", 63 SourceSubnetworkIpRangesToNat: "ALL_SUBNETWORKS_ALL_IP_RANGES", 64 }}, 65 }).RequestId(uuid.NewV1().String()).Do), 66 func() error { monitor.Info("Cloud NAT Router created"); return nil }, 67 )(), 409) 68 })...))() 69 } 70 71 func pruneErr(err error, okCode int) error { 72 e, ok := err.(*googleapi.Error) 73 if !ok || e.Code != okCode { 74 return err 75 } 76 return nil 77 }