Skip to content

Commit 82bc42e

Browse files
authored
Merge pull request #1014 from Nordix/port_level_trunk_check
Check trunk support before enabling trunk at port level
2 parents 1b66d96 + 74dfbf3 commit 82bc42e

File tree

1 file changed

+47
-9
lines changed

1 file changed

+47
-9
lines changed

pkg/cloud/services/compute/instance.go

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,17 @@ func (s *Service) CreateInstance(openStackCluster *infrav1.OpenStackCluster, mac
7171
ServerGroupID: openStackMachine.Spec.ServerGroupID,
7272
}
7373

74+
// verify that trunk is supported if set at instance level.
7475
if openStackMachine.Spec.Trunk {
75-
trunkSupport, err := s.networkingService.GetTrunkSupport()
76+
trunkSupported, err := s.isTrunkExtSupported()
7677
if err != nil {
77-
return nil, fmt.Errorf("there was an issue verifying whether trunk support is available, please disable it: %v", err)
78+
return nil, err
7879
}
79-
if !trunkSupport {
80-
return nil, fmt.Errorf("there is no trunk support. Please disable it")
80+
if !trunkSupported {
81+
return nil, fmt.Errorf("there is no trunk support. please ensure that the trunk extension is enabled in your OpenStack deployment")
8182
}
82-
instanceSpec.Trunk = trunkSupport
83+
instanceSpec.Trunk = true
8384
}
84-
8585
machineTags := []string{}
8686

8787
// Append machine specific tags
@@ -113,6 +113,17 @@ func (s *Service) CreateInstance(openStackCluster *infrav1.OpenStackCluster, mac
113113
if err != nil {
114114
return nil, err
115115
}
116+
117+
trunkConfigured := s.isTrunkConfigured(nets, instanceSpec.Trunk)
118+
if trunkConfigured {
119+
trunkSupported, err := s.isTrunkExtSupported()
120+
if err != nil {
121+
return nil, err
122+
}
123+
if !trunkSupported {
124+
return nil, fmt.Errorf("there is no trunk support. please ensure that the trunk extension is enabled in your OpenStack deployment")
125+
}
126+
}
116127
instanceSpec.Networks = nets
117128

118129
return s.createInstance(openStackMachine, clusterName, &instanceSpec)
@@ -444,7 +455,7 @@ func (s *Service) DeleteInstance(eventObject runtime.Object, instance *InstanceS
444455
return err
445456
}
446457

447-
trunkSupport, err := s.networkingService.GetTrunkSupport()
458+
trunkSupported, err := s.isTrunkExtSupported()
448459
if err != nil {
449460
return fmt.Errorf("obtaining network extensions: %v", err)
450461
}
@@ -454,12 +465,11 @@ func (s *Service) DeleteInstance(eventObject runtime.Object, instance *InstanceS
454465
return err
455466
}
456467

457-
if trunkSupport {
468+
if trunkSupported {
458469
if err = s.networkingService.DeleteTrunk(eventObject, port.PortID); err != nil {
459470
return err
460471
}
461472
}
462-
463473
if err = s.networkingService.DeletePort(eventObject, port.PortID); err != nil {
464474
return err
465475
}
@@ -615,3 +625,31 @@ func getTimeout(name string, timeout int) time.Duration {
615625
}
616626
return time.Duration(timeout)
617627
}
628+
629+
// isTrunkExtSupported verifies trunk setup on the OpenStack deployment.
630+
func (s *Service) isTrunkExtSupported() (trunknSupported bool, err error) {
631+
trunkSupport, err := s.networkingService.GetTrunkSupport()
632+
if err != nil {
633+
return false, fmt.Errorf("there was an issue verifying whether trunk support is available, Please try again later: %v", err)
634+
}
635+
if !trunkSupport {
636+
return false, nil
637+
}
638+
return true, nil
639+
}
640+
641+
// isTrunkConfigured verifies trunk configuration at instance and port levels, useful for avoiding multple api calls to verify trunk support.
642+
func (s *Service) isTrunkConfigured(nets []infrav1.Network, instanceLevelTrunk bool) bool {
643+
if instanceLevelTrunk {
644+
return true
645+
}
646+
for _, net := range nets {
647+
port := net.PortOpts
648+
if port != nil {
649+
if port.Trunk != nil && *port.Trunk {
650+
return true
651+
}
652+
}
653+
}
654+
return false
655+
}

0 commit comments

Comments
 (0)