|
51 | 51 | debug bool |
52 | 52 | bridge string |
53 | 53 | bridgeNetwork string |
| 54 | + bridgeNamespace string |
54 | 55 | promURL string |
55 | 56 | id string |
56 | 57 | searchURL string |
@@ -123,12 +124,14 @@ var rootCmd = &cobra.Command{ |
123 | 124 | cleanup(client) |
124 | 125 | } |
125 | 126 | s := config.PerfScenarios{ |
126 | | - HostNetwork: full, |
127 | | - NodeLocal: nl, |
128 | | - AcrossAZ: acrossAZ, |
129 | | - RestConfig: *rconfig, |
130 | | - Configs: cfg, |
131 | | - ClientSet: client, |
| 127 | + HostNetwork: full, |
| 128 | + NodeLocal: nl, |
| 129 | + AcrossAZ: acrossAZ, |
| 130 | + RestConfig: *rconfig, |
| 131 | + Configs: cfg, |
| 132 | + ClientSet: client, |
| 133 | + BridgeNetwork: bridge, |
| 134 | + BridgeNamespace: bridgeNamespace, |
132 | 135 | } |
133 | 136 | if serverIPAddr != "" { |
134 | 137 | s.ExternalServer = true |
@@ -213,6 +216,25 @@ var rootCmd = &cobra.Command{ |
213 | 216 | } |
214 | 217 | } |
215 | 218 |
|
| 219 | + // Validate bridge network configuration before creating pods |
| 220 | + if bridge != "" && !vm { |
| 221 | + // Create dynamic client for validation if not already created |
| 222 | + var dynClient dynamic.Interface |
| 223 | + if s.DClient != nil { |
| 224 | + dynClient = s.DClient |
| 225 | + } else { |
| 226 | + dynClient, err = dynamic.NewForConfig(rconfig) |
| 227 | + if err != nil { |
| 228 | + log.Fatalf("Failed to create dynamic client for bridge validation: %v", err) |
| 229 | + } |
| 230 | + } |
| 231 | + |
| 232 | + err = k8s.ValidateBridgeNetwork(client, dynClient, bridge, bridgeNamespace) |
| 233 | + if err != nil { |
| 234 | + log.Fatalf("Bridge network validation failed: %v", err) |
| 235 | + } |
| 236 | + } |
| 237 | + |
216 | 238 | // Build the SUT (Deployments) |
217 | 239 | err = k8s.BuildSUT(client, &s) |
218 | 240 | if err != nil { |
@@ -491,9 +513,22 @@ func executeWorkload(nc config.Config, |
491 | 513 | if s.VM { |
492 | 514 | npr.UdnInfo = npr.UdnInfo + " - " + s.UdnPluginBinding |
493 | 515 | } |
494 | | - //when using a bridge |
| 516 | + } else if s.BridgeNetwork != "" { |
| 517 | + // For regular pods, extract bridge IP from network status |
| 518 | + serverIP, err = k8s.ExtractBridgeIp(s.Server.Items[0], s.BridgeNetwork, s.BridgeNamespace) |
| 519 | + if err != nil { |
| 520 | + log.Errorf("Failed to extract bridge IP: %v", err) |
| 521 | + // Fall back to default IP |
| 522 | + serverIP = s.Server.Items[0].Status.PodIP |
| 523 | + } |
| 524 | + log.Debugf("Using bridge network IP: %s (interface: net1)", serverIP) |
| 525 | + |
| 526 | + // Set bridge info similar to UdnInfo |
| 527 | + npr.BridgeInfo = fmt.Sprintf("%s/%s", s.BridgeNamespace, s.BridgeNetwork) |
495 | 528 | } else if s.BridgeServerNetwork != "" { |
| 529 | + // For VMs, use static bridge IP from JSON config |
496 | 530 | serverIP = strings.Split(s.BridgeServerNetwork, "/")[0] |
| 531 | + npr.BridgeInfo = fmt.Sprintf("VM Bridge (%s)", serverIP) |
497 | 532 | } else { |
498 | 533 | if hostNet { |
499 | 534 | serverIP = s.ServerHost.Items[0].Status.PodIP |
@@ -595,8 +630,9 @@ func main() { |
595 | 630 | rootCmd.Flags().BoolVar(&udnl3, "udnl3", false, "Create and use a layer3 UDN as a primary network.") |
596 | 631 | rootCmd.MarkFlagsMutuallyExclusive("udnl2", "udnl3") |
597 | 632 | rootCmd.Flags().StringVar(&udnPluginBinding, "udnPluginBinding", "passt", "UDN with VMs only - the binding method of the UDN interface, select 'passt' or 'l2bridge'") |
598 | | - rootCmd.Flags().StringVar(&bridge, "bridge", "", "Name of the NNCP to be used for creating bridge interface - VM only.") |
599 | | - rootCmd.Flags().StringVar(&bridgeNetwork, "bridgeNetwork", "bridgeNetwork.json", "Json file for the network defined by the bridge interface - bridge should be enabled") |
| 633 | + rootCmd.Flags().StringVar(&bridge, "bridge", "", "Name of the NetworkAttachmentDefinition to be used for bridge interface") |
| 634 | + rootCmd.Flags().StringVar(&bridgeNamespace, "bridgeNamespace", "default", "Namespace of the NetworkAttachmentDefinition for bridge interface") |
| 635 | + rootCmd.Flags().StringVar(&bridgeNetwork, "bridgeNetwork", "bridgeNetwork.json", "Json file for the VM network defined by the bridge interface - bridge should be enabled") |
600 | 636 | rootCmd.Flags().StringVar(&promURL, "prom", "", "Prometheus URL") |
601 | 637 | rootCmd.Flags().StringVar(&id, "uuid", "", "User provided UUID") |
602 | 638 | rootCmd.Flags().StringVar(&searchURL, "search", "", "OpenSearch URL, if you have auth, pass in the format of https://user:pass@url:port") |
|
0 commit comments