Skip to content

Commit 9e27ed8

Browse files
Modify the order of obtaining subnet-id
1 parent c4c4268 commit 9e27ed8

File tree

2 files changed

+23
-58
lines changed

2 files changed

+23
-58
lines changed

pkg/cloudprovider/huaweicloud/huaweicloud.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ import (
4747
servicehelper "k8s.io/cloud-provider/service/helpers"
4848
"k8s.io/klog/v2"
4949
"k8s.io/utils/pointer"
50-
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/common"
51-
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/utils"
5250

5351
ecsmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model"
5452
vpcmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/vpc/v2/model"
5553

5654
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/cloudprovider/huaweicloud/wrapper"
55+
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/common"
5756
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/config"
57+
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/utils"
5858
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/utils/mutexkv"
5959
)
6060

@@ -151,16 +151,20 @@ func (b Basic) sendEvent(reason, msg string, service *v1.Service) {
151151
}
152152

153153
func (b Basic) getSubnetID(service *v1.Service, node *v1.Node) (string, error) {
154-
subnetID := getStringFromSvsAnnotation(service, ElbSubnetID, b.cloudConfig.VpcOpts.SubnetID)
154+
subnetID, err := b.getNodeSubnetID(node)
155+
if err != nil {
156+
klog.Warningf("unable to read subnet-id from the node, try reading from service or cloud-config, error: %s", err)
157+
}
155158
if subnetID != "" {
156159
return subnetID, nil
157160
}
158161

159-
subnetID, err := b.getNodeSubnetID(node)
160-
if err != nil {
162+
subnetID = getStringFromSvsAnnotation(service, ElbSubnetID, b.cloudConfig.VpcOpts.SubnetID)
163+
if subnetID == "" {
161164
return "", status.Errorf(codes.InvalidArgument, "missing subnet-id, "+
162-
"can not to read subnet-id from the node also, error: %s", err)
165+
"can not to read subnet-id from service or cloud-config")
163166
}
167+
164168
return subnetID, nil
165169
}
166170

@@ -180,9 +184,9 @@ func (b Basic) getNodeSubnetID(node *v1.Node) (string, error) {
180184
return "", err
181185
}
182186

183-
for _, intfs := range interfaces {
184-
for _, fixedIP := range *intfs.FixedIps {
185-
if *fixedIP.IpAddress == ipAddress {
187+
for _, inter := range interfaces {
188+
for _, fixedIP := range *inter.FixedIps {
189+
if fixedIP.IpAddress != nil && *fixedIP.IpAddress == ipAddress {
186190
return *fixedIP.SubnetId, nil
187191
}
188192
}

pkg/cloudprovider/huaweicloud/sharedloadbalancer.go

Lines changed: 10 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23-
ecsmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model"
24-
eipmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/eip/v2/model"
25-
elbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v2/model"
26-
elbmodelv3 "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
23+
"strconv"
24+
2725
"google.golang.org/grpc/codes"
2826
"google.golang.org/grpc/status"
2927
corev1 "k8s.io/api/core/v1"
@@ -33,7 +31,10 @@ import (
3331
cloudprovider "k8s.io/cloud-provider"
3432
"k8s.io/klog/v2"
3533
"k8s.io/utils/pointer"
36-
"strconv"
34+
35+
eipmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/eip/v2/model"
36+
elbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v2/model"
37+
elbmodelv3 "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
3738

3839
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/cloudprovider/huaweicloud/wrapper"
3940
"sigs.k8s.io/cloud-provider-huaweicloud/pkg/common"
@@ -155,9 +156,10 @@ func (l *SharedLoadBalancer) EnsureLoadBalancer(ctx context.Context, clusterName
155156
return nil, err
156157
}
157158
if err != nil && common.IsNotFound(err) {
158-
subnetID, e := l.getSubnetID(service, nodes[0])
159-
if e != nil {
160-
return nil, e
159+
subnetID := getStringFromSvsAnnotation(service, ElbSubnetID, l.cloudConfig.VpcOpts.SubnetID)
160+
if subnetID == "" {
161+
return nil, status.Errorf(codes.InvalidArgument, "missing subnet-id, "+
162+
"can not to read subnet-id from service or cloud-config")
161163
}
162164
loadbalancer, err = l.createLoadbalancer(clusterName, subnetID, service)
163165
}
@@ -989,47 +991,6 @@ func unbindEIP(eipClient *wrapper.EIpClient, vipPortID, eipID string, keepEIP bo
989991
return nil
990992
}
991993

992-
func (l *SharedLoadBalancer) getSubnetID(service *v1.Service, node *v1.Node) (string, error) {
993-
subnetID := getStringFromSvsAnnotation(service, ElbSubnetID, l.cloudConfig.VpcOpts.SubnetID)
994-
if subnetID != "" {
995-
return subnetID, nil
996-
}
997-
998-
subnetID, err := l.getNodeSubnetID(node)
999-
if err != nil {
1000-
return "", status.Errorf(codes.InvalidArgument, "missing subnet-id, "+
1001-
"can not to read subnet-id from the node also, error: %s", err)
1002-
}
1003-
return subnetID, nil
1004-
}
1005-
1006-
func (l *SharedLoadBalancer) getNodeSubnetID(node *corev1.Node) (string, error) {
1007-
ipAddress, err := getNodeAddress(node)
1008-
if err != nil {
1009-
return "", err
1010-
}
1011-
1012-
instance, err := l.ecsClient.GetByNodeName(node.Name)
1013-
if err != nil {
1014-
return "", err
1015-
}
1016-
1017-
interfaces, err := l.ecsClient.ListInterfaces(&ecsmodel.ListServerInterfacesRequest{ServerId: instance.Id})
1018-
if err != nil {
1019-
return "", err
1020-
}
1021-
1022-
for _, ia := range interfaces {
1023-
for _, fixedIP := range *ia.FixedIps {
1024-
if *fixedIP.IpAddress == ipAddress {
1025-
return *fixedIP.SubnetId, nil
1026-
}
1027-
}
1028-
}
1029-
1030-
return "", fmt.Errorf("failed to get node subnet ID")
1031-
}
1032-
1033994
func getNodeAddress(node *corev1.Node) (string, error) {
1034995
addresses := node.Status.Addresses
1035996
if len(addresses) == 0 {

0 commit comments

Comments
 (0)