github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/gce/forwardingrules.go (about) 1 package gce 2 3 import ( 4 "fmt" 5 6 uuid "github.com/satori/go.uuid" 7 ) 8 9 var _ ensureLBFunc = queryForwardingRules 10 11 func queryForwardingRules(context *context, loadbalancing []*normalizedLoadbalancer) ([]func() error, []func() error, error) { 12 gceRules, err := context.client.ForwardingRules. 13 List(context.projectID, context.desired.Region). 14 Filter(fmt.Sprintf(`description : "orb=%s;provider=%s*"`, context.orbID, context.providerID)). 15 Fields("items(description,name,target,portRange,IPAddress)"). 16 Do() 17 if err != nil { 18 return nil, nil, err 19 } 20 21 var ensure []func() error 22 assignRefs := func(lb *normalizedLoadbalancer) { 23 lb.forwardingRule.gce.IPAddress = lb.address.gce.Address 24 lb.forwardingRule.gce.Target = lb.targetPool.gce.SelfLink 25 } 26 27 createLoop: 28 for _, lb := range loadbalancing { 29 for _, gceRule := range gceRules.Items { 30 if gceRule.Description == lb.forwardingRule.gce.Description && gceRule.PortRange == lb.forwardingRule.gce.PortRange { 31 assignRefs(lb) 32 lb.forwardingRule.gce.Name = gceRule.Name 33 continue createLoop 34 } 35 } 36 37 lb.forwardingRule.gce.Name = newName() 38 ensure = append(ensure, operateFunc( 39 func(l *normalizedLoadbalancer) func() { 40 return func() { 41 assignRefs(l) 42 l.forwardingRule.log("Creating forwarding rule", true)() 43 } 44 }(lb), 45 computeOpCall(context.client.ForwardingRules. 46 Insert(context.projectID, context.desired.Region, lb.forwardingRule.gce). 47 RequestId(uuid.NewV1().String()). 48 Do), 49 toErrFunc(lb.forwardingRule.log("Forwarding rule created", false)), 50 )) 51 } 52 53 var remove []func() error 54 55 removeLoop: 56 for _, rule := range gceRules.Items { 57 for _, lb := range loadbalancing { 58 if rule.Description == lb.forwardingRule.gce.Description { 59 continue removeLoop 60 } 61 } 62 remove = append(remove, removeResourceFunc( 63 context.monitor, "forwarding rule", rule.Name, context.client.ForwardingRules. 64 Delete(context.projectID, context.desired.Region, rule.Name). 65 RequestId(uuid.NewV1().String()). 66 Do, 67 )) 68 } 69 return ensure, remove, nil 70 }