@@ -371,17 +371,37 @@ func (s *createCommand) ExecuteWithoutArguments(exec commands.Executor) (output.
371371
372372 return output.MarshaledWithHumanDetails {Value : res , Details : []output.DetailRow {
373373 {Title : "UUID" , Value : res .UUID , Colour : ui .DefaultUUUIDColours },
374- {Title : "IP Addresses" , Value : res . IPAddresses , Format : formatIPAddresses },
374+ {Title : "IP Addresses" , Value : res , Format : formatIPAddresses },
375375 }}, nil
376376}
377377
378378func formatIPAddresses (val interface {}) (text.Colors , string , error ) {
379- if ipAddresses , ok := val .(upcloud.IPAddressSlice ); ok {
380- strs := make ([]string , len (ipAddresses ))
381- for i , ipa := range ipAddresses {
382- strs [i ] = ipa .Address
379+ server , ok := val .(* upcloud.ServerDetails )
380+ if ! ok {
381+ return nil , fmt .Sprint (val ), nil
382+ }
383+
384+ // Store addresses in map keys to avoid duplicate addresses
385+ addresses := make (map [string ]bool )
386+
387+ // Get public addressses from ip_addresses list
388+ // Public and utility interfaces created by default (no --network parameters) are only listed here
389+ for _ , ipa := range server .IPAddresses {
390+ addresses [ipa .Address ] = true
391+ }
392+
393+ // Get public and private addresses from networking.interfaces list
394+ // Public and utility interfaces created with --network are also listed here
395+ for _ , iface := range server .Networking .Interfaces {
396+ for _ , ipa := range iface .IPAddresses {
397+ addresses [ipa .Address ] = true
383398 }
384- return nil , strings .Join (strs , ",\n " ), nil
385399 }
386- return nil , fmt .Sprint (val ), nil
400+
401+ var strs []string
402+ for ipa := range addresses {
403+ strs = append (strs , ipa )
404+ }
405+
406+ return nil , strings .Join (strs , ",\n " ), nil
387407}
0 commit comments