From 35fc926028536b79c8a269b5a3d8ea103b44a5b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 23 Dec 2023 15:49:44 -0500 Subject: [PATCH 1/4] incusd/network/ovn: Properly check transactions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Sponsored-by: Luizalabs (https://luizalabs.com) --- internal/server/network/ovn/ovn_nb_actions.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/internal/server/network/ovn/ovn_nb_actions.go b/internal/server/network/ovn/ovn_nb_actions.go index 20c492d4983..e188b891f9b 100644 --- a/internal/server/network/ovn/ovn_nb_actions.go +++ b/internal/server/network/ovn/ovn_nb_actions.go @@ -1513,7 +1513,12 @@ func (o *NB) ChassisGroupChassisAdd(haChassisGroupName OVNChassisGroup, chassisI // Apply the changes. if len(operations) > 0 { - _, err := o.client.Transact(ctx, operations...) + resp, err := o.client.Transact(ctx, operations...) + if err != nil { + return err + } + + _, err = ovsdb.CheckOperationResults(resp, operations) if err != nil { return err } From 8583a88ba5d1de260b22975caca4756443b8b637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Sat, 23 Dec 2023 15:49:52 -0500 Subject: [PATCH 2/4] incusd/network/ovs: Properly check transactions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Sponsored-by: Luizalabs (https://luizalabs.com) --- internal/server/network/ovs/ovs_actions.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/server/network/ovs/ovs_actions.go b/internal/server/network/ovs/ovs_actions.go index 52f7e21adc7..ef899e8a35d 100644 --- a/internal/server/network/ovs/ovs_actions.go +++ b/internal/server/network/ovs/ovs_actions.go @@ -121,7 +121,12 @@ func (o *VSwitch) BridgeAdd(bridgeName string, mayExist bool, hwaddr net.Hardwar operations = append(operations, bridgeOps...) operations = append(operations, mutateOps...) - _, err = o.client.Transact(ctx, operations...) + resp, err := o.client.Transact(ctx, operations...) + if err != nil { + return err + } + + _, err = ovsdb.CheckOperationResults(resp, operations) if err != nil { return err } @@ -155,7 +160,12 @@ func (o *VSwitch) BridgeDelete(bridgeName string) error { return err } - _, err = o.client.Transact(ctx, operations...) + resp, err := o.client.Transact(ctx, operations...) + if err != nil { + return err + } + + _, err = ovsdb.CheckOperationResults(resp, operations) if err != nil { return err } @@ -227,7 +237,12 @@ func (o *VSwitch) BridgePortAdd(bridgeName string, portName string, mayExist boo operations := append(interfaceOps, portOps...) operations = append(operations, mutateOps...) - _, err = o.client.Transact(ctx, operations...) + resp, err := o.client.Transact(ctx, operations...) + if err != nil { + return err + } + + _, err = ovsdb.CheckOperationResults(resp, operations) if err != nil { return err } From fd4d3a8fad4e319940e8c1db8b2de8a1242a9ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Fri, 29 Dec 2023 03:31:17 -0500 Subject: [PATCH 3/4] incusd/network/ovn: Fix ChassisGroupChassisAdd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Sponsored-by: Luizalabs (https://luizalabs.com) --- internal/server/network/ovn/ovn_nb_actions.go | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/internal/server/network/ovn/ovn_nb_actions.go b/internal/server/network/ovn/ovn_nb_actions.go index e188b891f9b..07700816f68 100644 --- a/internal/server/network/ovn/ovn_nb_actions.go +++ b/internal/server/network/ovn/ovn_nb_actions.go @@ -1452,18 +1452,21 @@ func (o *NB) ChassisGroupChassisAdd(haChassisGroupName OVNChassisGroup, chassisI operations := []ovsdb.Operation{} // Get the chassis group. - haGroup := &ovnNB.HAChassisGroup{Name: string(haChassisGroupName)} - err := o.client.Get(ctx, haGroup) + haGroup := ovnNB.HAChassisGroup{ + Name: string(haChassisGroupName), + } + + err := o.client.Get(ctx, &haGroup) if err != nil { return err } // Look for the chassis in the group. - var haChassis *ovnNB.HAChassis + var haChassis ovnNB.HAChassis for _, entry := range haGroup.HaChassis { - chassis := &ovnNB.HAChassis{UUID: entry} - err = o.client.Get(ctx, chassis) + chassis := ovnNB.HAChassis{UUID: entry} + err = o.client.Get(ctx, &chassis) if err != nil { return err } @@ -1474,15 +1477,15 @@ func (o *NB) ChassisGroupChassisAdd(haChassisGroupName OVNChassisGroup, chassisI } } - if haChassis == nil { + if haChassis.UUID == "" { // No entry found, add a new one. - haChassis = &ovnNB.HAChassis{ + haChassis = ovnNB.HAChassis{ UUID: "chassis", ChassisName: chassisID, Priority: int(priority), } - createOps, err := o.client.Create(haChassis) + createOps, err := o.client.Create(&haChassis) if err != nil { return err } @@ -1490,8 +1493,8 @@ func (o *NB) ChassisGroupChassisAdd(haChassisGroupName OVNChassisGroup, chassisI operations = append(operations, createOps...) // Add the HA Chassis to the group. - updateOps, err := o.client.Where(haGroup).Mutate(haGroup, ovsModel.Mutation{ - Field: haGroup.HaChassis, + updateOps, err := o.client.Where(&haGroup).Mutate(&haGroup, ovsModel.Mutation{ + Field: &haGroup.HaChassis, Mutator: ovsdb.MutateOperationInsert, Value: []string{haChassis.UUID}, }) @@ -1503,7 +1506,7 @@ func (o *NB) ChassisGroupChassisAdd(haChassisGroupName OVNChassisGroup, chassisI } else if haChassis.Priority != int(priority) { // Found but wrong priority, correct it. haChassis.Priority = int(priority) - updateOps, err := o.client.Where(haChassis).Update(haChassis) + updateOps, err := o.client.Where(&haChassis).Update(&haChassis) if err != nil { return err } From e0e12ad9666c3b7f81c45e71ace187e99600be5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Fri, 29 Dec 2023 03:51:19 -0500 Subject: [PATCH 4/4] incusd/network/ovn: Fix BridgeAdd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Sponsored-by: Luizalabs (https://luizalabs.com) --- internal/server/network/ovs/ovs_actions.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/server/network/ovs/ovs_actions.go b/internal/server/network/ovs/ovs_actions.go index ef899e8a35d..bb28716fdcf 100644 --- a/internal/server/network/ovs/ovs_actions.go +++ b/internal/server/network/ovs/ovs_actions.go @@ -67,7 +67,7 @@ func (o *VSwitch) BridgeAdd(bridgeName string, mayExist bool, hwaddr net.Hardwar port := ovsSwitch.Port{ UUID: "port", Name: bridgeName, - Interfaces: []string{"interface"}, + Interfaces: []string{iface.UUID}, } portOps, err := o.client.Create(&port) @@ -97,7 +97,7 @@ func (o *VSwitch) BridgeAdd(bridgeName string, mayExist bool, hwaddr net.Hardwar return err } - if bridge.UUID != "" { + if bridge.UUID != "bridge" { // Bridge already exists. return nil }