@@ -237,7 +237,7 @@ func (i *Instances) NodeAddressesByProviderID(ctx context.Context, providerID st
237
237
return []v1.NodeAddress {}, err
238
238
}
239
239
240
- ports , err := getAttachedPorts (i .network , server .ID )
240
+ ports , err := getAttachedPorts (i .network , i . networkingOpts , server .ID )
241
241
if err != nil {
242
242
return []v1.NodeAddress {}, err
243
243
}
@@ -343,7 +343,7 @@ func (i *Instances) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloud
343
343
return nil , err
344
344
}
345
345
346
- ports , err := getAttachedPorts (i .network , srv .ID )
346
+ ports , err := getAttachedPorts (i .network , i . networkingOpts , srv .ID )
347
347
if err != nil {
348
348
return nil , err
349
349
}
@@ -570,17 +570,17 @@ func getServerByName(client *gophercloud.ServiceClient, name types.NodeName) (*S
570
570
return & serverList [0 ], nil
571
571
}
572
572
573
+ type Address struct {
574
+ IPType string `mapstructure:"OS-EXT-IPS:type"`
575
+ Addr string
576
+ }
577
+
573
578
// IP addresses order:
574
579
// * interfaces private IPs
575
580
// * access IPs
576
581
// * metadata hostname
577
582
// * server object Addresses (floating type)
578
583
func nodeAddresses (srv * servers.Server , ports []ports.Port , networkingOpts NetworkingOpts ) ([]v1.NodeAddress , error ) {
579
- type Address struct {
580
- IPType string `mapstructure:"OS-EXT-IPS:type"`
581
- Addr string
582
- }
583
-
584
584
addrs := []v1.NodeAddress {}
585
585
586
586
// parse private IP addresses first in an ordered manner
@@ -596,7 +596,7 @@ func nodeAddresses(srv *servers.Server, ports []ports.Port, networkingOpts Netwo
596
596
Address : fixedIP .IPAddress ,
597
597
},
598
598
)
599
- if port .NetworkID != "" {
599
+ if port .NetworkID != "" && networkingOpts . TrunkSupportEnabled {
600
600
addr := Address {IPType : "fixed" , Addr : fixedIP .IPAddress }
601
601
allPrivates [port .NetworkID ] = append (allPrivates [port .NetworkID ], addr )
602
602
}
@@ -640,39 +640,10 @@ func nodeAddresses(srv *servers.Server, ports []ports.Port, networkingOpts Netwo
640
640
return nil , err
641
641
}
642
642
643
- // Get the private networks that are not directly connected
644
- if len (addresses ) < len (allPrivates ) {
645
- extraPrivates := make (map [string ][]Address )
646
- // For each private network
647
- for network , interfaceAddresses := range allPrivates {
648
- found := false
649
- // For each address in the private network
650
- for _ , interfaceAddress := range interfaceAddresses {
651
- // Check if the address is directly assigned
652
- for _ , srvAddresses := range addresses {
653
- for _ , srvAddress := range srvAddresses {
654
- if interfaceAddress .Addr == srvAddress .Addr {
655
- found = true
656
- break
657
- }
658
- }
659
- }
660
- }
661
- // All the addresses in the private network are not directly assigned
662
- // Save the private network
663
- if ! found {
664
- extraPrivates [network ] = interfaceAddresses
665
- }
666
- }
667
- klog .V (5 ).Infof ("Node '%s' extra private interfaces '%s'" , srv .Name , extraPrivates )
668
- for network , interfaceAddresses := range extraPrivates {
669
- srvAddresses , ok := addresses [network ]
670
- if ! ok {
671
- addresses [network ] = interfaceAddresses
672
- } else {
673
- addresses [network ] = append (srvAddresses , interfaceAddresses ... )
674
- }
675
- }
643
+ // Add the private addresses that are not directly connected
644
+ if len (addresses ) < len (allPrivates ) && networkingOpts .TrunkSupportEnabled {
645
+ numExtraPrivates := addExtraNodeAddresses (addresses , allPrivates )
646
+ klog .V (5 ).Infof ("Node '%s' is added %d extra private interfaces '%s'" , srv .Name , numExtraPrivates , addresses )
676
647
}
677
648
678
649
var networks []string
@@ -728,13 +699,47 @@ func nodeAddresses(srv *servers.Server, ports []ports.Port, networkingOpts Netwo
728
699
return addrs , nil
729
700
}
730
701
702
+ // addExtraNodeAddresses addes addresses attached via trunk
703
+ func addExtraNodeAddresses (addresses , allPrivates map [string ][]Address ) int {
704
+ extraPrivates := make (map [string ][]Address )
705
+ for network , interfaceAddresses := range allPrivates {
706
+ found := false
707
+ // For each address in the private network
708
+ for _ , interfaceAddress := range interfaceAddresses {
709
+ // Check if the address is directly assigned
710
+ for _ , nodeAddresses := range addresses {
711
+ for _ , nodeAddress := range nodeAddresses {
712
+ if interfaceAddress .Addr == nodeAddress .Addr {
713
+ found = true
714
+ break
715
+ }
716
+ }
717
+ }
718
+ }
719
+ // All the addresses in the private network are not directly assigned
720
+ // Save the private network
721
+ if ! found {
722
+ extraPrivates [network ] = interfaceAddresses
723
+ }
724
+ }
725
+ for network , interfaceAddresses := range extraPrivates {
726
+ srvAddresses , ok := addresses [network ]
727
+ if ! ok {
728
+ addresses [network ] = interfaceAddresses
729
+ } else {
730
+ addresses [network ] = append (srvAddresses , interfaceAddresses ... )
731
+ }
732
+ }
733
+ return len (extraPrivates )
734
+ }
735
+
731
736
func getAddressesByName (client * gophercloud.ServiceClient , name types.NodeName , networkingOpts NetworkingOpts ) ([]v1.NodeAddress , error ) {
732
737
srv , err := getServerByName (client , name )
733
738
if err != nil {
734
739
return nil , err
735
740
}
736
741
737
- ports , err := getAttachedPorts (client , srv .ID )
742
+ ports , err := getAttachedPorts (client , networkingOpts , srv .ID )
738
743
if err != nil {
739
744
return nil , err
740
745
}
@@ -743,7 +748,7 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName,
743
748
}
744
749
745
750
// getAttachedPorts returns a list of ports attached to a server.
746
- func getAttachedPorts (client * gophercloud.ServiceClient , serverID string ) ([]ports.Port , error ) {
751
+ func getAttachedPorts (client * gophercloud.ServiceClient , networkingOpts NetworkingOpts , serverID string ) ([]ports.Port , error ) {
747
752
listOpts := ports.ListOpts {
748
753
DeviceID : serverID ,
749
754
DeviceOwner : "compute:nova" ,
@@ -753,11 +758,13 @@ func getAttachedPorts(client *gophercloud.ServiceClient, serverID string) ([]por
753
758
if err != nil {
754
759
return interfaces , err
755
760
}
756
- subInterfaces , err := getSubInterfaces (client , interfaces )
757
- if err != nil {
758
- return interfaces , err
761
+ if networkingOpts .TrunkSupportEnabled {
762
+ subInterfaces , err := getSubInterfaces (client , interfaces )
763
+ if err != nil {
764
+ return interfaces , err
765
+ }
766
+ interfaces = append (interfaces , subInterfaces ... )
759
767
}
760
- interfaces = append (interfaces , subInterfaces ... )
761
768
762
769
return interfaces , nil
763
770
}
0 commit comments