@@ -19,7 +19,6 @@ package openstack
19
19
import (
20
20
"bytes"
21
21
"context"
22
- "encoding/json"
23
22
"fmt"
24
23
"net"
25
24
sysos "os"
@@ -30,7 +29,6 @@ import (
30
29
"github.com/gophercloud/gophercloud"
31
30
"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
32
31
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
33
- "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/trunk_details"
34
32
"github.com/gophercloud/gophercloud/openstack/networking/v2/networks"
35
33
neutronports "github.com/gophercloud/gophercloud/openstack/networking/v2/ports"
36
34
"github.com/gophercloud/gophercloud/pagination"
@@ -46,7 +44,6 @@ import (
46
44
"k8s.io/cloud-provider-openstack/pkg/util"
47
45
"k8s.io/cloud-provider-openstack/pkg/util/errors"
48
46
"k8s.io/cloud-provider-openstack/pkg/util/metadata"
49
- "k8s.io/cloud-provider-openstack/pkg/util/openstack"
50
47
)
51
48
52
49
// Instances encapsulates an implementation of Instances for OpenStack.
@@ -576,7 +573,7 @@ func getServerByName(client *gophercloud.ServiceClient, name types.NodeName) (*S
576
573
// * access IPs
577
574
// * metadata hostname
578
575
// * server object Addresses (floating type)
579
- func nodeAddresses (srv * servers.Server , ports []neutronports. Port , client * gophercloud.ServiceClient , networkingOpts NetworkingOpts ) ([]v1.NodeAddress , error ) {
576
+ func nodeAddresses (srv * servers.Server , ports []PortWithTrunkDetails , client * gophercloud.ServiceClient , networkingOpts NetworkingOpts ) ([]v1.NodeAddress , error ) {
580
577
addrs := []v1.NodeAddress {}
581
578
582
579
// parse private IP addresses first in an ordered manner
@@ -640,35 +637,24 @@ func nodeAddresses(srv *servers.Server, ports []neutronports.Port, client *gophe
640
637
// This exposes the vlan networks to which subports are attached
641
638
subportAddresses := make (map [string ][]Address )
642
639
643
- type portWithTrunkDetails struct {
644
- neutronports.Port
645
- trunk_details.TrunkDetailsExt
646
- }
647
- var portDetails []portWithTrunkDetails
648
-
649
- bodyBytes , err := json .Marshal (ports )
650
- if err == nil {
651
- if json .Unmarshal (bodyBytes , & portDetails ) == nil {
652
- for _ , portExt := range portDetails {
653
- klog .V (5 ).Infof ("Node '%s' port '%s' trunk_details '%v'" , srv .Name , portExt .Name , portExt .TrunkDetails )
654
- for _ , subport := range portExt .TrunkDetails .SubPorts {
655
- p , err := neutronports .Get (client , subport .PortID ).Extract ()
656
- if err != nil {
657
- klog .Errorf ("Failed to get subport %s details: %v" , subport .PortID , err )
658
- continue
659
- }
660
- n , err := networks .Get (client , p .NetworkID ).Extract ()
661
- if err != nil {
662
- klog .Errorf ("Failed to get subport %s network details: %v" , subport .PortID , err )
663
- continue
664
- }
665
- for _ , fixedIP := range p .FixedIPs {
666
- isIPv6 := net .ParseIP (fixedIP .IPAddress ).To4 () == nil
667
- if ! (isIPv6 && networkingOpts .IPv6SupportDisabled ) {
668
- addr := Address {IPType : "fixed" , Addr : fixedIP .IPAddress }
669
- subportAddresses [n .Name ] = append (subportAddresses [n .Name ], addr )
670
- }
671
- }
640
+ for _ , port := range ports {
641
+ for _ , subport := range port .TrunkDetails .SubPorts {
642
+ p , err := neutronports .Get (client , subport .PortID ).Extract ()
643
+ if err != nil {
644
+ klog .Errorf ("Failed to get subport %s details: %v" , subport .PortID , err )
645
+ continue
646
+ }
647
+ n , err := networks .Get (client , p .NetworkID ).Extract ()
648
+ if err != nil {
649
+ klog .Errorf ("Failed to get subport %s network details: %v" , subport .PortID , err )
650
+ continue
651
+ }
652
+ for _ , fixedIP := range p .FixedIPs {
653
+ isIPv6 := net .ParseIP (fixedIP .IPAddress ).To4 () == nil
654
+ if ! (isIPv6 && networkingOpts .IPv6SupportDisabled ) {
655
+ addr := Address {IPType : "fixed" , Addr : fixedIP .IPAddress }
656
+ subportAddresses [n .Name ] = append (subportAddresses [n .Name ], addr )
657
+ klog .V (5 ).Infof ("Node '%s' is added subport '%s' address '%s/%s'" , srv .Name , p .Name , n .Name , addr )
672
658
}
673
659
}
674
660
}
@@ -735,6 +721,7 @@ func nodeAddresses(srv *servers.Server, ports []neutronports.Port, client *gophe
735
721
sortNodeAddresses (addrs , networkingOpts .AddressSortOrder )
736
722
}
737
723
724
+ klog .V (5 ).Infof ("Node '%s' returns addresses '%v'" , srv .Name , addrs )
738
725
return addrs , nil
739
726
}
740
727
@@ -753,10 +740,21 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName,
753
740
}
754
741
755
742
// getAttachedPorts returns a list of ports attached to a server.
756
- func getAttachedPorts (client * gophercloud.ServiceClient , serverID string ) ([]neutronports. Port , error ) {
743
+ func getAttachedPorts (client * gophercloud.ServiceClient , serverID string ) ([]PortWithTrunkDetails , error ) {
757
744
listOpts := neutronports.ListOpts {
758
745
DeviceID : serverID ,
759
746
}
760
747
761
- return openstack .GetPorts (client , listOpts )
748
+ var ports []PortWithTrunkDetails
749
+
750
+ allPages , err := neutronports .List (client , listOpts ).AllPages ()
751
+ if err != nil {
752
+ return ports , err
753
+ }
754
+ err = neutronports .ExtractPortsInto (allPages , & ports )
755
+ if err != nil {
756
+ return ports , err
757
+ }
758
+
759
+ return ports , nil
762
760
}
0 commit comments