@@ -22,6 +22,8 @@ import (
2222 "k8s.io/klog/v2"
2323 kexec "k8s.io/utils/exec"
2424
25+ "github.com/ovn-org/libovsdb/client"
26+
2527 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/clustermanager"
2628 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/config"
2729 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/controllermanager"
@@ -521,12 +523,7 @@ func runOvnKube(ctx context.Context, runMode *ovnkubeRunMode, ovnClientset *util
521523 }()
522524 }
523525
524- ovsClient , err := libovsdb .NewOVSClient (ctx .Done ())
525- if err != nil {
526- cancel ()
527- return fmt .Errorf ("failed to initialize libovsdb vswitchd client: %w" , err )
528- }
529-
526+ var ovsClient client.Client
530527 if runMode .node {
531528 wg .Add (1 )
532529 go func () {
@@ -541,14 +538,20 @@ func runOvnKube(ctx context.Context, runMode *ovnkubeRunMode, ovnClientset *util
541538 // register ovnkube node specific prometheus metrics exported by the node
542539 metrics .RegisterNodeMetrics (ctx .Done ())
543540
541+ ovsClient , err = libovsdb .NewOVSClient (ctx .Done ())
542+ if err != nil {
543+ nodeErr = fmt .Errorf ("failed to initialize libovsdb vswitchd client: %w" , err )
544+ return
545+ }
544546 nodeControllerManager , err := controllermanager .NewNodeControllerManager (
545547 ovnClientset ,
546548 watchFactory ,
547549 runMode .identity ,
548550 wg ,
549551 eventRecorder ,
550552 routemanager .NewController (),
551- ovsClient )
553+ ovsClient ,
554+ )
552555 if err != nil {
553556 nodeErr = fmt .Errorf ("failed to create node network controller: %w" , err )
554557 return
@@ -572,6 +575,14 @@ func runOvnKube(ctx context.Context, runMode *ovnkubeRunMode, ovnClientset *util
572575 // Note: for ovnkube node mode dpu-host no metrics is required as ovs/ovn is not running on the node.
573576 if config .OvnKubeNode .Mode != types .NodeModeDPUHost && config .Metrics .OVNMetricsBindAddress != "" {
574577 metricsScrapeInterval := 30
578+ defer cancel ()
579+
580+ if ovsClient == nil {
581+ ovsClient , err = libovsdb .NewOVSClient (ctx .Done ())
582+ if err != nil {
583+ return fmt .Errorf ("failed to initialize libovsdb vswitchd client: %w" , err )
584+ }
585+ }
575586 if config .Metrics .ExportOVSMetrics {
576587 metrics .RegisterOvsMetricsWithOvnMetrics (ovsClient , metricsScrapeInterval , ctx .Done ())
577588 }
0 commit comments