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