Skip to content

Commit

Permalink
fix: propagate errors upon ipam failure and use lb zone instead of an…
Browse files Browse the repository at this point in the history
…notations (#155)
  • Loading branch information
nox-404 authored Jan 23, 2024
1 parent 1643637 commit 60ea03b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
23 changes: 13 additions & 10 deletions scaleway/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func (i *instances) NodeAddresses(ctx context.Context, name types.NodeName) ([]v
if err != nil {
return nil, err
}
return i.instanceAddresses(server), nil
return i.instanceAddresses(server)
}

// NodeAddressesByProviderID returns the addresses of the specified instance.
Expand All @@ -68,7 +68,7 @@ func (i *instances) NodeAddressesByProviderID(ctx context.Context, providerID st
if err != nil {
return nil, err
}
return i.instanceAddresses(instanceServer), nil
return i.instanceAddresses(instanceServer)
}

// InstanceID returns the cloud provider ID of the node with the specified NodeName.
Expand Down Expand Up @@ -161,7 +161,7 @@ func (i *instances) GetZoneByNodeName(ctx context.Context, nodeName types.NodeNa
// ===========================

// instanceAddresses extracts NodeAdress from the server
func (i *instances) instanceAddresses(server *scwinstance.Server) []v1.NodeAddress {
func (i *instances) instanceAddresses(server *scwinstance.Server) ([]v1.NodeAddress, error) {
addresses := []v1.NodeAddress{
{Type: v1.NodeHostName, Address: server.Hostname},
}
Expand Down Expand Up @@ -194,13 +194,11 @@ func (i *instances) instanceAddresses(server *scwinstance.Server) []v1.NodeAddre
Region: region,
})
if err != nil {
klog.Errorf("unable to query ipam for node %s: %v", server.Name, err)
return addresses
return addresses, fmt.Errorf("unable to query ipam for node %s: %v", server.Name, err)
}

if len(ips.IPs) == 0 {
klog.Errorf("no private network ip for node %s", server.Name)
return addresses
return addresses, fmt.Errorf("no private network ip for node %s", server.Name)
}

for _, nicIP := range ips.IPs {
Expand All @@ -210,7 +208,7 @@ func (i *instances) instanceAddresses(server *scwinstance.Server) []v1.NodeAddre
)
}

return addresses
return addresses, nil
}

// fallback to legacy private ip
Expand All @@ -222,7 +220,7 @@ func (i *instances) instanceAddresses(server *scwinstance.Server) []v1.NodeAddre
)
}

return addresses
return addresses, nil
}

func instanceZone(instanceServer *scwinstance.Server) (cloudprovider.Zone, error) {
Expand Down Expand Up @@ -369,10 +367,15 @@ func (i *instances) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloud
return nil, err
}

addresses, err := i.instanceAddresses(instance)
if err != nil {
return nil, err
}

return &cloudprovider.InstanceMetadata{
ProviderID: BuildProviderID(InstanceTypeInstance, instance.Zone.String(), instance.ID),
InstanceType: instance.CommercialType,
NodeAddresses: i.instanceAddresses(instance),
NodeAddresses: addresses,
Region: region.String(),
Zone: instance.Zone.String(),
}, nil
Expand Down
16 changes: 8 additions & 8 deletions scaleway/loadbalancers.go
Original file line number Diff line number Diff line change
Expand Up @@ -747,7 +747,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
if !stringArrayEqual(backend.Pool, targetIPs) {
klog.V(3).Infof("update server list for backend: %s port: %d loadbalancer: %s", backend.ID, port.NodePort, loadbalancer.ID)
if _, err := l.api.SetBackendServers(&scwlb.ZonedAPISetBackendServersRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
BackendID: backend.ID,
ServerIP: targetIPs,
}); err != nil {
Expand Down Expand Up @@ -800,7 +800,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
klog.Infof("remove all ACLs from frontend: %s port: %d loadbalancer: %s", frontend.ID, frontend.InboundPort, loadbalancer.ID)
for _, acl := range aclsResp.ACLs {
if err := l.api.DeleteACL(&scwlb.ZonedAPIDeleteACLRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
ACLID: acl.ID,
}); err != nil {
return fmt.Errorf("failed removing ACL %s from frontend: %s port: %d loadbalancer: %s err: %v", acl.Name, frontend.ID, frontend.InboundPort, loadbalancer.ID, err)
Expand All @@ -810,7 +810,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
klog.Infof("create all ACLs for frontend: %s port: %d loadbalancer: %s", frontend.ID, frontend.InboundPort, loadbalancer.ID)
for _, acl := range svcAcls {
if _, err := l.api.SetACLs(&scwlb.ZonedAPISetACLsRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
FrontendID: frontend.ID,
ACLs: svcAcls,
}); err != nil {
Expand Down Expand Up @@ -2069,7 +2069,7 @@ func aclsEquals(got []*scwlb.ACL, want []*scwlb.ACLSpec) bool {

func (l *loadbalancers) createBackend(service *v1.Service, loadbalancer *scwlb.LB, backend *scwlb.Backend) (*scwlb.Backend, error) {
b, err := l.api.CreateBackend(&scwlb.ZonedAPICreateBackendRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
LBID: loadbalancer.ID,
Name: backend.Name,
ForwardProtocol: backend.ForwardProtocol,
Expand All @@ -2096,7 +2096,7 @@ func (l *loadbalancers) createBackend(service *v1.Service, loadbalancer *scwlb.L

func (l *loadbalancers) updateBackend(service *v1.Service, loadbalancer *scwlb.LB, backend *scwlb.Backend) (*scwlb.Backend, error) {
b, err := l.api.UpdateBackend(&scwlb.ZonedAPIUpdateBackendRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
BackendID: backend.ID,
Name: backend.Name,
ForwardProtocol: backend.ForwardProtocol,
Expand All @@ -2117,7 +2117,7 @@ func (l *loadbalancers) updateBackend(service *v1.Service, loadbalancer *scwlb.L
}

if _, err := l.api.UpdateHealthCheck(&scwlb.ZonedAPIUpdateHealthCheckRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
BackendID: backend.ID,
Port: backend.ForwardPort,
CheckDelay: backend.HealthCheck.CheckDelay,
Expand All @@ -2141,7 +2141,7 @@ func (l *loadbalancers) updateBackend(service *v1.Service, loadbalancer *scwlb.L

func (l *loadbalancers) createFrontend(service *v1.Service, loadbalancer *scwlb.LB, frontend *scwlb.Frontend, backend *scwlb.Backend) (*scwlb.Frontend, error) {
f, err := l.api.CreateFrontend(&scwlb.ZonedAPICreateFrontendRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
LBID: loadbalancer.ID,
Name: frontend.Name,
InboundPort: frontend.InboundPort,
Expand All @@ -2156,7 +2156,7 @@ func (l *loadbalancers) createFrontend(service *v1.Service, loadbalancer *scwlb.

func (l *loadbalancers) updateFrontend(service *v1.Service, loadbalancer *scwlb.LB, frontend *scwlb.Frontend, backend *scwlb.Backend) (*scwlb.Frontend, error) {
f, err := l.api.UpdateFrontend(&scwlb.ZonedAPIUpdateFrontendRequest{
Zone: getLoadBalancerZone(service),
Zone: loadbalancer.Zone,
FrontendID: frontend.ID,
Name: frontend.Name,
InboundPort: frontend.InboundPort,
Expand Down

0 comments on commit 60ea03b

Please sign in to comment.