From 8041891bc9a6c1f91726d533c313b3ba8de26553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Mon, 26 Aug 2024 23:51:13 -0400 Subject: [PATCH] incusd: Set OVS function on State MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber --- cmd/incusd/daemon.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/cmd/incusd/daemon.go b/cmd/incusd/daemon.go index bc5784e9ed..e9c5d1d77c 100644 --- a/cmd/incusd/daemon.go +++ b/cmd/incusd/daemon.go @@ -170,6 +170,10 @@ type Daemon struct { ovnsb *ovn.SB ovnMu sync.Mutex + // OVS client. + ovs *ovs.VSwitch + ovsMu sync.Mutex + // API info. apiExtensions int } @@ -561,6 +565,7 @@ func (d *Daemon) State() *state.State { LocalConfig: localConfig, OS: d.os, OVN: d.getOVN, + OVS: d.getOVS, Proxy: d.proxy, ServerCert: d.serverCert, ServerClustered: d.serverClustered, @@ -2540,7 +2545,7 @@ func (d *Daemon) setupOVN() error { d.ovnsb = nil // Connect to OpenVswitch. - vswitch, err := ovs.NewVSwitch() + vswitch, err := d.getOVS() if err != nil { return fmt.Errorf("Failed to connect to OVS: %w", err) } @@ -2608,3 +2613,33 @@ func (d *Daemon) getOVN() (*ovn.NB, *ovn.SB, error) { return d.ovnnb, d.ovnsb, nil } + +func (d *Daemon) setupOVS() error { + d.ovsMu.Lock() + defer d.ovsMu.Unlock() + + // Clear any existing client. + d.ovs = nil + + // Connect to OpenVswitch. + vswitch, err := ovs.NewVSwitch(d.localConfig.NetworkOVSConnection()) + if err != nil { + return fmt.Errorf("Failed to connect to OVS: %w", err) + } + + // Set the client. + d.ovs = vswitch + + return nil +} + +func (d *Daemon) getOVS() (*ovs.VSwitch, error) { + if d.ovs == nil { + err := d.setupOVS() + if err != nil { + return nil, fmt.Errorf("Failed to connect to OVS: %w", err) + } + } + + return d.ovs, nil +}