@@ -273,55 +273,57 @@ func serverToInstance(v *servers.Server) (*infrav1.Instance, error) {
273
273
SSHKeyName : v .KeyName ,
274
274
State : infrav1 .InstanceState (v .Status ),
275
275
}
276
- ip , err := getIPFromInstance (v )
276
+ addrMap , err := getIPFromInstance (v )
277
277
if err != nil {
278
278
return i , err
279
279
}
280
- i .IP = ip
280
+ i .IP = addrMap ["internal" ]
281
+ if addrMap ["floating" ] != "" {
282
+ i .FloatingIP = addrMap ["floating" ]
283
+ }
281
284
return i , nil
282
285
}
283
286
284
- func getIPFromInstance (v * servers.Server ) (string , error ) {
287
+ func getIPFromInstance (v * servers.Server ) (map [string ]string , error ) {
288
+ addrMap := make (map [string ]string )
285
289
if v .AccessIPv4 != "" && net .ParseIP (v .AccessIPv4 ) != nil {
286
- return v .AccessIPv4 , nil
290
+ addrMap ["internal" ] = v .AccessIPv4
291
+ return addrMap , nil
287
292
}
288
293
type networkInterface struct {
289
294
Address string `json:"addr"`
290
295
Version float64 `json:"version"`
291
296
Type string `json:"OS-EXT-IPS:type"`
292
297
}
293
- var addrList []string
294
298
295
299
for _ , b := range v .Addresses {
296
300
list , err := json .Marshal (b )
297
301
if err != nil {
298
- return "" , fmt .Errorf ("extract IP from instance err: %v" , err )
302
+ return nil , fmt .Errorf ("extract IP from instance err: %v" , err )
299
303
}
300
304
var networks []interface {}
301
305
err = json .Unmarshal (list , & networks )
302
306
if err != nil {
303
- return "" , fmt .Errorf ("extract IP from instance err: %v" , err )
307
+ return nil , fmt .Errorf ("extract IP from instance err: %v" , err )
304
308
}
305
309
for _ , network := range networks {
306
310
var netInterface networkInterface
307
311
b , _ := json .Marshal (network )
308
312
err = json .Unmarshal (b , & netInterface )
309
313
if err != nil {
310
- return "" , fmt .Errorf ("extract IP from instance err: %v" , err )
314
+ return nil , fmt .Errorf ("extract IP from instance err: %v" , err )
311
315
}
312
316
if netInterface .Version == 4.0 {
313
317
if netInterface .Type == "floating" {
314
- return netInterface .Address , nil
318
+ addrMap ["floating" ] = netInterface .Address
319
+ } else {
320
+ addrMap ["internal" ] = netInterface .Address
315
321
}
316
- addrList = append (addrList , netInterface .Address )
317
322
}
318
323
}
319
324
}
320
- if len (addrList ) != 0 {
321
- return addrList [0 ], nil
322
- }
323
325
324
- return "" , fmt . Errorf ( "extract IP from instance err" )
326
+ return addrMap , nil
325
327
}
326
328
327
329
// applyRootVolume sets a root volume if the root volume Size is not 0
0 commit comments