@@ -26,7 +26,6 @@ import (
2626 "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/sdkerr"
2727 ecs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2"
2828 "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model"
29- "github.com/mitchellh/mapstructure"
3029 "google.golang.org/grpc/codes"
3130 "google.golang.org/grpc/status"
3231 v1 "k8s.io/api/core/v1"
@@ -128,14 +127,14 @@ func (e *EcsClient) ListInterfaces(req *model.ListServerInterfacesRequest) ([]mo
128127
129128func (e * EcsClient ) BuildAddresses (server * model.ServerDetail , interfaces []model.InterfaceAttachment ,
130129 networkingOpts * config.NetworkingOptions ) ([]v1.NodeAddress , error ) {
131- addrs := []v1.NodeAddress {}
130+ nodeAddresses := make ( []v1.NodeAddress , 0 )
132131
133132 // parse private IP addresses first in an ordered manner
134- for _ , iface := range interfaces {
135- for _ , fixedIP := range * iface . FixedIps {
136- if * iface . PortState == "ACTIVE" {
133+ for _ , inter := range interfaces {
134+ if * inter . PortState == "ACTIVE" {
135+ for _ , fixedIP := range * inter . FixedIps {
137136 if net .ParseIP (* fixedIP .IpAddress ).To4 () != nil {
138- addToNodeAddresses (& addrs ,
137+ addToNodeAddresses (& nodeAddresses ,
139138 v1.NodeAddress {
140139 Type : v1 .NodeInternalIP ,
141140 Address : * fixedIP .IpAddress ,
@@ -148,75 +147,63 @@ func (e *EcsClient) BuildAddresses(server *model.ServerDetail, interfaces []mode
148147
149148 // process public IP addresses
150149 if server .AccessIPv4 != "" {
151- addToNodeAddresses (& addrs ,
150+ addToNodeAddresses (& nodeAddresses ,
152151 v1.NodeAddress {
153152 Type : v1 .NodeExternalIP ,
154153 Address : server .AccessIPv4 ,
155154 },
156155 )
157156 }
158157
159- // process the rest
160- type Address struct {
161- IPType string `mapstructure:"OS-EXT-IPS:type"`
162- Addr string
158+ nicIDs := make ([]string , 0 )
159+ for nicID := range server .Addresses {
160+ nicIDs = append (nicIDs , nicID )
163161 }
162+ sort .Strings (nicIDs )
164163
165- var addresses map [string ][]Address
166- err := mapstructure .Decode (server .Addresses , & addresses )
167- if err != nil {
168- return nil , err
169- }
170-
171- var networks []string
172- for k := range addresses {
173- networks = append (networks , k )
174- }
175- sort .Strings (networks )
176-
177- for _ , network := range networks {
178- for _ , props := range addresses [network ] {
164+ for _ , nicID := range nicIDs {
165+ for _ , serverAddr := range server .Addresses [nicID ] {
179166 var addressType v1.NodeAddressType
180- if props . IPType == "floating" {
167+ if serverAddr . OSEXTIPStype != nil && serverAddr . OSEXTIPStype . Value () == "floating" {
181168 addressType = v1 .NodeExternalIP
182- } else if utils .IsStrSliceContains (networkingOpts .PublicNetworkName , network ) {
169+ } else if utils .IsStrSliceContains (networkingOpts .PublicNetworkName , nicID ) {
183170 addressType = v1 .NodeExternalIP
184171 // removing already added address to avoid listing it as both ExternalIP and InternalIP
185172 // may happen due to listing "private" network as "public" in CCM's CloudConfig
186- removeFromNodeAddresses (& addrs ,
173+ removeFromNodeAddresses (& nodeAddresses ,
187174 v1.NodeAddress {
188- Address : props .Addr ,
175+ Address : serverAddr .Addr ,
189176 },
190177 )
191178 } else {
192179 if len (networkingOpts .InternalNetworkName ) == 0 ||
193- utils .IsStrSliceContains (networkingOpts .InternalNetworkName , network ) {
180+ utils .IsStrSliceContains (networkingOpts .InternalNetworkName , nicID ) {
194181 addressType = v1 .NodeInternalIP
195182 } else {
196- klog .V (4 ).Infof ("[DEBUG] Node '%s' address '%s' " +
197- "ignored due to 'internal-network-name' option" , server .Name , props .Addr )
183+ klog .V (4 ).Infof ("[DEBUG] Node '%s' address '%s' ignored due to 'internal-network-name' option" ,
184+ server .Name , serverAddr .Addr )
198185
199- removeFromNodeAddresses (& addrs ,
186+ removeFromNodeAddresses (& nodeAddresses ,
200187 v1.NodeAddress {
201- Address : props .Addr ,
188+ Address : serverAddr .Addr ,
202189 },
203190 )
204191 continue
205192 }
206193 }
207194
208- if net .ParseIP (props .Addr ).To4 () != nil {
209- addToNodeAddresses (& addrs ,
195+ if net .ParseIP (serverAddr .Addr ).To4 () != nil {
196+ addToNodeAddresses (& nodeAddresses ,
210197 v1.NodeAddress {
211198 Type : addressType ,
212- Address : props .Addr ,
199+ Address : serverAddr .Addr ,
213200 },
214201 )
215202 }
216203 }
217204 }
218-
219- return addrs , nil
205+ klog . V ( 6 ). Infof ( "server: %s/%s, network addresses: %s" , server . Name , server . Id , utils . ToString ( nodeAddresses ))
206+ return nodeAddresses , nil
220207}
221208
222209func (e * EcsClient ) ListSecurityGroups (instanceID string ) ([]model.NovaSecurityGroup , error ) {
0 commit comments