Skip to content

Commit bed7073

Browse files
authored
Merge pull request #5251 from flavio-fernandes/networkqos-design.udn
network-qos: Expand Network QoS to fully support UDN
2 parents 192f575 + 128cd69 commit bed7073

File tree

3 files changed

+349
-15
lines changed

3 files changed

+349
-15
lines changed

go-controller/pkg/ovn/controller/network_qos/network_qos.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,28 @@ func (c *Controller) networkManagedByMe(networkSelectors crdtypes.NetworkSelecto
325325
switch networkSelector.NetworkSelectionType {
326326
case crdtypes.DefaultNetwork:
327327
return c.IsDefault(), nil
328+
case crdtypes.PrimaryUserDefinedNetworks:
329+
if !c.IsPrimaryNetwork() {
330+
return false, nil
331+
}
332+
if networkSelector.PrimaryUserDefinedNetworkSelector == nil {
333+
return false, fmt.Errorf("empty primary user defined network selector")
334+
}
335+
selectedNads, err = c.getNetAttachDefsByNamespace(&networkSelector.PrimaryUserDefinedNetworkSelector.NamespaceSelector)
336+
if err != nil {
337+
return false, err
338+
}
339+
case crdtypes.SecondaryUserDefinedNetworks:
340+
if !c.IsSecondary() {
341+
return false, nil
342+
}
343+
if networkSelector.SecondaryUserDefinedNetworkSelector == nil {
344+
return false, fmt.Errorf("empty secondary user defined network selector")
345+
}
346+
selectedNads, err = c.getNetAttachDefsBySelectors(&networkSelector.SecondaryUserDefinedNetworkSelector.NamespaceSelector, &networkSelector.SecondaryUserDefinedNetworkSelector.NetworkSelector)
347+
if err != nil {
348+
return false, err
349+
}
328350
case crdtypes.ClusterUserDefinedNetworks:
329351
if networkSelector.ClusterUserDefinedNetworkSelector == nil {
330352
return false, fmt.Errorf("empty cluster user defined network selector")
@@ -388,6 +410,28 @@ func (c *Controller) getAllNetworkQoSes() ([]*networkqosapi.NetworkQoS, error) {
388410
return nqoses, nil
389411
}
390412

413+
func (c *Controller) getNetAttachDefsByNamespace(namespaceSelector *metav1.LabelSelector) ([]*nadv1.NetworkAttachmentDefinition, error) {
414+
var selectedNads []*nadv1.NetworkAttachmentDefinition
415+
if namespaceSelector != nil && namespaceSelector.Size() > 0 {
416+
nsSelector, err := metav1.LabelSelectorAsSelector(namespaceSelector)
417+
if err != nil {
418+
return nil, fmt.Errorf("invalid namespace selector %v: %v", namespaceSelector.String(), err)
419+
}
420+
namespaces, err := c.nqosNamespaceLister.List(nsSelector)
421+
if err != nil {
422+
return nil, fmt.Errorf("failed to list namespaces: %v", err)
423+
}
424+
for _, ns := range namespaces {
425+
nads, err := c.nadLister.NetworkAttachmentDefinitions(ns.Name).List(labels.Everything())
426+
if err != nil {
427+
return nil, fmt.Errorf("failed to list NADs in namespace %s: %v", ns.Name, err)
428+
}
429+
selectedNads = append(selectedNads, nads...)
430+
}
431+
}
432+
return selectedNads, nil
433+
}
434+
391435
func (c *Controller) getNetAttachDefsBySelectors(namespaceSelector, nadSelector *metav1.LabelSelector) ([]*nadv1.NetworkAttachmentDefinition, error) {
392436
if nadSelector == nil || nadSelector.Size() == 0 {
393437
return nil, fmt.Errorf("empty network selector")

go-controller/pkg/ovn/controller/network_qos/network_qos_namespace.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,18 @@ func namespaceMatchesNetworkSelector(namespace *corev1.Namespace, nqos *nqosv1al
9191
return true
9292
}
9393
nsSelector = &selector.NetworkAttachmentDefinitionSelector.NamespaceSelector
94-
/*case selector.PrimaryUserDefinedNetworkSelector != nil:
95-
if selector.PrimaryUserDefinedNetworkSelector.NamespaceSelector.Size() == 0 {
96-
// namespace selector is empty, match all
97-
return true
98-
}
99-
nsSelector = &selector.PrimaryUserDefinedNetworkSelector.NamespaceSelector
100-
case selector.SecondaryUserDefinedNetworkSelector != nil:
101-
if selector.SecondaryUserDefinedNetworkSelector.NamespaceSelector.Size() == 0 {
102-
// namespace selector is empty, match all
103-
return true
104-
}
105-
nsSelector = &selector.SecondaryUserDefinedNetworkSelector.NamespaceSelector
106-
*/
94+
case selector.PrimaryUserDefinedNetworkSelector != nil:
95+
if selector.PrimaryUserDefinedNetworkSelector.NamespaceSelector.Size() == 0 {
96+
// namespace selector is empty, match all
97+
return true
98+
}
99+
nsSelector = &selector.PrimaryUserDefinedNetworkSelector.NamespaceSelector
100+
case selector.SecondaryUserDefinedNetworkSelector != nil:
101+
if selector.SecondaryUserDefinedNetworkSelector.NamespaceSelector.Size() == 0 {
102+
// namespace selector is empty, match all
103+
return true
104+
}
105+
nsSelector = &selector.SecondaryUserDefinedNetworkSelector.NamespaceSelector
107106
}
108107
if nsSelector == nil {
109108
continue
@@ -139,15 +138,14 @@ func networkSelectionChanged(nqos *nqosv1alpha1.NetworkQoS, new *corev1.Namespac
139138
for _, selector := range nqos.Spec.NetworkSelectors {
140139
var nsSelector *metav1.LabelSelector
141140
switch selector.NetworkSelectionType {
142-
/*case crdtypes.PrimaryUserDefinedNetworks:
141+
case crdtypes.PrimaryUserDefinedNetworks:
143142
if selector.PrimaryUserDefinedNetworkSelector != nil {
144143
nsSelector = &selector.PrimaryUserDefinedNetworkSelector.NamespaceSelector
145144
}
146145
case crdtypes.SecondaryUserDefinedNetworks:
147146
if selector.SecondaryUserDefinedNetworkSelector != nil {
148147
nsSelector = &selector.SecondaryUserDefinedNetworkSelector.NamespaceSelector
149148
}
150-
*/
151149
case crdtypes.NetworkAttachmentDefinitions:
152150
if selector.NetworkAttachmentDefinitionSelector != nil {
153151
nsSelector = &selector.NetworkAttachmentDefinitionSelector.NamespaceSelector

0 commit comments

Comments
 (0)